微信公众号文章抓取保存MD格式

微信公众号文章抓取保存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 工具安装和运行,效果一样。

核心实现原理

    1. 抓取页面不被封

    微信公众号文章现在反爬很严格,直接 requests.get 很容易被识别成脚本。
    这个工具用了 Camoufox(一种伪装浏览器行为的库),模拟真实用户打开页面的行为,降低被检测概率。

    1. 解析 HTML 结构

    拿到页面 HTML 后,程序针对微信文章的固定结构做解析:

    • • 标题在特定 class 的 h1/h2
    • • 作者/时间/来源在 meta 或特定 div
    • • 正文主要在 id=”js_content” 的容器里
    • • 图片大多是 data-src 属性(微信延迟加载机制)
    1. 转成 Markdown

    核心转换用了类似 turndown 的逻辑(虽然这个项目是 Python 实现,但原理接近 JS 的 turndown 库):
    把 HTML 标签逐个映射成 Markdown 语法

  1. 核心转换用了类似 turndown 的逻辑(虽然这个项目是 Python 实现,但原理接近 JS 的 turndown 库):
    把 HTML 标签逐个映射成 Markdown 语法

    • → 普通段落

    • → 文字
    • → alt
    •  → ```xxx\n代码\n```
  2. 下载后md文件效果如下:

  3. 图片

    1. 图片本地化

    找到所有图片链接(通常是 https://mmbiz.qpic.cn/...),逐个下载到本地 images/ 文件夹
    同时把 md 里的图片地址全部替换成相对路径,避免以后打不开图。

    1. 代码块特殊处理

    微信有自己的代码卡片组件,带语言类型。程序会识别这些结构,转换成标准的 Markdown 围栏代码块并保留语言标记。

总结一句话

这是一个专注解决“微信文章不好存、不好读、图片易失效”问题的实用小工具,用 Camoufox 防反爬 + 针对性 HTML 解析 + 图片本地化 + HTML→Markdown 转换,完整地把公众号文章变成离线友好的 Markdown 文档。