Markdown Proxy - URL to Markdown
将任意 URL 转为干净的 Markdown。支持需要登录的页面和专有平台。
URL 路由规则(先判断再执行)
收到 URL 后,先判断类型,不同类型走不同通道:
| URL 特征 | 路由到 | 原因 |
|---|---|---|
twitter.com / x.com |
bb-browser site(twitter/thread、twitter/user、twitter/search) |
用真实浏览器登录态,内容最完整 |
reddit.com |
bb-browser site(reddit/thread、reddit/posts) |
Reddit 需登录,bb-browser 直接用浏览器 |
weibo.com / weibo.cn |
bb-browser site(weibo/post、weibo/user、weibo/hot) |
微博需要登录态 |
zhihu.com |
bb-browser site(zhihu/question、zhihu/hot、zhihu/search) |
知乎需要登录态 |
bilibili.com |
bb-browser site(bilibili/video、bilibili/search) |
B站需要登录态 |
xiaohongshu.com |
bb-browser site(xiaohongshu/note、xiaohongshu/search) |
小红书 Pinia store 方式,零逆向 |
github.com |
bb-browser site(github/repo、github/issues) |
GitHub 登录态可用 |
mp.weixin.qq.com |
Playwright MCP(browser_navigate + browser_snapshot) |
公众号有反爬,用 MCP 浏览器抓取最可靠 |
feishu.cn / larksuite.com(文档/知识库) |
内置 scripts/fetch_feishu.py |
需要飞书 API 认证 |
youtube.com / youtu.be |
bb-browser site(youtube/video、youtube/transcript)或 yt-search-download skill |
YouTube 有多种方式 |
| 其他所有 URL | 代理服务级联(见下方) |
bb-browser site 支持的完整平台列表(35+ 平台,95+ 命令):
搜索引擎:google/search、baidu/search、bing/search、duckduckgo/search、sogou/weixin
社交媒体:twitter/*、reddit/*、weibo/*、xiaohongshu/*、jike/*、hupu/hot
视频:youtube/*、bilibili/*
技术开发:github/*、stackoverflow/search、hackernews/*、npm/search、pypi/*、arxiv/search、csdn/search、cnblogs/search、devto/search、v2ex/*
财经:xueqiu/*、eastmoney/*、yahoo-finance/quote
知识:wikipedia/*、zhihu/*
新闻:bbc/news、reuters/search、toutiao/*、36kr/newsflash
求职:boss/*、linkedin/*
娱乐:douban/*、imdb/search、genius/search、qidian/search
其他:youdao/translate、ctrip/search、smzdm/search、gsmarena/search、producthunt/today、openlibrary/search
运行 bb-browser site list 查看所有可用命令。
代理服务优先级
| 优先级 | 服务 | URL 模式 | 优势 |
|---|---|---|---|
| 1 | r.jina.ai | https://r.jina.ai/{url} |
免费、无需 API key,内容较完整 |
| 2 | Firecrawl | https://api.firecrawl.dev/v2/scrape 或 firecrawl CLI |
JS 渲染、结构化提取、metadata 丰富,需 API key |
| 3 | defuddle.md | https://defuddle.md/{url} |
免费、输出干净,带 YAML frontmatter |
| 4 | agent-fetch |
npx agent-fetch | 本地工具,无需网络代理 |
| 5 | defuddle CLI |
defuddle parse | 本地 CLI,适合普通网页 |
Workflow
Step 0: URL 类型判断
# 1) bb-browser site 优先(支持 35+ 平台,使用真实浏览器登录态)
if URL matches a bb-browser supported platform:
→ Step C: bb-browser site 抓取
→ 如果 bb-browser 失败(未安装/未登录),继续下面的判断
# 2) 公众号
if URL contains "mp.weixin.qq.com":
→ Step A: 公众号抓取
→ 结束
# 3) 飞书文档
if URL contains "feishu.cn/docx/" or "feishu.cn/wiki/" or "feishu.cn/docs/" or "larksuite.com/docx/":
→ Step B: 飞书文档抓取
→ 结束
# 4) 通用代理
else:
→ 继续 Step 1
bb-browser 平台 URL 匹配规则:
| URL 特征 | bb-browser 命令 |
|---|---|
twitter.com/*/status/* 或 x.com/*/status/* |
bb-browser site twitter/thread "URL" |
twitter.com/<user> 或 x.com/<user> |
bb-browser site twitter/user <user> |
reddit.com/r/*/comments/* |
bb-browser site reddit/thread "URL" |
weibo.com/*/status/* 或 weibo.cn/*/status/* |
从 URL 提取 post ID → bb-browser site weibo/post <id> |
weibo.com/u/* |
bb-browser site weibo/user <uid> |
zhihu.com/question/* |
从 URL 提取 question ID → bb-browser site zhihu/question <id> |
bilibili.com/video/* |
从 URL 提取 BV ID → bb-browser site bilibili/video <bvid> |
xiaohongshu.com/explore/* 或 xiaohongshu.com/discovery/item/* |
从 URL 提取 note ID → bb-browser site xiaohongshu/note <id> |
github.com/<owner>/<repo> |
bb-browser site github/repo <owner>/<repo> |
github.com/<owner>/<repo>/issues/* |
bb-browser site github/issues <owner>/<repo> |
youtube.com/watch* 或 youtu.be/* |
从 URL 提取 video ID → bb-browser site youtube/video <id> |
| 用户要求搜索/热榜等非 URL 场景 | 直接用对应 adapter(如 bb-browser site zhihu/hot) |
Step C: bb-browser site 抓取(新增)
使用 bb-browser 的社区 site adapter,通过真实浏览器登录态获取结构化数据。
前置检查:
# 检查 bb-browser 是否已安装
bb-browser --version
# 如果未安装,跳过此步骤,回退到后续路由
# 更新 adapter(首次使用或定期)
bb-browser site update
执行命令:
# 通用格式
bb-browser site <platform/command> [args] --json
# Twitter
bb-browser site twitter/thread "https://x.com/user/status/123456" --json
bb-browser site twitter/user elonmusk --json
bb-browser site twitter/search "AI agent" --json
# Reddit
bb-browser site reddit/thread "https://reddit.com/r/programming/comments/..." --json
# 微博
bb-browser site weibo/post <post_id> --json
bb-browser site weibo/hot --json
bb-browser site weibo/user <uid> --json
# 知乎
bb-browser site zhihu/question <question_id> --json
bb-browser site zhihu/hot --json
bb-browser site zhihu/search "RAG" --json
# B站
bb-browser site bilibili/video BV1xx411c7 --json
bb-browser site bilibili/search "编程" --json
# 小红书
bb-browser site xiaohongshu/note <note_id> --json
bb-browser site xiaohongshu/search "穿搭" --json
# GitHub
bb-browser site github/repo epiral/bb-browser --json
bb-browser site github/issues epiral/bb-browser --json
# YouTube
bb-browser site youtube/video dQw4w9WgXcQ --json
bb-browser site youtube/transcript dQw4w9WgXcQ --json
# 搜索引擎
bb-browser site google/search "query" --json
bb-browser site baidu/search "query" --json
# 其他常用
bb-browser site hackernews/top 10 --json
bb-browser site stackoverflow/search "python async" --json
bb-browser site douban/movie <id> --json
bb-browser site xueqiu/stock 贵州茅台 --json
用 --jq 内联过滤关键字段:
bb-browser site twitter/search "AI" --jq '.[] | {text: .text, author: .author.userName, likes: .likeCount}'
bb-browser site xueqiu/hot-stock 5 --jq '.items[] | {name, changePercent}'
JSON → Markdown 转换:
bb-browser 返回结构化 JSON,需要转换为 Markdown:
- 提取关键字段(title、author、content/text、date 等)
- 组装为 Markdown 格式,包含 YAML frontmatter
- 列表类数据用 Markdown 表格或列表展示
- 长文本内容保留原始格式
错误处理:
如果 bb-browser 未安装(command not found):
→ 提示用户: npm install -g bb-browser
→ 回退到后续路由步骤
如果返回 HTTP 401:
→ 提示用户: 请先在浏览器中登录 <platform>,然后重试
→ 回退到后续路由步骤
如果返回其他错误:
→ 回退到后续路由步骤(代理服务级联)
Step A: 公众号文章抓取(Playwright MCP)
使用 Playwright MCP 工具直接在浏览器中打开页面并提取内容,无需本地安装 Playwright/Chromium。
步骤:
- 导航到页面:调用
mcp__playwright__browser_navigate打开公众号 URL - 获取快照:调用
mcp__playwright__browser_snapshot获取页面的 accessibility tree - 提取内容:从 snapshot 中提取标题(heading)、作者、日期、正文段落(paragraph)、图片(img src)、代码块(code)、引用(blockquote)、列表(list)等元素
- 转为 Markdown:将提取的结构化内容手动组装为 Markdown,包括:
- YAML frontmatter(title, author, date, url, source)
- 正文中的图片保留原始 URL(
) - 代码块用
```包裹 - 引用用
>标记 - 列表用
-标记
- 关闭页面:调用
mcp__playwright__browser_close关闭标签页 - 失败回退:如果 MCP 不可用,回退到
scripts/fetch_weixin.py或 Step 1-2 代理服务
无额外依赖,Playwright MCP 由 Claude Code 环境提供。
Step B: 飞书文档抓取(内置)
python3 ~/.claude/skills/markdown-proxy/scripts/fetch_feishu.py "FEISHU_URL"
依赖:requests(标准库级别),环境变量 FEISHU_APP_ID + FEISHU_APP_SECRET
支持:docx 文档、doc 文档、wiki 知识库页面(自动解析实际文档 ID)
输出:YAML frontmatter(title, document_id, url)+ Markdown 正文
支持 --json 参数输出 JSON 格式。
Step 1: 优先用 r.jina.ai
curl -sL "https://r.jina.ai/{original_url}" 2>/dev/null
如果返回非空且包含实际内容,使用此结果。
Step 1.5: 如果 Jina 内容不够好,用 Firecrawl(需 API key)
Firecrawl 提供 JS 渲染、结构化提取和丰富的 metadata,适合 Jina 抓不到或内容不完整的情况。
前置条件: 环境变量 FIRECRAWL_API_KEY(免费 500 credits,无需信用卡)
方式 A:API 调用(无需安装)
curl -s -X POST "https://api.firecrawl.dev/v2/scrape" \
-H "Authorization: Bearer $FIRECRAWL_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "{original_url}"}' | jq -r '.data.markdown // .data.html'
方式 B:Firecrawl CLI
# 安装
npm install -g firecrawl
# 基础抓取(默认输出 Markdown)
firecrawl scrape "{original_url}"
# 只提取正文(去除导航、页脚、广告)
firecrawl scrape "{original_url}" --only-main-content
# 等待 JS 渲染(SPA 页面)
firecrawl scrape "{original_url}" --wait-for 3000
# 多格式输出 + 保存到文件
firecrawl scrape "{original_url}" --format markdown,links -o output.md
# 指定 HTML 标签提取
firecrawl scrape "{original_url}" --include-tags article,main
firecrawl scrape "{original_url}" --exclude-tags nav,aside,.ad
Firecrawl API 返回结构:
{
"success": true,
"data": {
"markdown": "...",
"html": "...",
"metadata": {
"title": "...",
"description": "...",
"language": "...",
"ogTitle": "...",
"ogDescription": "...",
"ogImage": "...",
"sourceURL": "...",
"statusCode": 200
}
}
}
提取 Markdown 时用 jq -r '.data.markdown',提取标题用 jq -r '.data.metadata.title'。
Step 2: 如果 Jina 和 Firecrawl 都失败,用 defuddle.md
curl -sL "https://defuddle.md/{original_url}" 2>/dev/null
Step 3: 如果所有代理都失败,回退本地工具
# agent-fetch: https://github.com/teng-lin/agent-fetch
npx agent-fetch "{original_url}" --json
# 或
defuddle parse "{original_url}" -m -j
Step 4: 展示内容(必做)
抓取成功后,必须按以下格式向用户展示:
**标题**: {title}
**作者**: {author}(如有)
**来源**: {source_type}(公众号 / 飞书文档 / 网页等)
**URL**: {original_url}
### 内容摘要
{前 3-5 句话的摘要}
### 正文
{完整 Markdown 内容,超长时截取前 200 行并注明"内容已截取,完整版已保存到 xxx"}
Step 5: 保存文件(默认执行)
将抓取的 Markdown 内容保存到本地:
默认保存路径:~/Downloads/{title}.md
文件格式:YAML frontmatter(title, author, date, url, source)+ Markdown 正文
- 文件名用文章标题,去掉特殊字符
- 如果用户指定了其他保存路径,按用户要求
- 保存后告知用户文件路径
- 如果用户明确说"不用保存"或只是快速预览,可以跳过
Examples
X/Twitter 帖子
# 优先用 bb-browser(需要浏览器已登录 Twitter)
bb-browser site twitter/thread "https://x.com/username/status/1234567890" --json
# 回退:代理服务
curl -sL "https://r.jina.ai/https://x.com/username/status/1234567890"
微博热搜
bb-browser site weibo/hot --json
知乎热榜
bb-browser site zhihu/hot --json
B站视频
bb-browser site bilibili/video BV1xx411c7 --json
bb-browser site bilibili/search "编程" --json
小红书笔记
bb-browser site xiaohongshu/note <note_id> --json
GitHub 仓库
bb-browser site github/repo epiral/bb-browser --json
普通网页
curl -sL "https://r.jina.ai/https://example.com/article"
公众号文章
1. mcp__playwright__browser_navigate → "https://mp.weixin.qq.com/s/abc123"
2. mcp__playwright__browser_snapshot → 获取页面结构
3. 从 snapshot 提取标题、作者、日期、正文 → 组装 Markdown
4. mcp__playwright__browser_close
飞书文档
python3 ~/.claude/skills/markdown-proxy/scripts/fetch_feishu.py "https://xxx.feishu.cn/docx/xxxxxxxx"
飞书知识库
python3 ~/.claude/skills/markdown-proxy/scripts/fetch_feishu.py "https://xxx.feishu.cn/wiki/xxxxxxxx"
Notes
- bb-browser site(优先):支持 35+ 平台,使用真实浏览器登录态,结构化 JSON 输出。需
npm install -g bb-browser+ Chrome 扩展。支持--json输出和--jq <expr>内联过滤。未安装时自动回退到代理服务 - Firecrawl:专业级网页抓取服务,支持 JS 渲染、结构化提取、丰富 metadata。免费 500 credits(无需信用卡),之后按量付费。支持自部署(AGPL-3.0)。环境变量
FIRECRAWL_API_KEY,或 CLInpm install -g firecrawl - r.jina.ai 和 defuddle.md 均免费、无需 API key
- 公众号文章优先使用 Playwright MCP(
browser_navigate+browser_snapshot),无需本地安装 Playwright/Chromium - 如果 Playwright MCP 不可用,回退到
scripts/fetch_weixin.py(需pip install playwright beautifulsoup4 lxml+playwright install chromium) - 飞书文档使用内置 API 脚本(需环境变量
FEISHU_APP_ID+FEISHU_APP_SECRET) - 飞书脚本自动将 blocks 转为 Markdown(标题、列表、代码块、引用、待办等)
- 对于超长内容,可用
| head -n 200先预览 - bb-browser 也可用于搜索/热榜等非 URL 场景,如
bb-browser site zhihu/hot、bb-browser site google/search "query" - bb-browser MCP 接入方式:
npx -y bb-browser --mcp(可配置在 settings.json 中)