Python+Flask打造属于自己的Rss安全信息流
字数 1240 2025-08-22 18:37:15
Python+Flask打造RSS安全信息流 - 完整教学文档
一、项目概述
本项目使用Python+Flask框架构建一个聚合多个安全资讯网站内容的RSS信息流系统,主要功能包括:
- 从多个安全资讯网站抓取最新文章
- 将抓取内容格式化存储
- 通过Flask构建Web界面展示
- 实现定时自动更新内容
- 部署上线方案
二、技术基础
1. Flask框架基础
Flask是一个轻量级Python Web框架,核心特点:
- 微框架,只包含基本功能
- 依赖Jinja2模板引擎和Werkzeug WSGI工具集
- 通过扩展实现更多功能
基础Flask应用结构:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run()
2. Flask项目结构
标准Flask项目目录:
project/
├── static/ # 静态文件(css,js,图片等)
├── templates/ # HTML模板文件
└── app.py # 主应用文件
3. Flask模板渲染
使用Jinja2模板引擎:
@app.route('/')
def index():
return render_template('index.html', data=data)
三、核心功能实现
1. RSS内容抓取
使用requests库抓取RSS内容,正则表达式提取关键信息:
import requests
import re
def xianzhi():
url = 'https://xz.aliyun.com/feed'
response = requests.get(url, headers=headers)
html = response.text
# 提取标题和URL
rtitle = r'<entry><title>(.*?)</title><link href="'
title = re.findall(rtitle, html, re.DOTALL)
rurl = r'<link href=rel="alternate">'
url = re.findall(rurl, html, re.DOTALL)
# 存储到文件
with open("./rss_hackxc/xianzhi.txt", "w", encoding='utf-8') as f:
for x, y in zip(url, title):
f.write(f"{x},{y}\n")
2. 非RSS网站内容抓取
对于没有RSS的网站,直接抓取HTML并解析:
def huoxian():
url = 'https://zone.huoxian.cn/?sort=newest'
response = requests.get(url, headers=headers)
html = response.text
rtitle = r'<a href="https://zone.huoxian.cn/d(a>'
title = re.findall(rtitle, html, re.DOTALL)
with open('./rss_hackxc/huoxian.txt', 'w', encoding='utf-8') as f:
for t in title:
t = str(t).strip().replace('\\n','')
f.write(t+"\n")
3. 内容展示
将抓取的内容通过Flask展示:
@app.route('/')
def index():
with open("./rss_hackxc/xianzhi.txt", "r", encoding='utf-8') as f:
content = f.readlines()
body1 = [(line.strip().split(',')[0], line.strip().split(',')[1])
for line in content]
return render_template('index.html', body1=body1)
模板文件(index.html)示例:
<tbody>
{% for xianzhi in body1 %}
<tr>
<td>{{ loop.index }}</td>
<td><a target="_blank" href="{{ xianzhi[0] }}" rel="nofollow">{{ xianzhi[1] }}</a></td>
</tr>
{% endfor %}
</tbody>
四、自动更新功能
使用APScheduler实现定时更新:
from apscheduler.schedulers.background import BackgroundScheduler
scheduler = BackgroundScheduler()
def update_page():
# 调用各抓取函数更新内容
xianzhi()
freebuf()
# ...其他抓取函数
# 生成新的网页内容
new_body = generate_new_body()
# 更新全局变量
global body
body = new_body
# 每10分钟执行一次更新
scheduler.add_job(func=update_page, trigger='interval', seconds=600)
scheduler.start()
五、部署方案
1. 虚拟环境配置
sudo pip install virtualenv
virtualenv ENV_flask
source ENV_flask/bin/activate
pip install flask uwsgi
2. uWSGI配置
创建flask_uwsgi.ini文件:
[uwsgi]
master = true
wsgi-file = app.py
callable = app
http = :8001
processes = 4
threads = 2
buffer-size = 32768
启动命令:
nohup uwsgi --ini flask_uwsgi.ini &
3. Nginx反向代理
修改/etc/nginx/sites-available/default:
server {
listen 80;
server_name your_domain_or_ip;
location / {
proxy_pass http://127.0.0.1:8001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
重启Nginx:
sudo service nginx restart
4. 防火墙设置
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 8001 -s 0.0.0.0/0 -j DROP
sudo iptables -L
六、支持的RSS源
项目中包含的RSS源:
- 先知社区: https://xz.aliyun.com/feed
- Freebuf: http://www.freebuf.com/feed
- Seebug: https://www.seebug.org/rss/new/
- SecWiki: https://www.sec-wiki.com/news/rss
- 安全客: https://api.anquanke.com/data/v1/rss
- 安全牛: https://www.aqniu.com/feed
- 安全脉搏: https://www.secpulse.com/feed
- ctftime: https://ctftime.org/event/list/upcoming/rss/
- Exploit-DB: https://www.exploit-db.com/rss.xml
- 微信公众号RSS列表: https://wechat2rss.xlab.app/posts/list/
七、项目优化建议
- 数据库存储:当前使用文件存储,可改用SQLite或MySQL
- 异常处理:增加网络请求和文件操作的异常处理
- 日志记录:添加日志记录功能
- 用户认证:增加管理员登录功能
- 前端优化:使用Vue.js等框架优化前端交互
- 缓存机制:添加Redis缓存提高性能
八、完整代码结构
rss_security/
├── static/ # 静态资源
│ ├── css/
│ ├── js/
│ └── images/
├── templates/ # 模板文件
│ └── index.html
├── rss_hackxc/ # 存储抓取内容
│ ├── xianzhi.txt
│ ├── freebuf.txt
│ └── ...其他.txt
├── app.py # 主程序
├── flask_uwsgi.ini # uWSGI配置
└── requirements.txt # 依赖包
通过本教程,您可以构建一个完整的RSS安全信息聚合系统,并根据需要扩展更多功能。