| 版本 | 日期 | 变更说明 |
|------|------|----------|
| V1 | 2026-05-03 | 初版,使用 ecsg.com.cn 接口 |
| V2 | 2026-05-03 | 切换为 www.bidding.csg.cn 官方平台;增加详情页有效期验证 |
| V3 | 2026-05-03 | 修复时间格式兼容性(允许数字间空格);修复分页停止条件 |
| V4 | 2026-05-03 | 新增假阳性排除阶段(约30种非管理咨询模式);完善Excel双Sheet结构 |
| V5 | 2026-05-04 | 移除假阳性硬排除,改用详情页正文内容分析做二次语义确认 |
| V6 | 2026-05-04 | 修复双层去重大Bug:单次执行 valid_seen_urls + 跨次执行Excel第9列明文URL去重 |
| V7 | 2026-05-06 | 追加优化:跨运行Excel去重(标题+招标单位)、HTML标签拆分兼容(获取开始 时间)、数字内空格规范化、正则回退年份过滤(≥2020)、询比采购有效期兜底 |
| V7.1 | 2026-05-06 | 追加排除词:可视化系统、系统升级改造、系统建设项目、热水系统、光伏、空气能、电气改造等;招标单位假阳性过滤词;统计表列宽修复(12列) |
| V7.2 | 2026-05-07 | 修复列表页标题截断误杀Bug:parse_list_page 改用负向黑名单过滤替代正向白名单,解决南方电网列表页截断标题(如"询比采购公告"→"公...")导致正确公告被丢弃的问题;Excel有效公告Sheet的J列(公告URL列)宽改为50,取消隐藏,避免行高异常 |
本技能从南方电网供应链统一平台(bidding.csg.cn)全自动抓取企业管理咨询类招标公告,无需任何 API Key。
| 能力 | 说明 |
|------|------|
| 双频道抓取 | 同时抓取 /zbgg/(招标公告)+ /fzbgg/(非招标公告/询比采购) |
| 三阶段过滤 | 粗筛关键词 → 排除非管理咨询类型 → 标题+正文语义双重确认 |
| 有效期验证 | 点进详情页检查「招标文件获取截止时间」,已过期自动排除 |
| 询比采购兜底 | 无截止时间但开始时间已过且≤7天,视为潜在有效公告 |
| 三层去重 | URL精确去重 + 标题+招标单位组合去重 + Excel历史数据跨运行去重 |
| Excel双Sheet | Sheet1「统计汇总」(10项统计+执行日期+备注) + Sheet2「有效公告明细」(含可点击详情链接) |
用户提出以下任一需求时加载此技能:
pip install requests openpyxl
python --version # 要求 3.9+
cd <目标工作目录>
python scripts/monitor.py
首次执行会自动创建 南网管理咨询招标公告.xlsx。
使用 WorkBuddy 自动化功能,建议每天 17:30 自动运行:
任务名称:南网管理咨询招标日报
执行命令:cd <目标工作目录> && python scripts/monitor.py
南网招标监测/
├── SKILL.md # 本文件
├── scripts/
│ └── monitor.py # 核心监测脚本(唯一必需文件)
└── references/
├── filter-guide.md # 过滤规则详细说明
└── config-reference.md # CONFIG 字典完整参数参考
问题背景:南方电网列表页将公告标题截断为约60字+'...',例如"询比采购公告"可能被截断为"公..."。
原逻辑问题:正向过滤要求标题含"招标/采购/公告",截断标题三者均不满足,导致正确公告在列表解析阶段就被丢弃。
V7.2 修复:改为负向黑名单过滤:
# 排除明确的非采购类公告
_EXCLUDE_TYPES = ["中标公示", "中标结果", "成交公示", "成交结果",
"废标公告", "终止公告", "流标公告", "异常公告", "澄清公告"]
if any(ex in title for ex in _EXCLUDE_TYPES):
continue
# 保留基本门槛:至少含一个与采购相关的汉字
if not any(c in title for c in ["标", "购", "公", "服", "项"]):
continue
效果:截断标题(含"公...")→ 含"公"字 → 通过 → 进入关键词过滤
排除条件(标题含任一词直接排除):
| 类别 | 排除词 |
|------|--------|
| 设备类 | 设备、电缆、母线、变压器、开关柜、绝缘子 |
| 工程类 | 土建、施工、维修、维保、勘察设计、监理、造价 |
| 物资类 | 物资、材料、器材、配件、零件 |
| 技术系统类 | 可视化系统、系统升级改造、系统建设项目、V1.0、V2.0、系统开发、软件开发、平台开发、信息化建设 |
| 改造类 | 热水系统、光伏改造、空气能、热水系统改造、光伏空气能、光伏项目、储能项目、充电桩、换电站、电气改造、机电改造、设施改造 |
通过条件:标题必须含至少一个初筛关键词(共32个管理咨询相关词)
排除以下"咨询"类型(技术/工程/专业服务而非管理咨询):
技术咨询、软件咨询、系统咨询、平台咨询、开发咨询、信息化咨询、数字化咨询
工程咨询、设计咨询、造价咨询、勘察咨询、监理咨询、检测咨询、测试咨询、评估咨询
法律咨询、税务咨询、财务咨询、会计咨询
必须命中以下任一确认词组才通过:
| 类别 | 确认关键词 |
|------|-----------|
| 明确管理咨询 | 管理咨询、企业管理咨询、战略咨询、经营咨询、人力资源咨询、组织变革咨询、绩效咨询、流程优化咨询、风控咨询、合规咨询、治理咨询、文化咨询、品牌咨询、营销咨询、变革咨询、转型咨询、咨询服务、顾问服务 |
| 人才/人力服务 | 人才测评、人才发展、领导力、综合素质测评 |
| 组织发展 | 组织诊断、组织效能、组织架构优化 |
| 研究/调研类 | 课题研究、专题研究、专题报告、调研报告、调度规划专题、规划专题、管理专题、研究咨询、决策咨询、政策研究、管理创新、创新研究、专项研究、研究项目、创新项目、管理创新项目、虚拟电厂 |
| 战略/规划类 | 战略规划(排除电网/电力/输电/变电/基建/前期)、管理提升、对标管理、国企改革、三项制度 |
| 薪酬/绩效类 | 薪酬体系、绩效考核体系、绩效管理体系 |
| 文化品牌类 | 企业文化建设、品牌建设、企业文化 |
| 风控合规类 | 风控体系、合规体系、治理机制、内部控制、内控体系 |
正文兜底:标题未确认时,自动提取详情页正文文本再次匹配;若正文含"咨询"+任一管理类词汇(管理/战略/组织/人力/绩效)也视为通过。
部分页面HTML将标签拆分为 ,清理后变成 获取开始 ... 获取开始 时间:。脚本已增加标签变体 ["获取开始时间", "获取开始 时间", ...],全覆盖。
某些页面HTML将数字格式化(如月份 04 → 0 4),正则 \d{1,2}\s*月 贪婪回溯时会错误分配空格。解决方案:清理后统一将 (\d)\s+(\d) → \1\2,使 0 4 → 04。
当标签提取失败时,回退到全页面时间搜索。必须过滤正文中的历史参考日期(合同签订日期、文献日期等),过滤条件:t.year >= 2020。
有效公告Sheet共10列(J列为公告URL列),V7.2将J列宽改为50(与详情链接列H同宽),不再隐藏,彻底解决行高异常问题。
| 项目 | 值 |
|------|-----|
| 平台名称 | 南方电网供应链统一服务平台 |
| 官网地址 | https://www.bidding.csg.cn |
| 招标公告列表 | https://www.bidding.csg.cn/zbgg/index.jhtml |
| 非招标公告列表 | https://www.bidding.csg.cn/fzbgg/index.jhtml |
| 详情页格式 | /zbgg/{ID}.jhtml 或 /fzbgg/{ID}.jhtml |
| 认证方式 | 无需登录、无需 API Key |
| 访问频率 | 内置 0.5~1 秒延迟,遵守 robots.txt |
PermissionError 报错
原因:Excel 文件被 Excel/WPS 占用
解决:关闭文件后重新运行;脚本会自动尝试写入 _备用.xlsx
可能原因:近N天确实没有符合条件的招标;关键词过于严格;网站页面结构变更(检查日志 [警告])
编辑 scripts/monitor.py 中 CONFIG["search_keywords"] 列表,详见 references/filter-guide.md
修改 CONFIG["lookback_days"] 默认值(当前7天)
V7.2 已修复此问题。之前的版本中,被截断的标题(如"询比采购公告"→"公...")会被列表页过滤条件误杀,V7.2改用黑名单过滤,不再依赖完整的"招标/采购/公告"词,截断标题现在能正常通过。
文件名:南网管理咨询招标公告.xlsx
| 列名 | 说明 |
|------|------|
| 执行日期 | 本次运行的日期 |
| 总共抓取到公告数 | 列表页解析到的总条数 |
| 其中: 招标/采购公告数 | 含"招标"或"采购"标题的数量 |
| 通过粗筛(含搜索关键词) | 命中初筛关键词的数量 |
| 通过精筛(企业管理咨询类确认) | 通过三阶段过滤的数量 |
| 成功进入详情页检查 | 成功获取详情页HTML的数量 |
| 详情页获取失败 | 详情页HTTP请求失败数量 |
| 招标文件获取截止时间提取失败 | 时间正则匹配失败数量 |
| 正文内容分析排除 | 详情页正文判断为非管理咨询类的数量 |
| 已过期(招标文件获取截止时间已过) | 截止时间 <= 当前时间的数量 |
| 有效(未过期,已写入本表) | 最终有效并写入Sheet2的数量 |
| 备注 | 如"回溯7天" |
| 列名 | 说明 |
|------|------|
| 抓取日期 | 本次写入日期 |
| 公告标题 | 完整招标公告标题 |
| 招标单位 | 招标人名称(从详情页提取) |
| 发布日期 | 公告发布日期 |
| 文件获取开始时间 | 可下载/获取的开始时间 |
| 文件获取截止时间 | 有效性核心判断依据 |
| 投标递交截止时间 | 投标截止时间 |
| 详情链接 | 点击可跳转至官网详情页 |
| 来源 | 招标公告/非招标公告 |
| 公告URL | 用于跨次执行去重 |
[2026-05-07 09:44:11] ============================================================
[2026-05-07 09:44:11] [启动] 南方电网·管理咨询招标监测任务启动
[2026-05-07 09:44:11] 数据来源 :www.bidding.csg.cn/zbgg/(招标公告)
[2026-05-07 09:44:11] + www.bidding.csg.cn/fzbgg/(非招标公告)
[2026-05-07 09:44:11] 回溯范围 :最近 7 天发布的公告
[2026-05-07 09:44:11] 有效性规则:文件获取截止时间 > 当前时间
[2026-05-07 09:44:11] 关键词数 :32 个初筛 + 精筛
[2026-05-07 09:44:11] ============================================================
[2026-05-07 09:44:10] [统计] 本次监测完整统计:
[2026-05-07 09:44:10] ① 总共抓取到公告数 :89 条
[2026-05-07 09:44:10] ② 招标/采购公告数 :54 条
[2026-05-07 09:44:10] ③ 通过粗筛(含关键词):7 条
[2026-05-07 09:44:10] ④ 通过精筛(企业管理咨询类):7 条
[2026-05-07 09:44:10] ⑨ 有效(未过期) :7 条
[2026-05-07 09:44:11] [完成] 完成!新增 2 条,跳过重复 5 条
首次使用前,在命令行执行一次:
pip install requests openpyxl
在 WorkBuddy 对话中直接说:
本技能通过 WorkBuddy 平台触发,不需要用户手动执行脚本。只需在工作对话中描述需求,AI 会自动判断并加载本技能。
推荐开启 WorkBuddy 定时任务,每天固定时间自动运行,无需手动操作:
执行频率:每天 17:30
命令:cd <工作目录> && python scripts/monitor.py
共 1 个版本