AI Skill推荐开源项目AIWeb Scraping

Firecrawl:让 AI 代理像人一样浏览网页

📅 2026-07-28

白物集的新闻采集管线每天从多个渠道抓取科技资讯,这个流程听起来简单,做起来全是坑。目标网站有 Cloudflare 防护、页面结构三天两头变、爬下来的 HTML 里 90% 是广告和无用 DOM 节点、最后还要把脏数据转成干净的 Markdown 喂给 AI 做分析。之前我们踩过好几次 Cloudflare 拦截的坑,甚至专门写了绕过策略文档来记录哪些源能直接访问、哪些需要走 Bing 国际版迂回采集。

Firecrawl 就是为这个场景设计的。一个开源 API,输入 URL,输出干净的 Markdown 或结构化数据。目前 157000+ GitHub Stars,TypeScript 编写,AGPL-3.0 协议。它由 Mendable.ai 团队开发,定位是「LLM 时代的网页数据入口」——不输出 HTML,只输出 AI 能直接消费的内容。

三个核心能力

智能爬虫,而非简单 HTTP 请求。 Firecrawl 内置无头浏览器(Playwright 驱动),可以执行 JavaScript、处理 SPA 页面、等待异步加载。普通爬虫拿不到的动态渲染内容,它能拿到。爬取结果自动转 Markdown,去除导航栏、页脚、广告等干扰元素。实测一个典型的科技新闻页面,Firecrawl 输出的 Markdown 只有原始 HTML 体积的 5%-10%,信息密度极高。

搜索 + 爬取二合一。 除了给 URL 抓内容,Firecrawl 还提供搜索接口:输入「hottest AI startup funding 2026」,它自动调用搜索引擎,抓取结果页中每条链接的内容,返回整合后的 Markdown 文档合集。这在做热点追踪时特别有用——一次调用替代手动搜 5-6 个网页再拼接。白物集的热点深度文章管线,目前需要先查知识卡片数据库,再逐条获取详情。如果换成 Firecrawl 搜索接口,可以直接从搜索到内容一步到位。

站点地图感知的全站爬取。 支持 crawl 模式:给一个根 URL,自动发现所有子页面,按站点地图路径递归爬取。对文档站和博客类网站,一次调用抓完整个站点,返回所有页面的 Markdown 映射。这个功能在做技术调研时尤其好用——想了解 Astro 文档的某个特性?直接 crawl docs.astro.build,拿到整站 Markdown,让 AI 快速检索。

在白物集的定位

白物集的知识卡片采集流程目前靠手动配置 RSS 源 + agent cron 逐个访问目标网站。这套流程有三个痛点:RSS 源在中国网络环境下大量不可达、部分网站没有 RSS 输出、页面结构变化导致解析器报错。

Firecrawl 可以直接嵌入这个流程解决以上问题:

替代 RSS 采集。 对不支持 RSS 的网站,用 Firecrawl 的 search 接口按关键词发现最新内容。比如每天搜索「Apple news 2026」抓取当天苹果相关报道,直接入库知识卡片。

省去格式转换。 爬取结果默认输出 Markdown,省去当前管线中 HTML→Markdown 的转换步骤——那些用 Python markdownify 库做转换时遇到的编码问题和标签丢失问题,全都不存在了。

反检测能力。 内置 User-Agent 轮换、请求间隔控制、Cloudflare 绕过等机制,减少被目标网站 ban 的概率。之前我们需要手动维护绕过 Cloudflare 的策略文档,Firecrawl 在底层已经处理了这部分。

适合什么场景

Firecrawl 最适合有两种需求的团队。

一是需要为 LLM 准备干净的网页内容。AI 代理不需要看 CSS 类名和广告代码,它只需要文章正文。Firecrawl 的 formats: ["markdown"] 选项直接输出 LLM 友好的格式。Hermes Agent 的 web 工具目前也走类似的 Markdown 转化思路,但如果需要批量采集,用一个 Firecrawl 实例比让 Agent 逐个加载页面高效得多。

二是需要批量采集结构化数据。它的 crawl 模式配合 Webhook 回调,适合建站级的数据迁移——比如把整个文档站从旧的 Docusaurus 搬到新的 Astro 项目。白物集的建站系列中,如果有站点迁移的实战场景,Firecrawl 会是第一步的首选工具。

不适合的场景:需要登录态的网页(Firecrawl 不支持 session 维护和 Cookie 管理的深度定制)、需要绕过强反爬机制的高价值商业数据(它是通用工具,不是反爬对抗工具)、每分钟几千次的超高频请求(自托管实例的并发能力受限于机器配置)。

快速上手

第一步:启动服务

git clone https://github.com/firecrawl/firecrawl.git
cd firecrawl
docker compose up

服务默认跑在 localhost:3002。首次启动会下载 Playwright 浏览器依赖,需要几分钟。

第二步:爬一个页面

curl -X POST http://localhost:3002/v1/scrape \
  -H 'Content-Type: application/json' \
  -d '{"url": "https://baiwuji.top", "formats": ["markdown"]}'

返回的 JSON 中 data.markdown 字段就是干净的页面内容。

第三步:搜索加爬取

curl -X POST http://localhost:3002/v1/search \
  -H 'Content-Type: application/json' \
  -d '{"query": "Apple Intelligence latest features", "scrapeOptions": {"formats": ["markdown"]}}'

一次调用完成搜索 + 内容提取,返回结果列表,每条包含标题、链接、Markdown 内容。

第四步:整站爬取

curl -X POST http://localhost:3002/v1/crawl \
  -H 'Content-Type: application/json' \
  -d '{"url": "https://docs.astro.build", "limit": 100}'

返回的 id 字段用于轮询爬取进度。也支持 Webhook 回调,爬完自动通知你的服务。

第五步:集成到管线

在采集脚本中调用 Firecrawl API,将返回的 Markdown 直接写入知识卡片数据库:

import requests, json

def fetch_to_card(url, category='科技前沿'):
    resp = requests.post('http://localhost:3002/v1/scrape',
        json={'url': url, 'formats': ['markdown']})
    data = resp.json()['data']
    card = {
        'title': data['metadata']['title'],
        'content': data['markdown'],
        'url': url,
        'category': category,
        'source': 'firecrawl'
    }
    # POST 到白物集知识卡片 API
    requests.post('https://ai.golfr20.cn/api/v1/knowledge-cards',
        json=card,
        headers={'x-api-key': 'your-ingest-api-key'})

局限

自托管版本依赖 Docker,单机部署时爬取速度受限于本地网络带宽和机器性能。云版本(firecrawl.dev)有免费额度,但需要 API Key 且请求有频率限制。AGPL-3.0 协议对商业闭源集成不算友好——如果要把 Firecrawl 嵌入商业产品,需要注意协议合规。但对白物集这类开源或个人项目,完全没有问题。

另外,Firecrawl 的灵活性也意味着它不便宜(资源开销):每个爬取请求都会启动无头浏览器实例,内存占用在 200MB-500MB 之间。如果只是简单抓静态页面,传统 requests + BeautifulSoup 更轻量。Firecrawl 的价值在于处理那些「简单工具搞不定」的页面——JS 渲染、反爬检测、复杂 DOM 结构。

如果你的采集管线还在用 requests + BeautifulSoup 手动拼接,且经常被动态页面和反爬机制卡住,Firecrawl 值得升级。

← OpenAI Presence 开启企业智能体时代 → AI 频道 Hermes Agent v0.19.0:响应提速 80% →