# 广西政府采购网公告监控系统 广西政府采购网公告爬取和监控的智能系统,支持多种公告类型的自动爬取、智能筛选、数据存储和通知推送。 ## 功能特性 ### 🕷️ 智能爬虫监控 - 自动爬取广西政府采购网(zfcg.gxzf.gov.cn)的各类采购公告 - 支持10+种公告类型:采购公告、结果公告、合同公告、更正公告、招标文件预公示、单一来源公示、电子卖场公示、履约验收公示、工程类公告、框架协议征集公告等 - 智能反爬虫机制:随机User-Agent、代理轮换、请求延迟控制 ### 🎯 多维度智能筛选 - **关键词过滤**:支持多关键词精确匹配和模糊匹配 - **日期范围筛选**:支持开始日期和结束日期过滤 - **自动去重**:基于内容哈希的智能去重机制 - **来源筛选**:按公告类型进行筛选 ### 💾 数据持久化存储 - **PostgreSQL数据库**:高效的数据存储和查询 - **自动清理**:默认90天数据保留,可配置 - **性能优化**:连接池、索引优化、批量操作 ### 🔔 高可用性保障 - **重试机制**:指数退避重试策略 - **超时控制**:连接超时和读取超时设置 - **幂等操作**:防止重复处理 - **异常处理**:完善的异常捕获和恢复 - **结构化日志**:详细的运行日志记录 ### 📱 通知系统 - **企业微信通知**:支持文本和Markdown格式消息 - **实时推送**:新公告发现即时通知 - **系统告警**:异常情况自动告警 ### 📊 Markdown输出 - **自动生成**:将公告输出为Markdown格式文件(onu.md) - **结构化展示**:按来源分组、时间排序 - **今日高亮**:突出显示今日发布的公告 ## 安装和使用 ### 环境要求 - Python 3.8+ - PostgreSQL 12+ ### 安装步骤 1. **克隆项目** ```bash cd /path/to/your/workspace # 项目已创建在 gx_gp_monitor 目录下 ``` 2. **创建虚拟环境** ```bash python3 -m venv venv source venv/bin/activate # Linux/Mac # 或 venv\Scripts\activate # Windows ``` 3. **安装依赖** ```bash pip install -r requirements.txt ``` 4. **配置数据库** ```bash # 创建PostgreSQL数据库 createdb gx-gp-notify # 修改配置文件 config/config.yaml 中的数据库连接信息 ``` 5. **修改配置** ```bash # 编辑 config/config.yaml 文件 # 设置数据库连接、企业微信配置、关键词等 ``` ### 使用方法 #### 命令行使用 ```bash # 查看帮助 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 ``` #### 编程接口使用 ```python 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` ```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 ### 监控指标 - 爬取统计:成功/失败次数、响应时间 - 数据统计:公告数量、新增数量、去重统计 - 系统状态:内存使用、磁盘空间、健康检查 ## 故障排除 ### 常见问题 1. **数据库连接失败** - 检查PostgreSQL服务是否运行 - 验证数据库连接配置 - 确认用户权限 2. **爬虫请求失败** - 检查网络连接 - 验证目标网站是否可访问 - 调整请求间隔和重试策略 3. **企业微信通知失败** - 检查企业微信配置 - 验证应用ID和密钥 - 确认网络能访问企业微信API 4. **权限问题** - 确保日志目录和输出文件目录有写入权限 - 检查数据库用户权限 ### 调试模式 启用调试模式获取更详细的日志: ```yaml debug: true log_level: DEBUG ``` ## 许可证 本项目采用 MIT 许可证。 ## 贡献 欢迎提交Issue和Pull Request来改进这个项目。 ## 版本历史 - **v1.0.0** (2024-01-XX) - 初始版本发布 - 支持10+种公告类型爬取 - 实现智能筛选和去重 - PostgreSQL数据存储 - 企业微信通知 - Markdown文件输出 - 定时任务调度