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/

七、项目优化建议

  1. 数据库存储:当前使用文件存储,可改用SQLite或MySQL
  2. 异常处理:增加网络请求和文件操作的异常处理
  3. 日志记录:添加日志记录功能
  4. 用户认证:增加管理员登录功能
  5. 前端优化:使用Vue.js等框架优化前端交互
  6. 缓存机制:添加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安全信息聚合系统,并根据需要扩展更多功能。

Python+Flask打造RSS安全信息流 - 完整教学文档 一、项目概述 本项目使用Python+Flask框架构建一个聚合多个安全资讯网站内容的RSS信息流系统,主要功能包括: 从多个安全资讯网站抓取最新文章 将抓取内容格式化存储 通过Flask构建Web界面展示 实现定时自动更新内容 部署上线方案 二、技术基础 1. Flask框架基础 Flask是一个轻量级Python Web框架,核心特点: 微框架,只包含基本功能 依赖Jinja2模板引擎和Werkzeug WSGI工具集 通过扩展实现更多功能 基础Flask应用结构: 2. Flask项目结构 标准Flask项目目录: 3. Flask模板渲染 使用Jinja2模板引擎: 三、核心功能实现 1. RSS内容抓取 使用requests库抓取RSS内容,正则表达式提取关键信息: 2. 非RSS网站内容抓取 对于没有RSS的网站,直接抓取HTML并解析: 3. 内容展示 将抓取的内容通过Flask展示: 模板文件(index.html)示例: 四、自动更新功能 使用APScheduler实现定时更新: 五、部署方案 1. 虚拟环境配置 2. uWSGI配置 创建flask_ uwsgi.ini文件: 启动命令: 3. Nginx反向代理 修改/etc/nginx/sites-available/default: 重启Nginx: 4. 防火墙设置 六、支持的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安全信息聚合系统,并根据需要扩展更多功能。