Files
GX-gp-notify/gx_gp_monitor/README.md
T
2026-01-07 17:37:09 +08:00

282 lines
7.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 广西政府采购网公告监控系统
广西政府采购网公告爬取和监控的智能系统,支持多种公告类型的自动爬取、智能筛选、数据存储和通知推送。
## 功能特性
### 🕷️ 智能爬虫监控
- 自动爬取广西政府采购网(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文件输出
- 定时任务调度