ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

wechat-article-exporter:用 API 接口批量抓取并导出微信公众号文章

wechat-article-exporter:用 API 接口批量抓取并导出微信公众号文章

wechat-article-exporter:用 API 接口批量抓取并导出微信公众号文章

【免费下载链接】wechat-article-exporter一款在线的 微信公众号文章批量下载 工具,支持导出阅读量与评论数据,无需搭建任何环境,可通过 在线网站 使用,支持 docker 私有化部署和 Cloudflare 部署。 支持下载各种文件格式,其中 HTML 格式可100%还原文章排版与样式。项目地址: https://gitcode.com/gh_mirrors/we/wechat-article-exporter

wechat-article-exporter 是一个免费开源的微信公众号文章导出工具,基于 Nuxt 3 构建,既能通过浏览器直接操作,也开放了 RESTful 风格的 API 接口,方便把"抓文章、导出数据"集成进自己的系统。文章支持导出为 html、json、excel、txt、markdown、docx、pdf 等格式,其中 HTML 会打包全部图片与样式文件,尽可能保留原始排版;项目同时提供 Docker 私有化部署与 Cloudflare Workers 部署两种方案。适合想批量存档公众号内容、自建数据分析工具或希望数据留在自己服务器上的个人开发者与小团队。

这个工具适合谁,能解决什么问题

  • 内容存档与备份:需要长期保留某个公众号的历史文章,包括标题、正文、封面、发布时间等字段,离线浏览不受链接失效影响。
  • 数据收集与分析:把文章结构化为 json、excel,或保留带阅读数、转发数、评论的完整页面,喂给后续统计脚本。
  • 自建集成服务:后端直接调用/api/public/v1/*系列接口,跳过界面,在自己的应用里完成搜索公众号、拉取文章列表、获取正文的完整链路。
  • 数据敏感场景:通过 Dockerfile 私有化部署,登录态、文章缓存都落在自己的环境里,不经过第三方公共站。

需要说明:抓取依赖微信公众平台后台自带的"文章搜索"能力,你的公众号账号只服务于你自己的抓取,项目声明不会拿扫码账号去做公共爬虫。如果你的需求是免扫码登录、多账号切换、RSS、不限额度的稳定抓取,官方 README 中提到了付费商业版(公号三刀);本文只针对开源版本。

最小可用流程:从登录到拿到第一批文章数据

第 1 步:部署服务

项目要求 Node.js ≥ 22。拿到代码后有两种运行方式:

git clone https://gitcode.com/gh_mirrors/we/wechat-article-exporter cd wechat-article-exporter corepack enable yarn

本地调试执行yarn dev;私有部署推荐走 Docker,Dockerfile 基于node:22-slim,内置 Chromium 和中文字体(用于本地生成 PDF),默认监听 3000 端口:

yarn docker:build

另一条路是 Cloudflare:yarn build:cf后用wrangler deploy发布,限流策略见 wrangler.toml。

第 2 步:扫码登录

打开首页后触发登录,前端会先创建登录会话(POST /api/web/login/session/{sid}),再请求二维码(GET /api/web/login/getqrcode),每 2 秒轮询/api/web/login/scan检查扫码状态,确认后调用/api/web/login/bizlogin完成登录。整个过程见 登录弹窗组件。登录态以 cookie 形式保存在服务端,后续接口自动携带。

第 3 步:搜索公众号并拉取文章

登录后可以两种方式定位目标公众号:

  • 关键字搜索:GET /api/public/v1/account?keyword=xxx&begin=0&size=5(size 上限 20),返回fakeid、昵称、简介等;
  • 按文章链接反查:GET /api/public/v1/accountbyurl?url=...。

拿到fakeid后调用GET /api/public/v1/article?fakeid=xxx&begin=0&size=20获取历史文章列表;带keyword参数时退化为按标题搜索。列表数据默认存在浏览器 IndexedDB(store/v2/db.ts),重复翻页不会重复请求。

第 4 步:导出内容

GET /api/public/v1/download?url=文章链接&format=html可拿到单篇正文,format支持html/markdown/text/json。在网页端勾选多篇后批量导出,可选 html、json、excel、txt、markdown、docx;HTML 会打包图片和样式成一个压缩包,尽量还原原排版,导出逻辑在 utils/download/Exporter.ts。若还想要阅读量、评论、转发数,需要配合抓包脚本在本地获取 credentials(public/plugins/credential.py),详见"注意事项"。

按任务划分的关键能力

批量下载与进度控制

下载调度由 utils/download/Downloader.ts 负责,内部用p-queue控制并发;合集(专辑)一键下载走 useBatchDownload.ts,先逐篇抓 HTML,再用 JSZip 打包成文件夹结构后输出 zip。进度条会实时区分"进行中 / 已完成 / 已失败 / 已删除"四类,作者已删除的文章会被单独计数,而不是当作失败。

文章过滤与条件筛选

列表界面支持按作者、标题关键词、发布时间范围、原创标识、所属合集等字段过滤,方便只导出感兴趣的子集;支持的内容类型包括普通图文、图片分享、视频分享、文本分享等(类型枚举见 config/index.ts 中的ITEM_SHOW_TYPE)。

阅读量与评论导出

阅读量、点赞、转发数以及评论区数据不在默认抓取范围内,需要先在本地跑抓包流程拿到 credentials 并在设置里填入(生存期约 25 分钟,由CREDENTIAL_LIVE_MINUTES控制)。抓到后,列表和详情页会额外展示这些数据,并随导出文件一起落盘。

私有部署下的 API 集成

私有部署时,把域名指到自己的实例后,后端就可以像调用内部服务一样使用这四个公开接口(接口文档页面):

接口用途
GET /api/public/v1/account按关键字搜索公众号
GET /api/public/v1/accountbyurl按文章链接反查公众号
GET /api/public/v1/article获取历史文章列表
GET /api/public/v1/download按链接导出单篇正文

限流与会员判定集中在 server/utils/rate-limit.ts;公共站会校验请求头X-Api-Token区分游客与会员额度。私有部署默认不限速,且markdown/text/json等格式对所有用户开放(见 server/api/public/v1/download.get.ts 中的判断)。

关键配置与私有化选项

私有部署如何关闭限速与会员门槛

nuxt.config.ts 中由环境变量NUXT_PUBLIC_MEMBERSHIP_ENABLED控制公共站特性(分级限速、会员专属格式)。fork 私有部署时不设置该变量即可,所有接口不限速,所有导出格式直接可用,这是"数据留在自己服务器"的核心收益。

如何配置代理节点

批量抓取文章正文时,公共站会走公共代理节点(每日额度有限,需要"抢")。私有部署建议在"设置 → 代理"中填入自建节点,一行一个,要求是以http/https开头的完整地址,运行时会自动拼接?url=参数(交互界面见 components/setting/Proxy.vue)。节点调度由 utils/download/ProxyManager.ts 完成:按失败次数排序、连续失败进入冷却期,并统计成功率,批量任务不易因为单个节点抖动中断。

数据缓存在哪里

列表缓存走浏览器 IndexedDB(store/v2下按文章、元数据、资源、HTML 分库存储);服务端登录 cookie 与会员记录存 Nitro storage,Docker 部署时落在.data/kv目录(对应NITRO_KV_DRIVER=fs)。备份该目录即可保住登录态。

注意事项与常见限制

  • 频率上限(公共站):查询类接口游客 5 次/分钟、会员 100 次/分钟;下载类游客 1 次/分钟、会员 60 次/分钟,超限返回 429。size参数最大 20。
  • credentials 会过期:阅读量/评论依赖的抓包凭证默认约 25 分钟失效,长时间导出前建议重新抓取。
  • 版权与合规:抓取到的内容版权归原作者,仅用于学习、研究或个人存档,不要商用再分发;同时避免对同一公众号发起过密请求。
  • 已删除文章:作者下架的图文抓不到正文,工具会在列表中给出标记(类似下方"已删除"占位图的效果),而不是静默跳过:

  • PDF 仅限本地:线上公共站不提供 PDF 导出;Docker 私有部署内置 Chromium,可以在本地运行yarn build && node .output/server/index.mjs后使用 PDF 选项。
  • 账号安全:扫码用的是你的公众号后台登录态,项目声明该账号仅用于你自己发起的抓取,不会进入任何账号池。

什么时候适合选它

当你需要在自有服务器上、以 API 形式持续抓取并结构化公众号文章,且能接受自己维护登录态、代理节点与抓包脚本时,wechat-article-exporter 是成本最低的开源方案。反之,若你追求免扫码、多账号、RSS 和无额度压力的开箱体验,官方商业版(公号三刀)在 README 中有对比表,可对照功能再决定。

【免费下载链接】wechat-article-exporter一款在线的 微信公众号文章批量下载 工具,支持导出阅读量与评论数据,无需搭建任何环境,可通过 在线网站 使用,支持 docker 私有化部署和 Cloudflare 部署。 支持下载各种文件格式,其中 HTML 格式可100%还原文章排版与样式。项目地址: https://gitcode.com/gh_mirrors/we/wechat-article-exporter

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进