Firecrawl:让AI自己上网查资料
Firecrawl:让AI自己上网查资料
你是不是也这样过
需求来了:"把某某网站的数据抓下来。"
你打开熟悉的VS Code,新建一个Python文件,import requests,from bs4 import BeautifulSoup,一套连招行云流水。
然后你遇到了它在DOM里多层嵌套,小心翼翼地写find_all。
然后你遇到了反爬,加上User-Agent、加上Referer、加上延迟。
然后你发现目标网站是React SPA,requests只拿到一个空壳HTML,不得不请出Selenium。又是一通安装ChromeDriver、配置PATH、调headless参数。
等终于跑通了,你看着满屏的HTML标签开始犯难——导航栏、广告位、页脚、脚本标签混在一起,又要写后处理逻辑把正文清洗出来。
前前后后折腾半天,真正写业务逻辑的时间可能不到20%。
我就想问一句:这活儿非得咱们自己干吗?
Firecrawl:YC嫡系,GitHub顶流
Firecrawl就是冲着这个问题来的。这个项目由Y Combinator孵化,团队之前做过Mendable AI——一个被Snapchat、Coinbase、MongoDB等公司使用的对话式搜索产品。而Firecrawl的理念简单粗暴:把网页变成AI能直接吃的数据,其他都交给API。
截至2026年7月,Firecrawl在GitHub上已经拿到 149K+ Stars,稳居GitHub全站Top 100,是开发者社区里采用最广泛的AI爬取工具之一。开源协议核心部分采用AGPL-3.0,SDK是MIT,托管服务也同时提供。
它的核心卖点就一句话:Search + Scrape + Crawl一站搞定。
什么意思?你不需要再拼装各种工具了。搜索、单页提取、全站爬取、URL发现、页面交互、批量抓取、AI自主采集——全部封装成统一的API。一行调用,拿到的是干净的Markdown或结构化JSON,直接喂给LLM或者存库。
核心API:你的工具箱一次配齐
Firecrawl的核心能力通过一组API端点暴露,覆盖了从单页到全站、从被动提取到主动交互的全链路。
Search — 搜完就拿,不光是链接
传统的搜索API给你一堆标题+摘要,你得挨个点进去看。Firecrawl的/search不一样——你给一个查询和站点范围,它直接返回完整页面的Markdown内容,而不是摘要片段。
from firecrawl import Firecrawl
app = Firecrawl(api_key="fc-YOUR_API_KEY")
# 搜索 + 自动提取全文
result = app.search("Firecrawl best practices site:docs.firecrawl.dev")
# 返回: [{url, title, markdown, description}, ...]
这对AI Agent来说是质变。Agent不需要"先搜 -> 读摘要 -> 点开 -> 再读"来回折腾,一次调用就拿到了全部上下文。
Scrape — 单页抓取,95%的活它干了
给一个URL,返回Markdown、HTML、截图或者结构化JSON。Firecrawl官方宣称覆盖了 96%的网页(包括JavaScript重度渲染的SPA页面),对比一下:Puppeteer是79%,cURL只有75%。
背后的技术栈包括:自动代理轮换、反爬绕过、JavaScript渲染、智能等待、内容清洗。你完全不用关心这些。
doc = app.scrape("https://firecrawl.dev", formats=["markdown", "html"])
print(doc.markdown) # 干净的Markdown,导航广告已过滤
Crawl — 全站递归,自动发现
给一个起始URL,Firecrawl会递归发现所有子页面并爬取,支持设置最大页面数和深度过滤。返回一个异步job ID,SDK自动处理轮询。
docs = app.crawl("https://docs.firecrawl.dev", limit=50)
for doc in docs.data:
print(doc.metadata.source_url, doc.markdown[:100])
Map — 扫一眼,全站URL尽收眼底
输入一个域名,Map端点会快速返回该站点所有可访问的URL,支持关键词排序。对于了解网站结构、做SEO审计或者确定抓取范围都非常实用。
result = app.map("https://firecrawl.dev", search="pricing")
# 返回按"pricing"相关度排序的URL列表
Interact — 像人一样操作页面
这是V2引入的重磅功能。先Scrape一个页面拿到scrape_id,然后通过自然语言指令让Firecrawl帮你执行操作——点击按钮、搜索商品、填写表单、翻页,全部用文字描述就行。
result = app.scrape("https://amazon.com")
scrape_id = result.metadata.scrape_id
app.interact(scrape_id, prompt="Search for 'mechanical keyboard'")
app.interact(scrape_id, prompt="Click the first result and tell me the price")
操作过程还支持实时查看(liveViewUrl),像远程桌面一样能看到浏览器正在干什么。
Batch Scrape — 批量干活
一次提交多个URL,异步并行处理。适合定时跑批任务的场景。
Agent — 说句话,AI帮你搞定一切
这是Firecrawl最前沿的功能。你不需要提供URL,只需用自然语言描述需求,Agent会自主搜索、导航、提取数据。
result = app.agent(prompt="Find the pricing plans for Notion")
# Agent自主搜索 → 访问notion.so/pricing → 提取结构化结果
为什么它这么火?
说穿了就三点:
第一,省心。 你不用自己装Chrome,不用管ChromeDriver版本匹配,不用写User-Agent轮换策略,不用处理反爬机制。Firecrawl在云端全包了。
第二,干净。 输出直接就是Markdown或者JSON,不是HTML。AI不需要从一堆<div> <span>里扒正文,拿到的就是可以直接用的内容。
第三,全链路。 搜素、提取、交互、全站爬取、结构化提取,全部在一个API体系里完成。你不用在Scrapy、Selenium、SerpAPI、Jina之间做缝合怪了。
免费的永远是最香的
价格也是一个不得不提的优势。Firecrawl提供了慷慨的免费额度:
- Free Tier:1000积分/月,个人开发者和学习完全够用
- 自托管(Self-hosted):用Docker部署,不限量,完全免费
- Claude Code keyless free tier:从Claude Code等AI客户端使用时,不用API key也能用基础端点(有限速但不限制功能)
对于大多数个人项目,1000积分一个月真的够了。一次Scrape消耗1积分,Search也是1积分,一天30次——日常调研完全没问题。
跟Claude Code的搭配:一行命令搞定
如果你在用Claude Code(或者Cursor),Firecrawl的集成就一个字——爽。
npx -y firecrawl-cli@latest init --all --browser
就这一行命令,Firecrawl的Search、Scrape、Crawl、Interact能力就全部装到你的Agent里了。之后你在对话里让它"搜一下最新的React文档"或者"把某某页面的内容抓下来",它直接调用Firecrawl,不需要你手动写任何爬虫代码。
那browser-harness呢?
Claude Code生态里还有一个抓取工具叫browser-harness(通过Playwright启动真实浏览器)。这俩不冲突,是互补关系:
- Firecrawl:API调用,不需要本地启动浏览器,适合数据抓取场景。快、稳、省资源,99%的"我要这个网页的数据"场景用它就够了。
- browser-harness:会在本地启动一个Chromium实例,是真浏览器环境,适合需要交互的场景——比如你要登录一个网站、填表单、触发JS事件、查看控制台日志。
简单说:要数据,找Firecrawl;要操作浏览器,找browser-harness。 如果你只是拿数据,Firecrawl不仅更简单,还省掉了本地装Chrome的开销。
写在最后
以前,从网页上拿数据是一条又长又痛的流水线:
写代码 → 处理反爬 → 解析HTML → 清洗数据 → 格式化输出
每一步都有坑。每一步都要花时间。
现在,Firecrawl把这件事简化成了一句话:给一个URL(或一句话),拿回Markdown。
AI Agent不需要学爬虫,不需要懂反爬,不需要写解析逻辑。它只需要说一句"帮我把这个网站的内容拿下来",数据就在那里了,干净的、结构化的、可以直接用的。
这就是AI时代的基础设施——不是让AI去适应旧世界的工具,而是造一套新工具,让AI能像人一样自由地在互联网上获取信息。
而Firecrawl,就是这套新工具里不可或缺的一块拼图。