Communityライティング&編集github.com

JJ-Yvain-Skills/wechat-article-fetch

微信公众平台文章抓取/发现:零依赖、无需登录,UA 是唯一准入门槛(SKILL + 3 个 Python 脚本,MIT 协议)

wechat-article-fetch とは?

这是一个用于抓取和发现微信公众号文章的 AI 技能,基于三种 Python 脚本(wechat_fetch.py、wechat_discover.py、batch_fetch.py)实现,零外部依赖,无需微信登录或 Cookie。核心原理是:通过模拟浏览器 User-Agent 直接 GET 请求公开文章页,服务器端渲染的正文位于 `<div id="js_content">` 中,图片真实地址在 `data-src` 属性。发现层依赖搜狗搜索获取近期文章的清洁态元数据及纯 HTTP 可拆签名直链(窗口 ≥ 1 小时,需尽快抓取),但请注意搜狗有 IP 级验证码(约 15–20 请求/30 分钟触发),必须采用低频率串行策略,触发即停。该技能明确不触碰登录态、不绕过验证码、不规模化采集,适合个人学习和研究用途。脚本支持 CLI 和库双模式,错误处理统一使用 WeChatError。

対応~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に質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

wechat-article-fetch · 微信公众平台文章抓取

核心事实(已实测,直接执行)

  • UA 是唯一准入门槛:使用脚本内置的浏览器 UA。不带 UA / curl / python-requests / MicroMessenger → 全部 302
  • 正文极易获取:服务端渲染,正文位于 <div id="js_content">,裸 GET 即可,无需 JS / Cookie / 登录
  • 图片无防盗链:真实地址在 data-src
  • 发现层:原文不被搜索引擎收录;搜狗给出加密跳转链,清洁态纯 HTTP 可拆签名直链(窗口 ≥ 1 小时,尽快抓取);⚠️ 连续发送约 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(窗口 ≥ 1 小时,尽快抓取);⚠️ 连续发送 ~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 分钟),触发即整体停止,等待恢复,不得尝试绕过

関連スキル