核心设计:三层策略自动降级

没有哪个抓取方案能通吃所有网站,所以这个工具的架构是三层策略,依次尝试,前一层失败就自动切换到下一层:

  • 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

抓到内容后,处理流程是:

  1. 从内容中提取标题
  2. 创建以「日期_标题」命名的目录
  3. 用正则表达式提取所有图片URL(支持Markdown格式、直接URL、小红书图片、飞书图片等多种格式)
  4. 下载图片到本地,统一命名为 img_01.jpgimg_02.jpg
  5. 把内容中的远程图片URL替换成本地相对路径
  6. 保存为 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做摘要、分类、二次创作,就是一条完整的内容生产流水线。这个思路比工具本身更值得琢磨。