用 Firecrawl 把整个互联网变成 AI 的知识库

摘要

训练好的大模型天生不了解"今天"------它的知识截止于训练数据,而真实世界在不停更新。Firecrawl 是一个开源的网页数据 API,专门解决这个缺口:它能把任意 URL 转换成干净的 Markdown 或结构化 JSON,让 AI 智能体实时获取互联网上的最新内容。无论是抓单页、爬整站还是按提示自主搜索,一个 API 全部搞定。


核心优势

为什么选 Firecrawl,而不是自己写爬虫?

自研爬虫的噩梦大家都懂:JS 渲染失败、反爬封 IP、验证码墙、动态加载......Firecrawl 把这些难题全包了,开发者只需要关心"我想要什么数据"。

优势 说明
覆盖率 96% 支持 JS 密集型页面,不依赖简单 HTTP 请求
速度极快 百万页面 P95 延迟仅 3.4 秒,适合实时场景
AI 直用格式 输出干净 Markdown / 结构化 JSON / 截图,减少 token 浪费
免运维 轮换代理、限速处理、JS 渲染全自动,零配置
Agent 原生 一条命令接入任何 MCP 客户端或 AI 智能体
多格式解析 支持网页托管的 PDF、DOCX 等文档
交互能力 可在抓取前执行点击、滚动、输入、等待等操作
完全开源 AGPL-3.0,可自托管,也可用 firecrawl.dev 云服务

与竞品相比,Firecrawl 官方基准测试显示其 web 覆盖率领先同类产品,且输出质量经过专门为 LLM 管道优化,无需二次清洗。


面向人群

最适合以下场景的开发者:

  • AI 应用开发者:需要给智能体注入实时网页知识,替代过时的训练数据
  • 数据工程师:批量采集竞品价格、行业动态、学术信息等结构化数据
  • RAG 系统构建者:把整站内容导入向量数据库,构建企业知识库
  • 自动化研究员:让 AI 自主搜索和归纳特定主题,无需手动查资料
  • 产品经理 / 独立开发者:快速抓取竞品功能、定价页做对比分析

不太适合的场景:需要登录后才能访问的付费内容(涉及法律与平台条款)、以及对 robots.txt 有严格限制的站点。Firecrawl 默认遵守 robots.txt,用户需自行确保合规。


快速上手

1. 获取 API Key

firecrawl.dev 注册账号,免费计划每月有足够的额度用于测试。

2. 安装 SDK

bash 复制代码
# Python
pip install firecrawl-py

# Node.js
npm install firecrawl

3. 抓取单个页面

最常见的用法------把任意 URL 转成 Markdown:

python 复制代码
from firecrawl import Firecrawl

app = Firecrawl(api_key="fc-YOUR_API_KEY")

# 抓取并输出 Markdown
result = app.scrape('https://example.com')
print(result.markdown)
javascript 复制代码
import { Firecrawl } from 'firecrawl';

const app = new Firecrawl({ apiKey: 'fc-YOUR_API_KEY' });

const doc = await app.scrape('https://example.com', { formats: ['markdown'] });
console.log(doc.markdown);

4. 搜索网页并获取正文

不只是搜索标题,直接拿到每个结果页的完整内容:

python 复制代码
results = app.search("2024年最佳 AI 编程工具", limit=5)

for r in results:
    print(r['url'])
    print(r['markdown'][:500])  # 截取前500字

5. 爬取整站

把整个文档站变成结构化数据集:

python 复制代码
docs = app.crawl("https://docs.example.com", limit=100)

for doc in docs.data:
    print(doc.metadata.source_url)
    print(doc.markdown[:200])

SDK 会自动轮询等待爬取完成,无需手动处理异步任务。


进阶用法

Agent 模式:告诉它"我要什么",它自己去找

最强大的功能之一。不需要知道 URL,直接描述需求:

python 复制代码
from firecrawl import Firecrawl
from pydantic import BaseModel, Field
from typing import List, Optional

app = Firecrawl(api_key="fc-YOUR_API_KEY")

class Competitor(BaseModel):
    name: str
    price: Optional[str] = Field(None, description="月付价格")
    free_tier: bool = Field(description="是否有免费计划")

class CompetitorList(BaseModel):
    competitors: List[Competitor]

# 让 Agent 自主搜索竞品定价
result = app.agent(
    prompt="找出 Notion、Obsidian、Logseq 的定价方案和免费层信息",
    schema=CompetitorList
)

print(result.data)

返回的是结构化数据,直接可以入库或传给下游 LLM。

交互式抓取:先操作,再提取

对于需要交互才能展示内容的页面,可以先模拟用户操作:

python 复制代码
# 先抓取页面,拿到 scrape_id
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")

# 此时再 scrape 就能拿到点击后的页面内容

接入 MCP 客户端(一行配置)

如果你在用 Claude Code、Cursor 或其他 MCP 兼容工具,只需一条命令安装:

bash 复制代码
npx -y firecrawl-cli@latest init --all --browser

重启智能体后,它就能直接调用 Firecrawl 的所有能力,无需额外编码。

或者在 mcp_config.json 中手动添加:

json 复制代码
{
  "mcpServers": {
    "firecrawl-mcp": {
      "command": "npx",
      "args": ["-y", "firecrawl-mcp"],
      "env": {
        "FIRECRAWL_API_KEY": "fc-YOUR_API_KEY"
      }
    }
  }
}

批量抓取:异步处理数千个 URL

python 复制代码
job = app.batch_scrape([
    "https://site1.com/page1",
    "https://site2.com/page2",
    # ...可以放数千个 URL
], formats=["markdown"])

for doc in job.data:
    print(doc.metadata.source_url, doc.markdown[:100])

站点地图发现

快速扫描一个网站有哪些 URL,再决定抓哪些页面:

python 复制代码
result = app.map("https://firecrawl.dev", search="pricing")
# 返回按"pricing"相关度排序的 URL 列表

开源与自托管

Firecrawl 核心代码以 AGPL-3.0 开源,可以完全自托管在私有服务器上。云服务版本 (firecrawl.dev) 在开源基础上额外提供了更高的并发上限、企业级 SLA 和一些高级功能。

对于数据隐私要求高的企业场景,自托管版本是更好的选择;对于个人项目和中小规模应用,云服务的免费层已经足够使用。