大家好,我是小智,专注 AI 工具,AI 智能体和编程提效
痛点分析
对于搞内容矩阵的朋友们来说,有一个高频痛点:每天都需要通过 URL 抓取大量文章、推文或文档作为参考资料。但直接把链接丢给 AI,结果往往不尽如人意——要么因为防爬虫机制提取不出内容,要么只拿到一堆充满噪音的 HTML 代码。要知道,喂给大模型的数据,质量越高、结构越清晰(尤其是 Markdown 格式),它输出的结果才越精准。
markdown-proxy 就是专门为解决这个痛点而生的。它是一个极其强大的 Claude Code Skill,安装之后,你只需要把任何 URL 丢给 Claude,它就能自动判断链接类型,选择最合适的抓取通道,为你输出干净、结构化的 Markdown 内容。不管是反爬严格的微信公众号、需要认证的飞书文档,还是 X/Twitter 的推文,它都能轻松搞定。
项目地址:https://github.com/joeseesun/markdown-proxy
为什么需要它?
Claude Code 本身有 WebFetch 工具,但它有几个硬伤:
第一,登录墙过不去。 微信公众号文章有反爬机制,直接请求拿到的是空白页面。飞书文档需要 API 认证,裸抓什么也拿不到。X/Twitter 的内容也越来越难直接获取。
第二,输出噪音太多。 即使页面能打开,HTML 里混着导航栏、侧边栏、广告、JavaScript 代码,提取出的内容需要大量清理。
第三,没有降级策略。 一个代理服务挂了就彻底抓不到了,没有自动切换的能力。
markdown-proxy 针对这三个问题分别给出了方案:专用脚本搞定登录墙,代理服务输出干净 Markdown,四层级联保证可用性。
工作原理
markdown-proxy 的核心设计是路由分发 + 多层降级。收到一个 URL 后,它先判断链接类型,再选择对应的抓取通道:
URL 进来
│
├─ mp.weixin.qq.com → Playwright 无头浏览器抓取
├─ feishu.cn / larksuite.com → 飞书开放 API 抓取
├─ youtube.com / youtu.be → 专用 YouTube skill
└─ 其他所有 URL → 代理级联
├─ 1. r.jina.ai(内容最全)
├─ 2. defuddle.md(输出最干净)
├─ 3. agent-fetch(本地工具)
└─ 4. defuddle CLI(本地 CLI)
这个设计有两个好处:一是专有平台走专用通道,保证抓取成功率;二是通用 URL 有四层降级,任何一层挂了自动跳到下一层。
四大抓取通道详解
1. 微信公众号:Playwright 无头浏览器
公众号文章的反爬是出了名的严格,普通 HTTP 请求拿到的要么是空页面,要么是验证码。markdown-proxy 用 Playwright 启动一个无头 Chromium 浏览器来绕过这个限制。就像下面这样,系统会在后台自动打开并成功加载公众号页面:
核心逻辑在 scripts/fetch_weixin.py,大约 120 行 Python 代码:
async with async_playwright() as p:
browser = await p.chromium.launch(headless=True)
page = await browser.new_page(
user_agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) ..."
)
await page.goto(url, wait_until="domcontentloaded", timeout=30000)
await page.wait_for_selector("#js_content", timeout=15000)
html = await page.content()
拿到完整 HTML 后,用 BeautifulSoup 解析出标题、作者、发布时间和正文内容,图片链接也会保留。最终输出带 YAML frontmatter 的干净 Markdown 文件,提取效果非常出色:
2. 飞书文档:开放 API 直连
飞书文档不是普通网页,它的内容是通过 API 以 Block 结构化数据的形式存储的。markdown-proxy 内置了 scripts/fetch_feishu.py(约 280 行),直接调用飞书开放 API 拉取文档 blocks,然后逐个转换为 Markdown。你可以看到,即便是复杂的飞书文档结构也能被精准还原:
支持三种飞书文档类型:
| 类型 | URL 示例 | 处理方式 |
|---|---|---|
| 新版文档(docx) | feishu.cn/docx/xxx | 直接获取 blocks |
| 旧版文档(doc) | feishu.cn/docs/xxx | 直接获取 blocks |
| 知识库页面(wiki) | feishu.cn/wiki/xxx | 先解析节点获取实际文档 ID,再获取 blocks |
Block 转 Markdown 的映射非常全面,覆盖了标题、列表、代码块、引用、待办事项、公式、图片等十几种类型。代码块还支持 70 种编程语言的语法标识映射:
# 飞书的语言代码到字符串的映射(节选)
lang_map = {
7: "bash", 8: "c", 10: "cpp", 25: "go",
31: "java", 32: "javascript", 50: "python",
53: "rust", 62: "typescript", ...
}
使用前需要配置飞书应用的 FEISHU_APP_ID 和 FEISHU_APP_SECRET 环境变量,并给应用授予 docx:document:readonly 权限。
3. 通用 URL:代理服务级联
对于普通网页,markdown-proxy 不需要任何自建基础设施,它巧妙地组合了两个免费的在线代理服务和两个本地工具:
r.jina.ai(首选)—— Jina AI 提供的免费 URL 转 Markdown 服务。用法极其简单,在原始 URL 前面加上 https://r.jina.ai/ 就行:
curl -sL "https://r.jina.ai/https://example.com/article"
内容最完整,图片链接也会保留。
defuddle.md(备选)—— 另一个免费的文章提取服务,输出更干净,还带 YAML frontmatter 元信息。用法类似,URL 前面加 https://defuddle.md/。
agent-fetch(本地降级)—— 当两个在线代理都不可用时,回退到本地工具。通过 npx 直接运行,不需要预装。
defuddle CLI(最终降级)—— 最后一道防线,本地 CLI 工具,适合普通网页。
4. Twitter 推文
Twitter 推文有专门的工具链(元信息解析等),markdown-proxy 把这部分委托给专用的 Twitter skill 来处理。不管是简单的文本推文还是带有多媒体信息的推文:
通过 markdown-proxy,都能被完整地提取并转换为排版良好的 Markdown 格式:
安装与使用
安装
一行命令搞定:
npx skills add joeseesun/markdown-proxy
安装过程非常简单,控制台会显示安装进度和相关依赖的配置情况:
验证安装成功:
ls ~/.claude/skills/markdown-proxy/SKILL.md
前置依赖
基础功能(通用 URL 抓取)只需要 curl,macOS 和 Linux 都自带,开箱即用。
如果需要抓取公众号文章,额外安装 Playwright:
pip install playwright beautifulsoup4 lxml
playwright install chromium
如果需要抓取飞书文档,配置环境变量:
export FEISHU_APP_ID="your_app_id"
export FEISHU_APP_SECRET="your_app_secret"
使用
安装好之后,直接给 Claude 发 URL 就行,不需要任何特殊指令:
帮我读一下这篇文章:https://example.com/post
抓取这条推文:https://x.com/user/status/123456
读一下这篇公众号:https://mp.weixin.qq.com/s/abc123
把这个飞书文档转成 Markdown:https://xxx.feishu.cn/docx/xxxxxxxx
Claude 会自动识别 URL 类型,选择对应的抓取通道,输出格式化后的 Markdown 内容。
技术实现亮点
代码量极小。 整个项目只有两个 Python 脚本加一个 SKILL.md 配置文件。公众号抓取约 120 行,飞书 API 约 280 行。通用 URL 抓取甚至不需要代码,直接用 curl 调用外部代理。
零 API Key 依赖。 通用 URL 抓取用的 r.jina.ai 和 defuddle.md 都是免费服务,不需要注册账号或配置 API Key。只有飞书文档需要额外认证——因为飞书的文档权限模型决定了必须走 API。
Skill 化设计。 作为 Claude Code Skill 而不是独立工具,它的使用体验是无缝的。用户不需要记命令、不需要切换工具,直接在对话中发链接就行。SKILL.md 里定义了完整的路由逻辑和降级策略,Claude 会自动执行。
飞书 Block 解析覆盖全面。 飞书文档的 Block 类型有二十多种,markdown-proxy 覆盖了最常用的十几种,包括标题(1-7 级)、有序/无序列表、代码块(70 种语言)、引用、公式、待办、分割线、图片等。对于未知类型也有兜底逻辑,尝试提取其中的文本元素。
常见问题速查
| 问题 | 解决方法 |
|---|---|
| 公众号抓取失败 | 运行 playwright install chromium 安装浏览器 |
| 飞书返回权限错误 | 检查 FEISHU_APP_ID 和 FEISHU_APP_SECRET 环境变量,确认应用有文档读取权限 |
| 飞书知识库页面抓取失败 | 确认应用有 wiki:wiki:readonly 权限 |
| r.jina.ai 返回空内容 | 无需操作,会自动降级到 defuddle.md |
| 所有代理都失败 | URL 可能有严格认证限制,试试 npx agent-fetch |
适合谁用?
markdown-proxy 适合所有 Claude Code 用户,特别是:
- 日常需要让 Claude 阅读和分析网页文章的开发者
- 需要抓取微信公众号内容做研究或整理的人
- 团队协作中需要把飞书文档内容导出为 Markdown 的人
- 经常需要从 X/Twitter 等社交平台提取信息的人
进群交流 & 领取福利
关于如何使用 Claude Code 和 OpenClaw 的各种玩法,小智建了一个学习交流群,欢迎大家一起沟通玩法心得。
如果本文对您有帮助,也请帮忙点个 赞👍 + 在看 哈!❤️关注小智AI指南公众号,AI 路上不迷路
