6.7 KiB
6.7 KiB
公共资源交易中心爬虫 + AI 处理系统
自动采集浙江省/台州市公共资源交易中心的招标信息,经 DeepSeek AI 提取结构化字段后,上传至简道云表单。
爬虫采集 → 字段映射 → 内容获取(页面+附件) → DeepSeek AI 提取 → 简道云上传
支持的管道
| 站点 | 公告类型 | AI 提取字段 | 简道云表单 |
|---|---|---|---|
| 浙江省 | 招标文件公示 | 类型、地区、投标截止日、最高投标限价、最高限价、资质要求、业绩要求、评标办法、评分说明与资信评分标准、有无答辩、招标人、项目概况、造价付款方式 | 浙江招标文件公示 |
| 浙江省 | 招标公告 | 批准文号、投标截止日 | 浙江招标公告 |
| 浙江省 | 澄清修改 | 批准文号 | 浙江澄清修改 |
| 台州市 | 招标计划公示 | 预估金额、类型、批准文号 | 台州招标计划 |
| 台州市 | 招标公告 | 批准文号、投标截止日 | —(暂无表单) |
快速开始
安装依赖
pip install requests beautifulsoup4 pdfplumber python-docx
单次运行
# 仅爬取
python main.py -s zhejiang -c 工程建设 -t 招标文件公示 -p 5 -d yesterday
# 爬取 + AI 处理
python main.py -s zhejiang -c 工程建设 -t 招标文件公示 -p 5 -d yesterday -P
# 爬取 + AI 处理 + 上传简道云
python main.py -s zhejiang -c 工程建设 -t 招标文件公示 -p 5 -d yesterday -P -U
# 台州招标计划
python main.py -s taizhou -c 工程建设 -t 招标计划公示 -p 3 -d yesterday -P -U
# 全部站点
python main.py -s all -c 工程建设 -t 招标公告 -p 1 -d yesterday -P
参数说明
| 参数 | 说明 | 示例 |
|---|---|---|
-s |
站点 | zhejiang / taizhou / all |
-p |
爬取页数 | 5(默认 5) |
-c |
交易领域 | 工程建设 / 政府采购 |
-t |
公告类型 | 招标文件公示 / 招标公告 / 澄清修改 / 招标计划公示 |
-d |
日期过滤 | yesterday / 2026-02-10 |
-a |
下载附件 | 开关 |
-P |
启用 AI 处理 | 开关,需配合 -t |
-U |
上传简道云 | 开关,需配合 -P |
定时任务
# 直接运行(采集昨天全部任务)
python scheduler.py
# Windows 计划任务(每天 08:00)
schtasks /create /tn "ZTB_Spider" /tr "python C:\path\to\ztb\scheduler.py" /sc daily /st 08:00
scheduler.py 中的 DAILY_TASKS 定义每天自动执行的任务,当前配置:
- 浙江 招标文件公示(20 页 + AI + 上传)
- 台州 招标计划公示(7 页 + AI + 上传)
项目结构
ztb/
├── main.py # 命令行入口
├── scheduler.py # 定时任务入口
├── config.py # 全局配置(站点、AI、简道云)
├── spiders/
│ ├── base.py # 爬虫基类(限速、重试、熔断)
│ ├── zhejiang.py # 浙江省爬虫
│ └── taizhou.py # 台州市爬虫
├── processors/
│ ├── pipeline.py # 处理管道(串联全流程)
│ ├── content_fetcher.py # 页面 + 附件内容获取
│ ├── deepseek.py # DeepSeek AI 字段提取
│ └── jiandaoyun.py # 简道云上传
├── utils/
│ └── attachment.py # 附件下载工具
├── data/ # 输出(CSV + JSON)
├── logs/ # 日志
└── temp_files/ # 临时附件(自动清理)
数据流
1. 爬虫输出
浙江省:标题、发布日期、地区、公告类型、链接、来源 + 项目名称、项目代码、招标人、招标代理、联系电话、招标估算金额
台州市:标题、发布日期、地区、链接、来源 + 项目名称、招标人、项目批准文号、项目类型、计划招标时间、预估合同金额(万元)
2. 字段映射(pipeline._map_fields)
标题 → 名称
发布日期 → 发布时间 + 项目发布时间
链接 → 招标文件链接 / 公告链接 / 数据源链接 / 澄清文件链接
公告类型 → 招标阶段
项目批准文号 → 批准文号
项目类型 → 类型
预估合同金额 → 预估金额(自动补"万元")
计划招标时间 → 招标时间
3. AI 提取 → 合并
- AI 值有效(非"文档未提及")→ 覆盖原值
- AI 返回"文档未提及" → 保留爬虫原值
4. 输出文件
- CSV:
data/浙江省公共资源交易中心_20260211_092500.csv - JSON:
data/浙江招标文件公示_AI处理_20260211_093446.json
安全机制
爬虫层(BaseSpider)
| 机制 | 配置值 | 说明 |
|---|---|---|
| 请求速率 | 10 次/分钟 | 超出自动等待 |
| 列表页延迟 | 3–6 秒 | 随机间隔 |
| 详情页延迟 | 2–5 秒 | 随机间隔 |
| 最大请求数 | 300 次/运行 | 超出停止 |
| 连续失败熔断 | 5 次 | 触发后停止 |
| 空响应检测 | ≤10 bytes | 反爬拦截后指数退避重试 |
| 优雅退出 | Ctrl+C | 保存已采集数据后退出 |
AI 处理层(ContentFetcher)
| 机制 | 配置值 | 说明 |
|---|---|---|
| 请求速率 | 12 次/分钟 | 独立限速 |
| 请求延迟 | 1.5–3 秒 | 每次请求前随机等待 |
| 附件大小限制 | 50 MB | 超出跳过 |
| 内容长度限制 | 120,000 字符 | 超长内容智能截取关键段落 |
| API 失败回退 | 本地正则 | DeepSeek 不可用时降级提取 |
| 临时文件清理 | 自动 | 解析后立即删除 |
配置说明
所有配置集中在 config.py:
SPIDER_CONFIG— 爬虫延迟、重试、限速DEEPSEEK_API_KEY— DeepSeek API 密钥PROCESSING_CONFIG— AI 处理超时、内容长度限制REGION_CONFIGS— 每个管道的 AI 字段定义DEEPSEEK_PROMPTS— 15 个字段的提示词模板JDY_CONFIG— 简道云表单 ID 和字段映射
添加新管道
- 在
REGION_CONFIGS中添加"site:notice_type"条目 - 如需新的 AI 字段,在
DEEPSEEK_PROMPTS中添加提示词 - 如需上传,在
JDY_CONFIG["forms"]中添加表单配置 - 可选:在
scheduler.py的DAILY_TASKS中添加定时任务
测试记录(2026-02-11)
5 个管道全部通过,71 条记录 AI 处理成功率 100%:
| 管道 | 爬取 | AI 成功 | 耗时 |
|---|---|---|---|
| 台州 招标计划公示 | 1 条 | 1/1 | ~12 秒 |
| 浙江 招标文件公示 | 20 条 | 20/20 | ~10 分钟 |
| 浙江 招标公告 | 20 条 | 20/20 | ~3 分钟 |
| 浙江 澄清修改 | 20 条 | 20/20 | ~2 分钟 |
| 台州 招标公告 | 10 条 | 10/10 | ~2 分钟 |