🔥 Firecrawl
抓取并转换任何网站为适合LLM使用的Markdown或结构化数据。由Mendable.ai和Firecrawl社区开发。包括强大的抓取、爬取和数据提取功能。
该仓库处于早期开发阶段。我们仍在将自定义模块合并到单一仓库中。目前尚未完全准备好用于全面的自托管部署,但您已经可以在本地运行。
什么是Firecrawl?
Firecrawl是一个API服务,它接受一个URL,爬取该URL并将其转换为干净的Markdown或结构化数据。我们爬取所有可访问的子页面,并为您提供每个页面的干净数据。无需站点地图。
Pst. 嘿,你,加入我们的stargazers :)
如何使用?
我们提供了一个易于使用的API,并有托管版本。您可以在这里找到演示环境和文档。如果您愿意,也可以自行托管后端。
- API
- Python SDK
- Node SDK
- Langchain 集成 🦜🔗
- Langchain JS 集成 🦜🔗
- Llama Index 集成 🦙
- Dify 集成
- Langflow 集成
- Crew.ai 集成
- Flowise AI 集成
- PraisonAI 集成
- Zapier 集成
- 想要一个SDK或集成?通过提交问题告诉我们。
如需本地运行,请参考这里的指南。
API Key
要使用API,您需要在Firecrawl上注册并获取API密钥。
爬取
用于爬取一个URL及其所有可访问的子页面。这会提交一个爬取任务并返回一个任务ID,用于检查爬取的状态。
curl -X POST https://api.firecrawl.dev/v0/crawl \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-d '{
"url": "https://mendable.ai"
}'
返回一个jobId
{ "jobId": "1234-5678-9101" }
检查爬取任务
用于检查爬取任务的状态并获取其结果。
curl -X GET https://api.firecrawl.dev/v0/crawl/status/1234-5678-9101 \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_API_KEY'
{
"status": "completed",
"current": 22,
"total": 22,
"data": [
{
"content": "原始内容",
"markdown": "# Markdown 内容",
"provider": "web-scraper",
"metadata": {
"title": "Mendable | AI for CX and Sales",
"description": "AI for CX and Sales",
"language": null,
"sourceURL": "https://www.mendable.ai/"
}
}
]
}
抓取
用于抓取一个URL并获取其内容。
curl -X POST https://api.firecrawl.dev/v0/scrape \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-d '{
"url": "https://mendable.ai"
}'
响应:
{
"success": true,
"data": {
"content": "原始内容",
"markdown": "# Markdown 内容",
"provider": "web-scraper",
"metadata": {
"title": "Mendable | AI for CX and Sales",
"description": "AI for CX and Sales",
"language": null,
"sourceURL": "https://www.mendable.ai/"
}
}
}
搜索 (测试版)
用于搜索网络,获取最相关的结果,抓取每个页面并返回Markdown。
curl -X POST https://api.firecrawl.dev/v0/search \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-d '{
"query": "firecrawl",
"pageOptions": {
"fetchPageContent": true // 如果想要快速获取SERP API结果则设为false
}
}'
{
"success": true,
"data": [
{
"url": "https://mendable.ai",
"markdown": "# Markdown 内容",
"provider": "web-scraper",
"metadata": {
"title": "Mendable | AI for CX and Sales",
"description": "AI for CX and Sales",
"language": null,
"sourceURL": "https://www.mendable.ai/"
}
}
]
}
智能提取 (测试版)
用于从抓取的页面中提取结构化数据。
curl -X POST https://api.firecrawl.dev/v0/scrape \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-d '{
"url": "https://www.mendable.ai/",
"extractorOptions": {
"mode": "llm-extraction",
"extractionPrompt": "根据页面上的信息,从模式中提取信息。",
"extractionSchema": {
"type": "object",
"properties": {
"company_mission": {
"type": "string"
},
"supports_sso": {
"type": "boolean"
},
"is_open_source": {
"type": "boolean"
},
"is_in_yc": {
"type": "boolean"
}
},
"required": [
"company_mission",
"supports_sso",
"is_open_source",
"is_in_yc"
]
}
}
}'
{
"success": true,
"data": {
"content": "原始内容",
"metadata": {
"title": "Mendable",
"description": "Mendable 允许您轻松构建 AI 聊天应用程序。通过一行代码即可随处部署。由 SideGuide 提供支持。",
"robots": "follow, index",
"ogTitle": "Mendable",
"ogDescription": "Mendable 允许您轻松构建 AI 聊天应用程序。通过一行代码即可随处部署。由 SideGuide 提供支持。",
"ogUrl": "https://mendable.ai/",
"ogImage": "https://mendable.ai/mendable_new_og1.png",
"ogLocaleAlternate": [],
"ogSiteName": "Mendable",
"sourceURL": "https://mendable.ai/"
},
"llm_extraction": {
"company_mission": "在您的技术资源上训练一个安全的 AI 来回答客户和员工的问题,从而减轻团队的负担。",
"supports_sso": true,
"is_open_source": false,
"is_in_yc": true
}
}
}
使用 Python SDK
安装 Python SDK
pip install firecrawl-py
爬取网站
from firecrawl import FirecrawlApp
app = FirecrawlApp(api_key="YOUR_API_KEY")
crawl_result = app.crawl_url('mendable.ai', {'crawlerOptions': {'excludes': ['blog/*']}})
# 获取 markdown
for result in crawl_result:
print(result['markdown'])
抓取 URL
要抓取单个 URL,请使用 scrape_url
方法。它接受 URL 作为参数,并返回抓取的数据作为字典。
url = 'https://example.com'
scraped_data = app.scrape_url(url)
从 URL 提取结构化数据
通过 LLM 提取,您可以轻松地从任何 URL 中提取结构化数据。我们支持 pydantic 模式以简化您的操作。以下是使用方法:
class ArticleSchema(BaseModel):
title: str
points: int
by: str
commentsURL: str
class TopArticlesSchema(BaseModel):
top: List[ArticleSchema] = Field(..., max_items=5, description="Top 5 stories")
data = app.scrape_url('https://news.ycombinator.com', {
'extractorOptions': {
'extractionSchema': TopArticlesSchema.model_json_schema(),
'mode': 'llm-extraction'
},
'pageOptions':{
'onlyMainContent': True
}
})
print(data["llm_extraction"])
查询搜索
执行网页搜索,获取顶部结果,提取每个页面的数据,并返回其 markdown。
query = 'What is Mendable?'
search_result = app.search(query)
使用 Node SDK
安装
要安装 Firecrawl Node SDK,您可以使用 npm:
npm install @mendable/firecrawl-js
用法
- 从 firecrawl.dev 获取 API 密钥
- 将 API 密钥设置为名为
FIRECRAWL_API_KEY
的环境变量,或将其作为参数传递给FirecrawlApp
类。
抓取 URL
要使用错误处理抓取单个 URL,请使用 scrapeUrl
方法。它接受 URL 作为参数,并返回抓取的数据作为字典。
try {
const url = "https://example.com";
const scrapedData = await app.scrapeUrl(url);
console.log(scrapedData);
} catch (error) {
console.error("抓取时发生错误:", error.message);
}
爬取网站
要使用错误处理爬取网站,请使用 crawlUrl
方法。它接受起始 URL 和可选参数作为参数。params
参数允许您为爬取任务指定附加选项,例如要爬取的最大页面数、允许的域名以及输出格式。
const crawlUrl = "https://example.com";
const params = {
crawlerOptions: {
excludes: ["blog/"],
includes: [], // 留空以包含所有页面
limit: 1000,
},
pageOptions: {
onlyMainContent: true,
},
};
const waitUntilDone = true;
const timeout = 5;
const crawlResult = await app.crawlUrl(
crawlUrl,
params,
waitUntilDone,
timeout
);
检查爬取状态
要使用错误处理检查爬取任务的状态,请使用 checkCrawlStatus
方法。它接受作业 ID 作为参数,并返回爬取任务的当前状态。
const status = await app.checkCrawlStatus(jobId);
console.log(status);
从 URL 提取结构化数据
通过 LLM 提取,您可以轻松地从任何 URL 中提取结构化数据。我们支持 zod 模式以简化您的操作。以下是使用方法:
import FirecrawlApp from "@mendable/firecrawl-js";
import { z } from "zod";
const app = new FirecrawlApp({
apiKey: "fc-YOUR_API_KEY",
});
// 定义用于提取内容的模式
const schema = z.object({
top: z
.array(
z.object({
title: z.string(),
points: z.number(),
by: z.string(),
commentsURL: z.string(),
})
)
.length(5)
.describe("Hacker News 上的前 5 个故事"),
});
const scrapeResult = await app.scrapeUrl("https://news.ycombinator.com", {
extractorOptions: { extractionSchema: schema },
});
console.log(scrapeResult.data["llm_extraction"]);
查询搜索
使用 search
方法,您可以在搜索引擎中搜索查询并获取顶部结果及每个结果的页面内容。该方法接受查询作为参数并返回搜索结果。
const query = "what is mendable?";
const searchResults = await app.search(query, {
pageOptions: {
fetchPageContent: true, // 获取每个搜索结果的页面内容
},
});
贡献
我们欢迎贡献!在提交拉取请求之前,请阅读我们的 贡献指南。
最终用户有责任在使用 Firecrawl 进行抓取、搜索和爬取时尊重网站的政策。用户被建议在发起任何抓取活动之前遵守适用的网站隐私政策和使用条款。默认情况下,Firecrawl 在爬取时会遵守网站的 robots.txt 文件中指定的指令。通过使用 Firecrawl,您明确同意遵守这些条件。
许可免责声明
本项目主要依据 GNU Affero 通用公共许可证 v3.0 (AGPL-3.0) 许可进行许可,具体内容详见本仓库根目录下的 LICENSE 文件。然而,本项目的某些组件是依据 MIT 许可证进行许可的。有关详细信息,请参阅这些特定目录中的 LICENSE 文件。
请注意:
- AGPL-3.0 许可证适用于除另有规定的项目的所有部分。
- SDK 和某些 UI 组件是依据 MIT 许可证进行许可的。有关详细信息,请参阅这些特定目录中的 LICENSE 文件。
- 在使用或贡献本项目时,请确保您遵守与您所使用的特定组件相关的适当许可条款。
有关特定组件的许可详情,请参阅各自目录中的 LICENSE 文件,或联系项目维护人员。