微信公众号文章批量导出(支持任意公众号)
本技能提供两条相互独立的工作流:
- 方案 A — 导出自己公众号:适合公众号管理员,在「发表记录」页面运行 JS 脚本。
- 方案 B — 导出其他公众号:适合"知道某个公众号名称,想拿走它全部文章链接"的场景, 借助自己公众号后台的「超链接」搜索能力 + Python 调用接口实现。
方案 A:导出自己公众号(管理后台 JS 方案)
适用:你是公众号管理员,已登录 mp.weixin.qq.com 后台。
- 读取
scripts/extract_articles.js,根据用户实际情况调整 CONFIG 参数:maxPages: 总页数(让用户在后台发表记录页面查看分页控件告知)pageSize: 每页条数(默认10)iframeWait: iframe 等待渲染时间(默认4000ms,网络慢可增大)
- 将调整后的脚本提供给用户,指导其在「发表记录」页面 F12 控制台运行
- 脚本自动用隐藏 iframe 逐页加载,提取发布时间/标题/链接,导出 CSV
主脚本: scripts/extract_articles.js
运行方式: 复制脚本内容 -> 公众号后台发表记录页面 -> F12 -> Console -> 粘贴 -> 回车
脚本原理:
- 公众号后台是 Vue 前端渲染,fetch 直接请求 URL 返回的 HTML 不含文章数据
- 点击"下一页"会整页导航,导致脚本上下文丢失
- 解决方案: 用隐藏 iframe 逐页加载不同
begin参数的 URL,iframe 内 JS 渲染完成后从 DOM 提取数据,主页面不跳转
关键选择器:
- 文章链接:
a.weui-desktop-mass-appmsg__title - 标题: 链接内
<span>文本(排除<b>原创</b>标签) - 分页 URL:
appmsgpublish?sub=list&begin={offset}&count=10&token={token}&lang=zh_CN
发布时间提取、常见问题处理、备用方案详见 references/troubleshooting.md。
方案 B:导出其他公众号(超链接接口 + Python 方案)
适用:已知某个公众号名称,想批量提取它发布过的全部文章的标题、链接、发布时间。
原理
微信公众号的文章数据不对外开放搜索,但有一个"后门":你自己公众号后台的「超链接」功能可以搜索任意公众号,并查看其全部历史文章。脚本用你自己后台的登录态(cookie)去请求 appmsgpublish 接口,但查询的是目标公众号的 fakeid,从而实现"以己之名、取他号之文"。
前置条件
- 你有一个自己的微信公众号(个人订阅号即可,mp.weixin.qq.com 免费注册)
- 已安装 Python 3.6+(无需安装任何第三方库,脚本仅用标准库)
- 从浏览器复制三项参数(见下)
获取 cookie / token / fakeid
- 登录 mp.weixin.qq.com 后台
- 点击「新的创作」->「图文信息」-> 顶部工具栏点「超链接」
- 在弹窗搜索框输入目标公众号名称
- 按 F12 打开开发者工具 -> Network 标签 -> 过滤 Fetch/XHR
- 点击文章列表「下一页」翻页,找到
appmsgpublish开头的请求 - 从该请求复制三项:
- cookie:Request Headers 中的完整
cookie值 - token:Query Parameters 中的
token值(纯数字) - fakeid:Query Parameters 中的
fakeid值(一串 Base64 编码字符串,形如xxxx==,即目标公众号 ID)
- cookie:Request Headers 中的完整
运行
- 打开
scripts/export_other_account.py,把上面三项填入脚本顶部对应变量 (若只想填公众号名称,可只填SEARCH_KEYWORD,脚本会自动搜索 fakeid) - 运行:
python scripts/export_other_account.py - 输入一个文件名前缀,脚本自动翻页抓取,直到无更多数据
- 输出
xxx_articles.csv(标题/链接/发布时间)和xxx_articles.json
核心脚本
主脚本: scripts/export_other_account.py
运行方式: 填好 cookie/token/fakeid -> python scripts/export_other_account.py
脚本要点:
- 调用
cgi-bin/appmsgpublish接口,参数为sub=list&fakeid=<目标>&begin=<偏移>&count=5 - 返回为嵌套 JSON:
publish_page(字符串) ->publish_list->publish_info(字符串) ->appmsgex数组(每篇含title/link/create_time)。一次群发可能含多篇文章,脚本会全部展开。 begin每轮 +5 翻页,连续两次返回空即判定到底;每次请求间隔 2~4 秒随机延时防风控。
常见问题(方案 B)
- cookie 过期:约 2~4 小时失效,脚本返回空或报错时重新 F12 复制一次 cookie/token 即可。
fingerprint报错:脚本里FINGERPRINT来自你复制的请求,跨会话可能失效;若报错可删除该行再试。- 抓到 0 篇:检查 fakeid 是否正确、cookie/token 是否还有效。
- 网络限制:脚本需能访问 mp.weixin.qq.com;公司网络/代理异常时可能被拦截。
- 想抓多个公众号:每次复制对应公众号的 fakeid 替换后重跑,或改用
SEARCH_KEYWORD名称搜索。
技能发布
发布本技能到 SkillHub 或分享给其他用户时,使用 scripts/publish.py 一键完成验证、安全审计、打包。
CLI 发布
python scripts/publish.py --skill . --out ../dist
四步流水线:验证 -> 安全审计 -> 打包 -> 输出发布指引。
打包生成的 .zip 文件用于上传 SkillHub(只接受 .zip 扩展名),.skill 文件用于本地分享。
Agent 对话式发布
用户说"发布 wechat-mp-article-exporter"时,Agent 自动:读取 SKILL.md 验证结构、扫描代码做安全审计、调用 scripts/publish.py 打包(SKILL.md 在压缩包根目录)、输出 SkillHub 发布步骤。
详细发布流程
详见 references/publishing-guide.md,包含 CLI 参数说明、安全审计规则、SkillHub 上传步骤、常见问题处理。
微信扫一扫