教程中心进阶
进阶

Firecrawl 实战:给 AI 智能体接上 AI 爬虫数据管线

2026.07.19· 6 个步骤 · 17 分钟阅读· 🕸️ Firecrawl

你的 AI 智能体是不是经常这样:你问它「今天某竞品官网更新了什么」,它答「我的知识截止到某时间,无法获取最新信息」?根因是 Agent 没有「实时上网」的能力。Firecrawl 就是专为 Agent 设计的网页抓取 API——它把任意网页变成干净的 Markdown 或结构化 JSON,还能批量爬整站、处理登录态、自动反爬。本教程教你把 Firecrawl 接到 Agent 的工具箱里。

🕸️ 本教程适合:已经会搭基础 Agent(Dify / LangChain / OpenClaw 等),想给它加上「实时联网查资料」能力的开发者与进阶玩家。需要一点点 Python 或 Node 基础。

先搞懂:Firecrawl 解决什么痛点

直接用 LLM 的联网搜索,常有三个坑:返回的是零散片段、抓不到需要登录的页面、网页里塞满了导航和广告噪声。Firecrawl 在中间做了一层「清洗」:

能力说明Agent 场景
scrape单页抓取→干净 Markdown/JSON读一篇指定文档或公告
crawl整站递归爬取批量收集竞品所有产品页
map只返回站点 URL 地图先列清单再按需抓取,省 Token
extract按 schema 抽结构化字段把价格/参数抽成表格直接用

Firecrawl 不是「控制浏览器点按钮」那种工具(那是 browser-use / 计算机操作类)。它是「内容获取与清洗」基础设施——适合「读」网页,不适合「操作」网页。两者互补。

Step 1:拿到 API Key

1 注册并取钥匙
1. 打开 firecrawl.dev,用 GitHub 或邮箱注册
2. 进入 Dashboard → API Keys,点 Create Key
3. 复制形如 fc-xxxxxxxx 的密钥,存到环境变量
   export FIRECRAWL_API_KEY="fc-你的密钥"

有免费额度,练手足够;量上来再按抓取页数付费。
💡 和所有 API Key 一样:别写进代码仓库,用环境变量或密钥管理器。本教程全程用环境变量读取。

Step 2:三行代码抓一个网页

2 先跑通最小例子

Python 版(Node 同理,用官方 @mendable/firecrawl-js):

from firecrawl import FirecrawlApp

app = FirecrawlApp(api_key="你的FIRECRAWL_API_KEY")

# 抓单页,返回干净 Markdown
res = app.scrape_url(
    "https://example.com/product/a",
    params={"formats": ["markdown"]}
)
print(res["markdown"][:500])  # 前 500 字看看效果

返回的是去掉了导航/广告的纯正文 Markdown——这正是喂给 LLM 最省 Token、最不容易被噪声带偏的格式。直接把这段塞进 Agent 的上下文即可。

Step 3:把 Firecrawl 包成 Agent 的「联网工具」

3 让 Agent 自己决定要不要上网

以 LangChain 风格的 Tool 为例,把抓取封装成一个函数,Agent 会按需要自动调用:

from langchain.tools import tool
from firecrawl import FirecrawlApp

app = FirecrawlApp(api_key="你的FIRECRAWL_API_KEY")

@tool
def web_fetch(url: str) -> str:
    """当用户需要某个网页的最新内容时使用,输入网页 URL,返回正文。"""
    r = app.scrape_url(url, params={"formats": ["markdown"]})
    return r["markdown"]

# 把 web_fetch 加进 Agent 的 tools 列表
agent = initialize_agent(tools=[web_fetch, ...], llm=llm)
🔑 关键技巧:工具的「描述文字」写清楚「什么时候用、输入什么」。描述越准,Agent 越知道该不该调它,乱调用会白白烧 Token。

Step 4:批量爬整站 + 抽结构化字段

4 一次拿到一整张竞品表格

想对比竞品全线产品?用 crawl 抓全站,再用 extract 按 schema 抽字段:

# 1) 先 map 出所有 URL,避免无脑全爬
urls = app.map_url("https:// competitor.com/products")["links"]

# 2) 批量 scrape
pages = app.batch_scrape_urls(urls, params={"formats":["markdown"]})

# 3) 按 schema 抽结构化数据
schema = {
  "产品名": "string",
  "价格": "string",
  "核心卖点": "string"
}
data = app.extract([p["markdown"] for p in pages],
                   params={"schema": schema})

先用 map 列清单、再按需抓,比直接 crawl 整站省很多额度与 Token。竞品站几百页时这点尤其重要。

Step 5:在 OpenClaw / Dify 里挂载(无代码/少代码)

5 不会写代码也能用

如果你用 OpenClaw 这类带 Skills 市场的框架,直接装现成技能;用 Dify 则走 HTTP 节点:

# OpenClaw:从技能市场安装现成抓取技能
openclaw plugins install clawhub:firecrawl

# Dify:在工具里添加「HTTP 请求」类型,
# 指向 Firecrawl 的 /v1/scrape 接口,
# Header 带 Authorization: Bearer 你的Key,
# Body 传 { "url": "{{输入}}", "formats": ["markdown"] }
🚀 少代码方案适合快速验证;要稳定生产,还是 Step 3 的 Tool 封装最可控,能加限流、缓存和失败重试。

Step 6:避坑与成本控制

6 上线前对照
现象解决
无脑 crawl 整站额度秒光先 map 再按需抓
重复抓取同页浪费 Token加本地缓存,按 URL+哈希存
长文直接喂模型超上下文抓后先切片/摘要再入上下文
Key 写死在代码泄露风险一律走环境变量

小结

给 Agent 接上 Firecrawl,等于给它配了一个「实时图书管理员」:要查最新公告、读竞品文档、汇总行业页面,它都能自己上网取干净的原文。配合本中心《MCP 记忆系统》《Agent 反馈闭环》两篇,你的 Agent 就能「抓得到、记得住、学得会」。下一步可以看《文档结构化抽取》,把抓回来的内容进一步变成表格。