广西政府采购网公告监控系统
广西政府采购网公告爬取和监控的智能系统,支持多种公告类型的自动爬取、智能筛选、数据存储和通知推送。
功能特性
🕷️ 智能爬虫监控
- 自动爬取广西政府采购网(zfcg.gxzf.gov.cn)的各类采购公告
- 支持10+种公告类型:采购公告、结果公告、合同公告、更正公告、招标文件预公示、单一来源公示、电子卖场公示、履约验收公示、工程类公告、框架协议征集公告等
- 智能反爬虫机制:随机User-Agent、代理轮换、请求延迟控制
🎯 多维度智能筛选
- 关键词过滤:支持多关键词精确匹配和模糊匹配
- 日期范围筛选:支持开始日期和结束日期过滤
- 自动去重:基于内容哈希的智能去重机制
- 来源筛选:按公告类型进行筛选
💾 数据持久化存储
- PostgreSQL数据库:高效的数据存储和查询
- 自动清理:默认90天数据保留,可配置
- 性能优化:连接池、索引优化、批量操作
🔔 高可用性保障
- 重试机制:指数退避重试策略
- 超时控制:连接超时和读取超时设置
- 幂等操作:防止重复处理
- 异常处理:完善的异常捕获和恢复
- 结构化日志:详细的运行日志记录
📱 通知系统
- 企业微信通知:支持文本和Markdown格式消息
- 实时推送:新公告发现即时通知
- 系统告警:异常情况自动告警
📊 Markdown输出
- 自动生成:将公告输出为Markdown格式文件(onu.md)
- 结构化展示:按来源分组、时间排序
- 今日高亮:突出显示今日发布的公告
安装和使用
环境要求
- Python 3.8+
- PostgreSQL 12+
安装步骤
- 克隆项目
cd /path/to/your/workspace
# 项目已创建在 gx_gp_monitor 目录下
- 创建虚拟环境
python3 -m venv venv
source venv/bin/activate # Linux/Mac
# 或
venv\Scripts\activate # Windows
- 安装依赖
pip install -r requirements.txt
- 配置数据库
# 创建PostgreSQL数据库
createdb gx-gp-notify
# 修改配置文件 config/config.yaml 中的数据库连接信息
- 修改配置
# 编辑 config/config.yaml 文件
# 设置数据库连接、企业微信配置、关键词等
使用方法
命令行使用
# 查看帮助
python main.py --help
# 执行一次爬取
python main.py crawl
# 带参数爬取
python main.py crawl --keywords "大化" "信息化" --max-pages 5
# 启动调度器(定时任务)
python main.py scheduler
# 数据清理
python main.py cleanup --days 30
# 查看系统状态
python main.py status
编程接口使用
from gx_gp_monitor.crawler.spider import crawl_announcements
from gx_gp_monitor.filters.filters import filter_from_config
from gx_gp_monitor.storage.postgresql import save_announcements_to_storage
from gx_gp_monitor.storage.md_generator import generate_onu_md
from gx_gp_monitor.notification.wechat import send_announcements_notification
# 执行爬取
results = crawl_announcements()
# 筛选公告
filter_obj = filter_from_config()
filtered_announcements, stats = filter_obj.filter(all_announcements)
# 保存到数据库
saved_count = save_announcements_to_storage(filtered_announcements)
# 生成Markdown文件
generate_onu_md(filtered_announcements)
# 发送通知
send_announcements_notification(filtered_announcements)
配置说明
主要配置文件:config/config.yaml
# 调试模式
debug: false
# 日志配置
log_level: INFO
log_file: logs/gx_gp_monitor.log
# 爬虫配置
crawler:
base_url: "https://zfcg.gxzf.gov.cn"
timeout: 30
max_retries: 3
keyword: ["大化", "信息化"] # 关键词筛选
max_pages: 10
# 数据库配置
database:
enabled: true
host: "localhost"
port: 5432
name: "gx-gp-notify"
user: "your_user"
password: "your_password"
data_retention_days: 90
# 企业微信配置
wechat_app:
enabled: true
corp_id: "your_corp_id"
agent_id: "your_agent_id"
secret: "your_secret"
token: "your_token"
encoding_aes_key: "your_aes_key"
# 调度配置
scheduler:
enabled: true
jobs:
- name: "daily_crawl"
cron: "0 8,14,18 * * *"
enabled: true
公告来源配置
系统支持以下公告类型:
ZcyAnnouncement1: 采购公告ZcyAnnouncement2: 结果公告ZcyAnnouncement3: 合同公告ZcyAnnouncement4: 更正公告ZcyAnnouncement5: 招标文件预公示ZcyAnnouncement6: 单一来源公示ZcyAnnouncement7: 电子卖场公示ZcyAnnouncement10: 履约验收公示ZcyAnnouncement11: 工程类公告ZcyAnnouncement20: 框架协议征集公告ZcyAnnouncement21: 框架协议入围结果公告ZcyAnnouncement23: 框架协议成交结果汇总公告61-266648: 采购意向公开
架构设计
gx_gp_monitor/
├── config/ # 配置管理
├── core/ # 核心模块
│ ├── models.py # 数据模型
│ ├── config_manager.py # 配置管理
│ ├── database.py # 数据库操作
│ ├── logger.py # 日志管理
│ └── reliability.py # 高可用性
├── crawler/ # 爬虫模块
│ ├── spider.py # 爬虫核心
│ └── parsers.py # 数据解析
├── filters/ # 筛选模块
├── storage/ # 存储模块
│ ├── postgresql.py # PostgreSQL存储
│ └── md_generator.py # Markdown生成
├── notification/ # 通知模块
├── scheduler/ # 调度模块
└── main.py # 主程序入口
日志和监控
日志文件
- 默认日志文件:
logs/gx_gp_monitor.log - 日志轮转:10MB大小限制,保留5个备份文件
- 日志级别:DEBUG、INFO、WARNING、ERROR、CRITICAL
监控指标
- 爬取统计:成功/失败次数、响应时间
- 数据统计:公告数量、新增数量、去重统计
- 系统状态:内存使用、磁盘空间、健康检查
故障排除
常见问题
-
数据库连接失败
- 检查PostgreSQL服务是否运行
- 验证数据库连接配置
- 确认用户权限
-
爬虫请求失败
- 检查网络连接
- 验证目标网站是否可访问
- 调整请求间隔和重试策略
-
企业微信通知失败
- 检查企业微信配置
- 验证应用ID和密钥
- 确认网络能访问企业微信API
-
权限问题
- 确保日志目录和输出文件目录有写入权限
- 检查数据库用户权限
调试模式
启用调试模式获取更详细的日志:
debug: true
log_level: DEBUG
许可证
本项目采用 MIT 许可证。
贡献
欢迎提交Issue和Pull Request来改进这个项目。
版本历史
- v1.0.0 (2024-01-XX)
- 初始版本发布
- 支持10+种公告类型爬取
- 实现智能筛选和去重
- PostgreSQL数据存储
- 企业微信通知
- Markdown文件输出
- 定时任务调度