核心设计:三层策略自动降级
没有哪个抓取方案能通吃所有网站,所以这个工具的架构是三层策略,依次尝试,前一层失败就自动切换到下一层:
- Firecrawl(首选):AI驱动的网页抓取API,能自动处理JavaScript渲染、绕过反爬机制,直接返回干净的Markdown。免费额度每月500页,闲鱼上可以低价买到额外积分。覆盖率大约96%。
- Jina Reader(备选):完全免费,用法极其简单——在目标URL前面加上
https://r.jina.ai/就行。大部分网站都能搞定,但少数场景会失败。 - Playwright(兜底):真实浏览器自动化,理论上什么页面都能抓,代价是需要安装Chromium(约200MB),部分平台需要提前登录。
三层组合下来,实测覆盖率接近99%。
实现步骤拆解
整个工具的开发过程可以拆成五步,每一步都可以直接用Prompt让AI生成代码。
第一步:平台识别
先根据URL判断它属于哪个平台,这样才能选择最合适的抓取策略。换句话说,就是写一个函数,输入URL,输出「这是微信公众号」或「这是小红书」,以及「是否需要登录」。
给AI的Prompt大意是:写一个Python函数,根据域名识别平台类型(mp.weixin.qq.com 对应微信公众号,xiaohongshu.com 对应小红书,以此类推),并返回是否需要登录态。
第二步:Firecrawl抓取
Firecrawl是首选方案,调用它的Python库 firecrawl-py 即可。这里有一个重要的坑:Firecrawl v2的返回值从字典变成了Document对象,获取内容要用 getattr(result, 'markdown', '') 而不是以前的 result.get('markdown')。这个改动没有明显的文档提示,很容易踩坑。
核心逻辑是:从环境变量读取API Key,调用scrape方法,拿到Markdown内容后检查有效性(长度大于100字符、不是验证页面)。
第三步:Jina Reader抓取
Jina Reader是备选方案,完全免费,实现也最简单:
jina_url = f"https://r.jina.ai/{target_url}"
请求时设置 Accept: text/markdown 和浏览器User-Agent,拿到的就是Markdown格式的内容。
第四步:Playwright兜底
当前两层都失败时,启动Playwright用真实的Chromium浏览器去访问页面。关键配置包括:headless模式运行、模拟微信内置浏览器的User-Agent、支持加载已保存的登录态(storage_state),页面加载完成后用JavaScript提取标题和正文。
这里有一个实战经验:微信公众号的长链接(带 __biz 参数的)容易触发人机验证,短链接(/s/xxxxx 格式)更稳定。
第五步:内容保存与同步Obsidian
抓到内容后,处理流程是:
- 从内容中提取标题
- 创建以「日期_标题」命名的目录
- 用正则表达式提取所有图片URL(支持Markdown格式、直接URL、小红书图片、飞书图片等多种格式)
- 下载图片到本地,统一命名为
img_01.jpg、img_02.jpg - 把内容中的远程图片URL替换成本地相对路径
- 保存为
content.md,头部带上元数据(标题、来源URL、抓取时间)
同步到Obsidian不需要额外操作——只要把保存目录添加到Obsidian的Vault里就行。
踩坑清单
这些坑值得单独拎出来说,因为每一个都可能让你卡半小时:
- Firecrawl v2返回值变了:用
getattr()代替.get(),否则直接报错 - 微信长链接触发验证:优先使用短链接格式
- 标题提取要跳过元数据:抓取结果的第一行可能是「来源:xxx」而非真正的标题,需要做判断
- 图片下载要设Referer:不同平台对Referer的校验不同,比如小红书必须设置
Referer: https://www.xiaohongshu.com/,否则返回403
headers = {
'User-Agent': 'Mozilla/5.0...',
'Referer': 'https://www.xiaohongshu.com/'
}
成本与使用方式
整套方案的运行成本是零。Firecrawl免费额度每月500页对个人使用绑绑有余,Jina完全免费,Playwright只需要一次性安装Chromium。
使用方式是一行命令:
python url_reader.py https://mp.weixin.qq.com/s/xxxxx --save
内容和图片就自动保存到本地了。
延伸价值
这个工具本身解决的是「内容采集」问题,但稍加扩展就能衍生出不少方向:帮自媒体批量采集素材、监控竞品的公众号和小红书动态、采集行业内容做分析报告、自动构建垂直领域知识库。对于一人公司来说,把内容采集这个环节自动化之后,后续接上AI做摘要、分类、二次创作,就是一条完整的内容生产流水线。这个思路比工具本身更值得琢磨。