Community寫作與編輯github.com

JJ-Yvain-Skills/wechat-article-fetch

公众号文章抓取與發現:零依賴、無需登入,UA 是唯一準入門檻(SKILL + 3 個 Python 腳本,MIT 授權)

wechat-article-fetch 是什麼?

這是一個專為 AI 助理(如 Claude Code、Cursor、Codex 等)設計的技能,用於從微信公眾號抓取文章內容與進行文章發現。它提供零依賴、無需登入的解決方案,核心條件僅是使用真實瀏覽器 User-Agent(UA)。該技能包含三個 Python 腳本:`wechat_fetch.py` 用於依據文章 URL 直接抓取正文(服務端渲染,無需 JS/Cookie)、`wechat_discover.py` 用於透過搜狗搜尋取得近期文章的元資料、以及 `batch_fetch.py` 支援批量抓取(含限速、斷點續傳與驗證碼停機)。技能內建詳細的通道狀態表與失敗分診表,明確標示哪些通道穩定(如公開文章頁裸抓)、哪些已失效或受限(如後台跨號搜索已死),並嚴格限制不繞過驗證碼、不碰登入態、不規模化採集,確保合法合規使用。尤其適合個人研究、小量取用場景。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add JJ-Yvain-Skills/wechat-article-fetch

Installed? Explore more 寫作與編輯 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

wechat-article-fetch · 公眾號文章抓取

核心事實(已實測,直接執行)

  • UA 是唯一準入門檻:使用腳本內建瀏覽器 UA。不帶 UA / curl / python-requests / MicroMessenger → 全部 302
  • 正文極易取得:服務端渲染,位於 <div id="js_content">,裸 GET 即可,無需 JS/Cookie/登入
  • 圖片無防盜鏈:真實位址在 data-src
  • 發現層:原文不被搜尋引擎收錄;搜狗提供加密跳轉鏈,清潔態純 HTTP 可拆簽名直鏈(視窗≥1h,儘快抓);⚠️ 連續約 15~20 請求/30 分鐘觸發 IP 級驗證碼(需人工,瀏覽器無解)→ 低頻率串行,觸發即停

UA 範例(自行寫腳本時用):Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36

用法(腳本同目錄,零依賴,CLI+庫雙模式,錯誤結構化 WeChatError)

python wechat_fetch.py "<url>" [--format md|json|text] [--out FILE]   # 抓正文
python wechat_discover.py "關鍵詞" [--format table|json]              # 搜元資料(跳轉鏈拆法見通道狀態)
python batch_fetch.py urls.txt [--min-delay 3] [--max-delay 8] [--daily-limit 500]  # 批量:限速/斷點續傳/驗證碼停機

通道狀態(2026-08 實測,防止誤用死路)

通道狀態
公開文章頁裸抓✅ 長期穩定(本技能核心)
搜狗搜尋✅ 僅近期元資料(清潔態);跳轉鏈純 HTTP 拆簽名 URL(視窗≥1h,儘快抓);⚠️ 連續~15-20請求/30分鐘觸發IP驗證碼,需人工
合集(專輯)頁⚠️ 匿名可翻,僅合集內文章
公眾號主頁歷史列表❌ 匿名被攔「請在微信客戶端開啟連結」;getmsg 僅最近 ~10 篇
公眾號後台跨號搜尋❌ 已死(2026-07-30 微信關閉,行業工具全癱)

結論:抓取層穩定;發現層上限 = 搜狗近期 + 合集(⚠️ 動態頻控,低頻率);全量歷史無合規通道。

流程

  • 已有連結 → GET(瀏覽器 UA)→ 取 #js_content → 輸出。失敗按分診表,勿盲重試
  • 只有關鍵詞 → 搜狗拿元資料;要正文則純 HTTP 拆跳轉鏈 JS 拼串拿簽名 URL回抓取流程(失敗/觸發反爬再瀏覽器兜底;或找轉載鏡像,須告知使用者可能被刪改)。主頁歷史、後台搜尋不要嘗試(已死/被攔)

解析(僅自行寫正則時需要,直接用腳本可跳過)

錨點:var msg_title / nickname / ct + #js_content。⚠️ msg_title/nickname 有 .html(false)/htmlDecode() 套殼——正則只匹配等號後第一個引號串,否則全部抽空;圖片取 data-src 而非 src。

失敗分診(不要盲目重試)

現象原因動作
302UA 不合格換瀏覽器 UA
200 + 參數錯誤連結無效停,核對連結
302 → antispider搜狗側攔截(IP級驗證碼,2026-08-13實測需人工)停止,不繞;低頻率重試或等待恢復(瀏覽器同樣被攔)
302 → appmsgcaptcha連結異常/觸發驗證碼停止,不繞過
200 + 該頁面不存在UA 被判為爬蟲換瀏覽器 UA
200 + 請在微信客戶端開啟需登入的頁面該通道不可用,換搜狗/合集
200 + 已刪除/違規文章被處理跳過,記錄原因

硬約束(違反即停)

  1. 不碰登入態:個人微信/公眾號後台 Cookie、掃碼態一律不用(封號 + 違約)
  2. 不繞過驗證碼:觸發即整體停止(繞過技術措施是中國刑法 285 條紅線)
  3. 不規模化採集:robots 整站 Disallow,定位個人研究小量取用;串行 + 秒級間隔,單日 ≤500 篇
  4. 不商用不傳播:文章受著作權保護,個人學習研究屬合理使用(前提:不傳播、不商用、保留署名)
  5. 發現層受動態頻控管制(2026-08-13 實測:1520 請求/30 分鐘觸發 IP 驗證碼,小時級未自動解除):低頻串行(建議 ≤10 次/30 分鐘),觸發即整體停止,等待恢復,不得嘗試繞過

相關技能