Firecrawl 实战:给 AI 智能体接上 AI 爬虫数据管线
你的 AI 智能体是不是经常这样:你问它「今天某竞品官网更新了什么」,它答「我的知识截止到某时间,无法获取最新信息」?根因是 Agent 没有「实时上网」的能力。Firecrawl 就是专为 Agent 设计的网页抓取 API——它把任意网页变成干净的 Markdown 或结构化 JSON,还能批量爬整站、处理登录态、自动反爬。本教程教你把 Firecrawl 接到 Agent 的工具箱里。
先搞懂:Firecrawl 解决什么痛点
直接用 LLM 的联网搜索,常有三个坑:返回的是零散片段、抓不到需要登录的页面、网页里塞满了导航和广告噪声。Firecrawl 在中间做了一层「清洗」:
| 能力 | 说明 | Agent 场景 |
|---|---|---|
| scrape | 单页抓取→干净 Markdown/JSON | 读一篇指定文档或公告 |
| crawl | 整站递归爬取 | 批量收集竞品所有产品页 |
| map | 只返回站点 URL 地图 | 先列清单再按需抓取,省 Token |
| extract | 按 schema 抽结构化字段 | 把价格/参数抽成表格直接用 |
Firecrawl 不是「控制浏览器点按钮」那种工具(那是 browser-use / 计算机操作类)。它是「内容获取与清洗」基础设施——适合「读」网页,不适合「操作」网页。两者互补。
Step 1:拿到 API Key
1. 打开 firecrawl.dev,用 GitHub 或邮箱注册
2. 进入 Dashboard → API Keys,点 Create Key
3. 复制形如 fc-xxxxxxxx 的密钥,存到环境变量
export FIRECRAWL_API_KEY="fc-你的密钥"
有免费额度,练手足够;量上来再按抓取页数付费。
Step 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 的「联网工具」
以 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)
Step 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 里挂载(无代码/少代码)
如果你用 OpenClaw 这类带 Skills 市场的框架,直接装现成技能;用 Dify 则走 HTTP 节点:
# OpenClaw:从技能市场安装现成抓取技能
openclaw plugins install clawhub:firecrawl
# Dify:在工具里添加「HTTP 请求」类型,
# 指向 Firecrawl 的 /v1/scrape 接口,
# Header 带 Authorization: Bearer 你的Key,
# Body 传 { "url": "{{输入}}", "formats": ["markdown"] }
Step 6:避坑与成本控制
| 坑 | 现象 | 解决 |
|---|---|---|
| 无脑 crawl 整站 | 额度秒光 | 先 map 再按需抓 |
| 重复抓取同页 | 浪费 Token | 加本地缓存,按 URL+哈希存 |
| 长文直接喂模型 | 超上下文 | 抓后先切片/摘要再入上下文 |
| Key 写死在代码 | 泄露风险 | 一律走环境变量 |
小结
给 Agent 接上 Firecrawl,等于给它配了一个「实时图书管理员」:要查最新公告、读竞品文档、汇总行业页面,它都能自己上网取干净的原文。配合本中心《MCP 记忆系统》《Agent 反馈闭环》两篇,你的 Agent 就能「抓得到、记得住、学得会」。下一步可以看《文档结构化抽取》,把抓回来的内容进一步变成表格。