136941d84e8bf1c8e119a5820801dcb4a6ab1f5c
GX-GP-Notify
广西政府采购公告监控系统,自动爬取广西政府采购网和大化县政府网的公告,通过企业微信推送关键词匹配的公告。
功能
- 定时爬取:按 cron 规则自动爬取,工作日 8:00-21:00 每小时执行
- 关键词过滤:广西政采网公告按关键词过滤(默认:
大化),大化县政府网全量爬取 - 企微推送:新公告实时推送到企业微信应用
- 去重:基于内容 hash 去重,避免重复入库和推送
- 节假日感知:非工作日自动跳过爬取
数据来源
| 来源 | 说明 | 过滤 |
|---|---|---|
| 广西政府采购网 | 采购公告、结果公告、合同公告等 13 个分类 | 关键词过滤 |
| 大化县政府网 | 大化县门户网站采购公告 | 全量爬取 |
企微菜单功能
| 菜单 | 说明 |
|---|---|
| 最新公告 | 触发一次爬取,推送两个来源合并后最新 6 条(时间升序) |
| 手动爬取 | 立即触发全量爬取并推送新公告 |
| 今日统计 | 查看今日新增和累计公告数 |
| 系统状态 | 查看待推送数量、定时任务状态 |
| 监控配置 | 查看关键词、爬取页数、定时规则 |
| 工作日状态 | 查看今天是否为工作日 |
| 同步节假日 | 同步当年节假日数据 |
| 暂停/恢复任务 | 控制定时爬取任务 |
快速部署
1. 配置环境变量
复制 .env.example 为 .env 并填写:
# 数据库
DATABASE_URL=postgresql+asyncpg://user:password@host:5432/gx-gp-notify
# 企业微信
WECHAT_CORP_ID=your_corp_id
WECHAT_AGENT_ID=your_agent_id
WECHAT_SECRET=your_secret
WECHAT_TOKEN=your_token
WECHAT_ENCODING_AES_KEY=your_aes_key
# 爬虫
CRAWLER_KEYWORDS=["大化"]
CRAWLER_MAX_PAGES=10
SCHEDULER_CRON=0 8-21 * * 1-5
2. 启动服务
docker compose -f docker/docker-compose.yml up -d
3. 数据库迁移
docker compose -f docker/docker-compose.yml exec app alembic upgrade head
4. 配置企微回调
在企业微信后台将回调 URL 设置为:
http://your-server:18001/wechat/callback
开发
# 安装依赖
pip install -e ".[dev]"
# 运行测试
pytest
# 代码检查
ruff check .
技术栈
- 框架:FastAPI + uvicorn
- 数据库:PostgreSQL + SQLAlchemy (async) + Alembic
- 爬虫:httpx + BeautifulSoup4
- 定时任务:APScheduler
- 推送:企业微信应用消息 API
- 部署:Docker
项目结构
app/
├── api/ # HTTP 接口(公告查询、手动触发爬取等)
├── crawler/ # 爬虫(广西政采网、大化县政府网)
├── models/ # 数据库模型
├── scheduler/ # 定时任务
├── services/ # 业务逻辑(pipeline、过滤、通知)
└── wechat/ # 企业微信(消息处理、推送客户端)
Description
Languages
Python
99.2%
Mako
0.5%
Dockerfile
0.3%