新闻爬虫工程:把新闻采集做成可上线数据管道

前言

新闻站点的列表往往藏在接口里,详情页又可能是 CSR 或带签名的请求。很多人先写详情解析,翻页和增量策略后面再补,结果内存里堆完全部历史页、重复入库、反爬触发后没有可观测信号。下面介绍 SkillHub 上的「新闻爬虫工程」Skill:它用一套固定的工程流程,指导 Agent 从侦察数据源、设计表结构,到增量回填、监控报警和验收清单,把单次脚本改成长期运行的采集管道。

这是什么

「新闻爬虫工程」(坐标 @user_756344a1/news-crawler-engineering,版本 1.0.2)是社区来源(community)的 Agent Skill,分类为 data-analysis,发布者为 user_756344a1。Skill 不要求 API Key(requires_api_key=false)。

官方简介说明其用途:设计、实现、审查并加固新闻/资讯爬虫,使其作为生产级数据管道运行;适用于构建、分析、调试或重构新闻站爬虫、市场资讯爬虫、舆情采集、列表/详情抽取、分页、增量回填、反爬分析或爬虫库表设计等任务。

核心功能

Skill 内容基于通用 SKILL.md 格式,把「一个站点 = 采集系统中的一个 source」作为前提,主要覆盖以下已写明的能力。

侦察与采集模式

  1. 先侦察:定位真实列表 API、分页参数、栏目 ID、详情 URL 规则;确认列表是否已带标题、时间、来源、图片、摘要、正文;在页面与 JS 中查找 ajax、fetch、page、columnId 等线索;涉及 JS/签名/cookie 时建议使用浏览器 Network,并提到可配合 user-js-reverse MCP。
  2. 再选模式:API 含全文则以 API 为主;仅列表则 API 分页 + 详情页补正文;纯静态 HTML 则解析分页列表与详情;强 CSR/反爬则先逆向 API/签名再重放。

数据模型与字段规范

  • 主表参考 get_market_news_info,正文与大字段放在 get_market_news_content(content、content_html、images、raw_data)。
  • 业务唯一键:UNIQUE KEY uk_source_unique_id (source, source_unique_id);news_id 仅作关联,不作为内容表唯一键。
  • 字段规则包括:media_name 为采集站点名;original_source 为文章展示的真实来源;summary 不得填站点固定描述;author 不得用 editor 冒充;stock_list 为纯字符串数组如 ["AAPL","INTC"];crawl_error 只存短错误信息;站点扩展字段进 extra_data。
  • 正文成功判定:有文本即成功;无文本但有图片也算成功;无文本且无图片则 crawl_status = 4。

正文抽取优先级

  1. API 分段/块结构(段落边界最准)。
  2. HTML 详情页已知容器选择器。
  3. 全页 get_text() 按行拆分(最后手段)。

段落用 \n\n 分隔;块结构里图文交错时,在 content 中用 [图片:caption] 占位,images 按出现顺序存 URL。说明中强调:Referer 或详情 URL 含中文等非 ASCII 时需 URL 编码(如 urllib.parse.quote)。

增量、回填与入库

标准策略:按 source + column_name 查 MAX(publish_time);无历史则阈值 now - backfill_days(默认 90 天);有历史则 max_publish_time - overlap_hours(默认 6 小时);按栏目分页遍历;每页批量去重、拉详情、立刻 upsert,整页早于阈值则停止翻页。禁止把所有栏目历史页攒在内存里最后一次性写入。

存储要求:主表与内容表同一事务;使用 INSERT ... ON DUPLICATE KEY UPDATE;失败记录也要落库便于重试。crawl_status 取值 1–5 分别表示成功、详情请求失败、页面结构异常、正文为空、解析异常。

翻页停止与稳定性

区分「本页文章全部早于阈值」(should_stop=True,正常结束)与「API 失败或空列表」(should_stop=False,累加 consecutive_empty)。连续空页(建议 3 页)应中断并告警。API 失败应返回 ([], False) 而非误设 should_stop=True。

监控报警(Skill 要求内置)

三层通知:未捕获异常;total_success == 0;详情失败率超过 50%。Skill 内给出 main() 与飞书/通知的示例结构。

代理与内存

海外站点可能需直连、对默认代理显式 proxies={};实现前先验证是否要代理、是否有 TLS 指纹检测。task 字典只保留入库所需字段,逐页处理避免内存堆积。

代码与验收

爬虫脚本文件头需含 @Desc 与 来源url: 行。交付前需跑通列表→详情→解析,并核对表结构、样例双表写入、JSON 字段、编码、summary/original_source、重跑跳过已成功行、失败可重试、报警与代理行为等检查项。

安装与启用

SkillHub 页面给出的安装提示为:让 AI 根据 SkillHub 安装文档 安装 @user_756344a1/news-crawler-engineering。

已安装 SkillHub CLI 时,安装须用 --dir 指向当前 Agent 的 skills 目录,否则默认落在 ./skills/ 且可能不被识别:

command -v skillhub && skillhub --version

skillhub install @user_756344a1/news-crawler-engineering --dir <skills 目录>

常见路径(来自官方安装文档):

  • Cursor:~/.cursor/skills/
  • Claude Code:~/.claude/skills/
  • Codex:~/.codex/skills/ 或项目下 .agents/skills/

未安装 CLI 时,可使用官方一键脚本(完整安装含 CLI 与默认 Skill):

curl -fsSL https://skillhub-1388575217.cos.ap-guangzhou.myqcloud.com/install/install.sh | bash

安装后需在对应客户端中让 Agent 加载 skills 目录中的 Skill(部分环境需重启或重新打开会话)。Codex CLI、Claude Code 与 Cursor 的差异主要体现在 skills 目录位置,安装命令本身一致。

典型用法

Skill 通过 description 触发:当对话涉及新闻爬虫工程化任务时,Agent 应按 Skill 中的 Workflow 执行。可复现的启用方式示例:

  1. 安装 Skill 到当前环境的 skills 目录(见上一节命令)。
  2. 在 Cursor 等客户端中提出具体任务,例如:「为某财经快讯栏目做增量爬虫,列表是 POST JSON 分页,需要按 Skill 里的表结构设计主表和内容表,并实现三层报警。」
  3. Agent 应先完成侦察清单(列表 API、分页、字段是否含正文),再输出类结构爬虫(栏目配置、阈值、按页去重入库、详情解析、事务 upsert),并按 Verification Checklist 要求端到端跑通脚本。

Skill 内嵌的 Python 片段可作为实现参考,例如翻页循环中区分 raw_tasks 与去重后 tasks、以及 main() 中的零入库与失败率判断逻辑,均可在安装后的 SKILL.md 中直接查看。

适用场景与注意

适合谁: 需要把新闻/资讯/市场快讯采集做成可维护管道的数据工程师、后端或爬虫开发者;需要统一库表、增量策略、字段语义和评审清单的团队。

限制与注意:

  • Skill 是工程规范与流程指引,不替代你对目标站点的合规审查与 robots/服务条款约束;反爬与签名逆向仍须结合站点策略与 user-js-reverse 等工具。
  • 文档中的表名(如 get_market_news_info)来自 Skill 约定,落地时需与你们现有库表对齐或做映射。
  • SkillHub 统计(截至资料抓取):评分 100000,下载 3676 次;以 SkillHub 技能页 为准。

结尾

「新闻爬虫工程」把侦察、模式选择、双表模型、增量回填、翻页语义、内置监控和验收清单写进同一套 Skill,适合在 Agent 辅助开发时减少「能跑但不稳」的爬虫交付。官方入口:SkillHub - 新闻爬虫工程,API 坐标页:https://api.skillhub.cn/user_756344a1/news-crawler-engineering。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜