新聞爬蟲工程:把新聞採集做成可上線數據管道

前言

新聞站點的列表往往藏在接口裏,詳情頁又可能是 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。

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

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

小夜