课程
Firecrawl 是一种专为 AI 工作流优化的新型网络爬虫。它允许开发者抓取页面、网站,甚至整个网络。凭借对 JavaScript 的支持、自动转换为 Markdown,以及与主流 LLM 框架的集成等功能,它能够有效简化传统网页抓取的复杂性。
在本文中,我不仅会介绍 Firecrawl 的主要功能,还将分享一些实用的高级技巧、生态集成,并提及若干真实应用场景,帮助您快速上手实践。
什么是 Firecrawl?
Firecrawl 是由 Mendable.ai 开发的一款 AI 驱动的网络爬虫。它是一项 API 服务,可抓取网站并将其转换为干净、可直接用于 LLM 的数据,如 Markdown、JSON 等。
与 BeautifulSoup 或 Puppeteer 等传统爬虫不同,Firecrawl 采用 AI 驱动的方法,能够理解页面语境并清晰提取主要内容,而不是盲目抓取、常常返回杂乱数据。它可以将整个网站转化为干净的 Markdown 或结构化数据,非常适合 LLM 任务。
Firecrawl 有 3 种核心模式,稍后我会详细介绍。一般而言,您会使用 scrape 模式抓取单个 URL,使用 crawl 模式抓取整个网站,使用 map 模式进行 URL 发现。
Firecrawl 的关键特性
Firecrawl 的突出之处在于:它无需站点地图即可通过智能导航机制工作;可处理大量 JavaScript 和动态网页内容;输出可为干净的 Markdown、HTML、JSON、截图等,使用灵活;内置代理、反爬与缓存机制;支持批处理并发,适配大规模作业;高度可定制,例如可排除特定标签、使用自定义请求头进行抓取、设置抓取深度等;并且能与 LangChain、LlamaIndex、CrewAI 等 LLM 框架良好集成;同时适用于企业场景,您可以设置速率限制、并发控制与可靠性。
如何设置 Firecrawl
Firecrawl 的妙处在于上手非常快。以下是在系统中安装的主要步骤:
API 密钥配置
- 在 firecrawl.dev 注册以获取 API 密钥。
- 安装 Python 客户端库:
pip install firecrawl
如果您使用 langchain,请使用
pip install firecrawl-py
- 通过环境变量安全存储 API 密钥:
import os
from firecrawl import FirecrawlApp
# Set your Firecrawl API key as an environment variable for security
api_key = os.getenv('FIRECRAWL_API_KEY')
# Create an instance of the FirecrawlApp class with your API key
app = FirecrawlApp(api_key=api_key)
基础抓取示例
您可以直接使用 .scrape_url() 方法完成首次抓取:
response = app.scrape_url(url=example.com', formats=['markdown'])
print(response)
此代码会将 firecrawl.dev 网页的主要内容以 Markdown 形式检索出来。
了解 Firecrawl 的模式与端点
Firecrawl 提供三种核心模式,用于定义抓取范围的广度。本节将逐一讲解。
Scrape 模式
Scrape 模式面向单个 URL,适合提取产品详情或新闻文章。通过 llm_extract 参数可启用基于模式(schema)的抽取。您需要做的是定义最终 JSON 的目标模式,初始化配置,并开始抓取:
from firecrawl import JsonConfig
from pydantic import BaseModel
# Define the expected data structure for the JSON extraction schema
class ExtractSchema(BaseModel):
company_mission: str
supports_sso: bool
is_open_source: bool
is_in_yc: bool
# Define the JSON configuration and set it to llm extraction mode
json_config = JsonConfig(
extractionSchema=ExtractSchema.model_json_schema(),
mode="llm-extraction",
pageOptions={"onlyMainContent": True}
)
# Scrape the URL, extract data, and format it into JSON
llm_extraction_result = app.scrape_url(
'https://firecrawl.dev',
formats=["json"],
json_options=json_config
)
print(llm_extraction_result)
这是另一类单 URL 抓取示例,这次使用基于选择器的抽取:
# Get a screenshot of the top of the overview page
scrape_result = app.scrape_url('firecrawl.dev',
formats=['markdown', 'html', "screenshot"],
actions=[
{"type": "wait", "milliseconds": 3000},
{"type": "click", "selector": "h1"},
{"type": "wait", "milliseconds": 3000},
{"type": "scrape"},
{"type": "screenshot"}
],
)
print(scrape_result)
该脚本先打开网站,等待 3000 毫秒,点击第一个 h1 选择器,再次等待,然后抓取并保存当前页面的截图。若出现超时错误,请尝试在超时参数之外同时增加等待时间。
Crawl 模式
Crawl 模式允许您在无需站点地图的情况下抓取整个网站,包括所有可访问的子页面。它会返回一个作业 ID 以跟踪进度,并在需要获取额外信息(如请求头与时间戳)时支持元数据检索;支持速率控制以限制访问频率;并可设置递归深度决定跟随多少层级的链接。爬虫的步骤如下:
- 首先,爬虫打开给定的 URL
- 对其进行抓取
- 扫描所有指向子页面的超链接,并为其分配独立的爬虫任务
- 重复上述步骤,直到达到设定的最大限制。
下面是使用 Python requests 的爬虫示例:
import requests
url = "https://api.firecrawl.dev/v1/crawl"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_KEY"
}
data = {
"url": "https://docs.firecrawl.dev", # site to crawl
"limit": 100, # max items
"scrapeOptions": {
"formats": ["markdown", "html"] # output formats
}
}
response = requests.post(url, headers=headers, json=data)
print(response.status_code)
print(response.json())
这段代码指示 Firecrawl 从 https://docs.firecrawl.dev 最多获取 100 个页面,并分别以 Markdown 与 HTML 格式返回每个页面,随后打印结果。
如需进一步了解 API,请查看我们的课程 Introduction to APIs in Python、代码演练 Working with APIs in Python,以及教程 Mastering Python APIs: A Comprehensive Guide to Building and Using APIs in Python。
Map 模式
Map 模式可让您输入一个网站,并以极高速度即时检索站内所有 URL。我们创建 /map 的原因正是如此:它能将单个 URL 转化为完整的网站地图。该模式非常适合在需要提示终端用户选择要抓取的链接时使用,或在需要快速发现站内全部 URL、借助搜索参数聚焦特定主题相关页面、或将抓取限制在特定页面时使用。
需要注意:由于该端点优先考虑速度,可能无法捕获所有链接。
# Map a website:
map_result = app.map_url('https://firecrawl.dev')
print(map_result)
这段代码指示 Firecrawl 发现 https://firecrawl.dev 页面中的所有链接,并将其列出。
Firecrawl 的真实应用
正如前文所述,Firecrawl 是一款可用于多种任务的多面手,在真实场景中非常实用。例如,抓取招聘网站或新闻网站以汇总最新职位或文章用于分析,或用于训练您的预测类机器学习模型。您还可以通过抓取的评论开展情感分析,例如收集来自电商或 Amazon 等点评网站的客户评价,用于分析情绪、指导业务决策。
这还可以与价格监测配合使用,例如跟踪多平台的产品价格以识别趋势或在降价时触发告警。此外,您可以利用 Firecrawl 抽取技术文档,用于训练或辅助 AI 代理,以提升其知识库;或将数据摄取到多代理 AI 流水线中,类似 CAMEL-AI 的做法。
它还可为检索增强生成(RAG)系统提供结构化的网页数据,从而提升模型表现并降低幻觉程度。
高级技巧与最佳实践
要最大化发挥 Firecrawl 的潜力,这里给出一些高级技巧与最佳实践:
-
通过
/extract端点基于提示或模式返回结构化数据,为您的 LLM 提取结构化数据;LLM 处理此类数据通常优于原始 HTML。 -
通过实现带指数退避的重试逻辑来处理错误与重试,从容应对短暂的 API 故障。
-
利用 Firecrawl 的异步抓取来提升性能,发起大型抓取而不阻塞您的应用,非常适合 Web 应用或服务。
-
使用
max_depth或exclude等参数过滤抓取范围,将其限定在特定子域或页面类型,按需减少无用数据。 -
使用 Python 工具验证并清洗抓取数据,例如做数据均衡、删除空值等。pandas、numpy、seaborn 等都很适合这些任务。若想进一步学习数据清洗,请参考我们的课程 Cleaning Data in Python。
Firecrawl 与传统抓取工具对比
Firecrawl 具备众多优势,使其在大多数情况下都是上佳之选,并在与 Scrapy、BeautifulSoup、Puppeteer 等传统抓取工具的对比中脱颖而出。它能轻松处理由 JavaScript 渲染的内容,而像 BeautifulSoup 这类工具则需要借助 Selenium 等附加工具,且常需手动检查。它内置代理轮换并能处理速率限制,较之 Scrapy 需要大量时间的手动配置,大幅缩短了搭建时间。此外,Firecrawl 的 LLM 抽取能力可提供结构化数据,这是多数传统工具所不具备的功能。
不过,在特定情况下传统工具可能更合适,例如您需要本地运行时,像 BeautifulSoup 这样的工具无需依赖 API 即可在本地执行,适合不希望使用云服务的用户。有时实现的便捷与高效会以极致定制化为代价,例如 Scrapy 可为高度可定制的抓取流水线提供细粒度控制。
集成与生态支持
Firecrawl 能与众多常见 LLM 框架良好集成,且具备稳健的生态支持,进一步增强其在 AI 工作流中的实用性。您可以通过 FirecrawlLoader 模块集成 LangChain,便捷地将网页数据引入 LangChain 流水线;也可与 LlamaIndex 配合使用,FirecrawlReader 支持加载网页数据用于索引与查询。Firecrawl 还是 CrewAI 框架中用于网站抓取的内置工具,并与 Flowise、Dify、CAMEL-AI 等众多框架广泛兼容。
定价方案与使用限制
Firecrawl 提供多种定价方案,按使用场景满足不同需求。请务必查看 Firecrawl 官方定价页面,以防信息变更。
- 免费层:包含有限额度,适合测试与小型项目。
- 爱好者层:以较低成本为个人或小团队提供更多额度。
- 标准、成长、企业层:提供递增额度、更高速率限制,以及每分钟自定义请求(RPM)等高级功能。
额度体系如下:
|
方案 |
额度 |
功能 |
最适合 |
|
Free |
Limited |
基础抓取、测试 |
初学者、小型项目 |
|
Hobby |
Moderate |
更多额度、标准功能 |
个人开发者 |
|
Standards |
High |
更高速率限制、高级功能 |
成长型团队 |
|
Growth |
Very High |
可扩展、自定义选项 |
大型项目 |
|
Enterprise |
Unlimited |
自定义 RPM、专属支持 |
高吞吐、企业级使用 |
结语
Firecrawl 在网页数据抽取方面具有颠覆性,尤其适用于 AI 应用。通过将网站转化为干净、结构化、可直接用于 LLM 的数据,它助力开发者更高效地构建智能系统。其易用性、丰富特性与广泛集成,使其成为从 RAG 工作流中的价格监测等各类任务的首选工具。
建议您先体验 Firecrawl 的免费层以测试其能力。欢迎加入 Firecrawl 的 GitHub 与 Discord 社区,获取更新、技巧与支持。
借助 Firecrawl,网页数据不再是难题,而是推动您 AI 创新的强大资产。
下一步,我推荐以下课程与代码演练:
我从事加速型 AI 系统的研发,面向去中心化数据与分布式工作负载,构建支持边缘智能的联邦式机器学习流水线。我的工作重点包括大模型、语音处理、计算机视觉、强化学习以及先进的机器学习拓扑结构。
常见问题
为什么我会遇到超时错误?
您应先检查是否正确使用了 API 密钥,然后调试网站是否能正确定位到您要抓取的部分。
Firecrawl 只使用 AI 驱动的检索吗?
不会,您可以使用多种检索方式,例如基于选择器和基于 LLM 的检索。
Firecrawl 能处理包含大量 JavaScript 的网站吗?
是的,Firecrawl 即使在动态网站上也能保持良好表现。
在什么情况下我会选择 BeautifulSoup 等传统工具而不是 FireCrawl?
BeautifulSoup 可本地运行、免费,且适合处理简单的 HTML 抓取。
我可以免费测试 Firecrawl 吗?
可以,作为测试用户,您每分钟的请求数是有限制的。
