Firecrawl:抓取适用于 LLM 的干净数据
众所周知,大语言模型 LLM 的训练离不开大量的数据,而互联网则是最大的数据来源之一,每一个网站每一个网页都包含着大量宝贵的数据。
然而,这些数据的形式五花八门,它们往往更适合给人类来阅读和操作,却不一定适合作为模型的输入。如何高效地从网站中提取有用信息,提取适用于 LLM 的干净数据,这影响着大模型的不断演进发展。Firecrawl 项目,就旨在为我们提供一种便捷的解决方案。
简介
Firecrawl 是一个能抓取网页并转换数据的 API 服务,其代码仓库地址为
https://github.com/mendableai/firecrawl。它的核心功能是接收一个 URL,然后对该 URL 对应的网站进行爬取,并将其转化为干净的 Markdown 格式或结构化数据。这一过程无需网站提供站点地图,它会自动爬取所有可访问的子页面,并根据每个页面提供干净的数据。
Firecrawl 提供了丰富的 SDK 支持,包括 Python、Node、Go、Rust 等,方便不同技术栈的开发者使用。无论是使用 Python 进行数据分析,还是使用 Node.js 开发 Web 应用,都可以轻松集成 Firecrawl 的功能。同时,Firecrawl 与众多低代码框架和 LLM 框架进行了集成,如 Dify、Langflow、Flowise AI 等,这使得非专业开发者也能够利用 Firecrawl 的功能来构建自己的应用。
Firecrawl 有以下功能和特性:
- 提供适用于 LLM 的数据格式:包括截图、结构化数据、截图、HTML、链接和元信息等
- 自动处理爬取难点:包括代理、反机器人机制、动态内容等
- 可扩展性:支持定制标签排除、自定义 header、最大爬取深度等等
- 解析媒体文件:包括 pdf、docx 和图片等
- 可靠性:对于多复杂的数据都能爬取到目标数据
使用
Firecrawl 提供了 Python、Node、Go、Rust 等语言的 SDK,这里我们选取 Python SDK 为例,首先安装 firecrawl-py:
pip install firecrawl-py
我们首先进行一个简单的爬取:
from firecrawl import FirecrawlApp
app = FirecrawlApp(api_key="fc-YOUR_API_KEY")
# Crawl a website:
crawl_status = app.crawl_url(
'https://firecrawl.dev',
params={
'limit': 100,
'scrapeOptions': {'formats': ['markdown', 'html']}
},
poll_interval=30
)
print(crawl_status)
如果使用的是 cURL 或 SDK 中的 async crawl 方法,就会返回一个 ID 用于异步查询爬取的状态:
crawl_status = app.check_crawl_status("<crawl_id>")
print(crawl_status)
{
"success": true,
"id": "123-456-789",
"url": "https://api.firecrawl.dev/v1/crawl/123-456-789"
}
爬取完成后,我们会得到以下的 Response 数据:
{
"status": "completed",
"total": 36,
"completed": 36,
"creditsUsed": 36,
"expiresAt": "2024-00-00T00:00:00.000Z",
"next": "https://api.firecrawl.dev/v1/crawl/123-456-789?skip=26",
"data": [
{
"markdown": "[Firecrawl Docs home page!...",
"html": "<!DOCTYPE html><html lang=\"en\" class=\"js-focus-visible lg:[--scroll-mt:9.5rem]\" data-js-focus-visible=\"\">...",
"metadata": {
"title": "Build a 'Chat with website' using Groq Llama 3 | Firecrawl",
"language": "en",
"sourceURL": "https://docs.firecrawl.dev/learn/rag-llama3",
"description": "Learn how to use Firecrawl, Groq Llama 3, and Langchain to build a 'Chat with your website' bot.",
"ogLocaleAlternate": [],
"statusCode": 200
}
},
...
]
}
可以看到,其中提供了数据的 markdown 格式、html 格式、以及一些元信息等。
如果仅仅需要爬取单个 URL,则可以使用 scrape_url 方法:
from firecrawl import FirecrawlApp
app = FirecrawlApp(api_key="fc-YOUR_API_KEY")
# Scrape a website:
scrape_result = app.scrape_url('firecrawl.dev', params={'formats': ['markdown', 'html']})
print(scrape_result)
对于 LLM 数据提取,Firecrawl 可以很便捷地从任意 URL 提取数据,并支持 pydantic:
from firecrawl import FirecrawlApp
from pydantic import BaseModel, Field
# Initialize the FirecrawlApp with your API key
app = FirecrawlApp(api_key='your_api_key')
class ExtractSchema(BaseModel):
company_mission: str
supports_sso: bool
is_open_source: bool
is_in_yc: bool
data = app.scrape_url('https://docs.firecrawl.dev/', {
'formats': ['json'],
'jsonOptions': {
'schema': ExtractSchema.model_json_schema(),
}
})
print(data["json"])
总结
Firecrawl 是为我们提供了一种便捷的方式来爬取网站并将其转化为可用的数据。其丰富的 SDK 支持和与多种框架的集成,使得开发者可以轻松地将其集成到自己的项目中。无论是进行数据分析、构建 Web 应用还是开发 AI 聊天应用,Firecrawl 都能发挥重要作用。
在应用方向上,Firecrawl 可以用于内容聚合、数据挖掘、知识图谱构建等领域。例如,在内容聚合方面,可以使用 Firecrawl 爬取多个网站的信息,并将其整理成统一的格式,方便用户阅读和使用;在数据挖掘方面,可以通过对爬取的数据进行分析,发现潜在的商业价值或研究价值;在知识图谱构建方面,可以将爬取的数据转化为结构化数据,构建知识图谱,为智能问答系统提供支持。