# 公共资源交易中心爬虫 + AI 处理系统 自动采集浙江省/台州市公共资源交易中心的招标信息,经 DeepSeek AI 提取结构化字段后,上传至简道云表单。 ``` 爬虫采集 → 字段映射 → 内容获取(页面+附件) → DeepSeek AI 提取 → 简道云上传 ``` --- ## 支持的管道 | 站点 | 公告类型 | AI 提取字段 | 简道云表单 | |------|----------|------------|------------| | 浙江省 | 招标文件公示 | 类型、地区、投标截止日、最高投标限价、最高限价、资质要求、业绩要求、评标办法、评分说明与资信评分标准、有无答辩、招标人、项目概况、造价付款方式 | 浙江招标文件公示 | | 浙江省 | 招标公告 | 批准文号、投标截止日 | 浙江招标公告 | | 浙江省 | 澄清修改 | 批准文号 | 浙江澄清修改 | | 台州市 | 招标计划公示 | 预估金额、类型、批准文号 | 台州招标计划 | | 台州市 | 招标公告 | 批准文号、投标截止日 | —(暂无表单) | --- ## 快速开始 ### 安装依赖 ```bash pip install requests beautifulsoup4 pdfplumber python-docx ``` ### 单次运行 ```bash # 仅爬取 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` | ### 定时任务 ```bash # 直接运行(采集昨天全部任务) 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 和字段映射 ### 添加新管道 1. 在 `REGION_CONFIGS` 中添加 `"site:notice_type"` 条目 2. 如需新的 AI 字段,在 `DEEPSEEK_PROMPTS` 中添加提示词 3. 如需上传,在 `JDY_CONFIG["forms"]` 中添加表单配置 4. 可选:在 `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 分钟 |