微信公众号文章抓取保存MD格式
微信公众号文章抓取保存MD格式
ZhangCurry微信公众号文章抓取保存MD格式
https://github.com/jackwener/wechat-article-to-markdown
它的主要作用是:把微信公众号文章链接输入后,自动抓取文章内容,然后转换成干净的 Markdown 文件,方便保存、阅读或二次编辑。
它能做什么
输入一条微信文章链接(mp.weixin.qq.com/s/xxx 格式),程序会输出一个文件夹,里面包含:
- • 一篇 .md 文件(文章标题命名)
- • 一个 images 子文件夹(放所有下载下来的图片)
md 文件里已经包含:
- • 标题
- • 公众号名字
- • 发布时间
- • 原文链接
- • 正文(已转成 Markdown 格式)
- • 图片全部换成本地相对路径(./images/xxx.png)
代码块部分会尽量保留语言标识,比如 python 或 js,方便后续用编辑器高亮。
比如我让它抓取了下:基于Cursor + OpenSpec 的开发工作流 这篇文章,抓取完后,它的本地目录结构如下:
怎么用(最简单方式)
用 pipx 安装(推荐,一条命令全局可用):
1 | pipx install wechat-article-to-markdown |
然后直接运行:
1 | wechat-article-to-markdown "https://mp.weixin.qq.com/s/xxxxxxxxxxxxxxxx" |
程序会在当前目录生成 output/ 文件夹,里面就是转换结果。
也可以用 uv 工具安装和运行,效果一样。
核心实现原理
- 抓取页面不被封
微信公众号文章现在反爬很严格,直接 requests.get 很容易被识别成脚本。
这个工具用了 Camoufox(一种伪装浏览器行为的库),模拟真实用户打开页面的行为,降低被检测概率。- 解析 HTML 结构
拿到页面 HTML 后,程序针对微信文章的固定结构做解析:
- • 标题在特定 class 的 h1/h2
- • 作者/时间/来源在 meta 或特定 div
- • 正文主要在 id=”js_content” 的容器里
- • 图片大多是 data-src 属性(微信延迟加载机制)
- 转成 Markdown
核心转换用了类似 turndown 的逻辑(虽然这个项目是 Python 实现,但原理接近 JS 的 turndown 库):
把 HTML 标签逐个映射成 Markdown 语法核心转换用了类似 turndown 的逻辑(虽然这个项目是 Python 实现,但原理接近 JS 的 turndown 库):
把 HTML 标签逐个映射成 Markdown 语法→ 普通段落
- → 文字
→ alt
→ ```xxx\n代码\n```
下载后md文件效果如下:
- 图片本地化
找到所有图片链接(通常是 https://mmbiz.qpic.cn/...),逐个下载到本地 images/ 文件夹
同时把 md 里的图片地址全部替换成相对路径,避免以后打不开图。- 代码块特殊处理
微信有自己的代码卡片组件,带语言类型。程序会识别这些结构,转换成标准的 Markdown 围栏代码块并保留语言标记。
总结一句话
这是一个专注解决“微信文章不好存、不好读、图片易失效”问题的实用小工具,用 Camoufox 防反爬 + 针对性 HTML 解析 + 图片本地化 + HTML→Markdown 转换,完整地把公众号文章变成离线友好的 Markdown 文档。



