Firecrawl 将网页转换为 Markdown 格式,非常适合 LLM 应用。
- 它处理复杂性:代理、缓存、速率限制、被 JS 阻止的内容
- 处理动态内容:动态网站、JS 渲染的网站、PDF、图片
- 输出干净的 Markdown、结构化数据、截图或 HTML。
有关详细信息,请参阅Scrape Endpoint API 参考。
使用 Firecrawl 抓取 URL
/scrape 端点
用于抓取 URL 并获取其内容。
from firecrawl import FirecrawlApp
app = FirecrawlApp(api_key="fc-YOUR_API_KEY")
scrape_result = app.scrape_url('firecrawl.dev', params={'formats': ['markdown', 'html']})
print(scrape_result)
有关参数的更多详细信息,请参阅API 参考。
SDK 将直接返回数据对象。cURL 将返回如下所示的有效负载。
抓取格式
现在您可以选择希望输出的格式。您可以指定多个输出格式。支持的格式有:
- Markdown(markdown)
- HTML(html)
- 原始 HTML(rawHtml)(不做修改)
- 截图(screenshot 或 screenshot@fullPage)
- 链接(links)
- 提取(extract) - 结构化输出
输出键将匹配您选择的格式。
提取结构化数据
用于从抓取的页面中提取结构化数据。
from firecrawl import FirecrawlApp
from pydantic import BaseModel, Field
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"])
输出:
无模式提取(新功能)
现在可以通过仅传递prompt
给端点来无模式提取。LLM 会选择数据的结构。
curl -X POST https://api.firecrawl.dev/v1/scrape \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-d '{
"url": "https://docs.firecrawl.dev/",
"formats": ["json"],
"jsonOptions": {
"prompt": "从页面中提取公司使命。"
}
}'
输出:
提取对象
extract
对象接受以下参数:
schema
: 用于提取的模式。
systemPrompt
: 用于提取的系统提示。
prompt
: 用于无模式提取的提示。
与页面进行交互操作
Firecrawl 允许您在抓取内容之前对网页执行各种操作。这对于与动态内容互动、导航页面或访问需要用户互动的内容特别有用。
以下是如何使用操作导航到 google.com,搜索 Firecrawl,点击第一个结果,并截屏的示例。
重要的是几乎总是在其他操作前后使用wait
操作,以留出足够的时间让页面加载。
from firecrawl import FirecrawlApp
app = FirecrawlApp(api_key="fc-YOUR_API_KEY")
scrape_result = app.scrape_url('firecrawl.dev',
params={
'formats': ['markdown', 'html'],
'actions': [
{"type": "wait", "milliseconds": 2000},
{"type": "click", "selector": "textarea[title=\"Search\"]"},
{"type": "wait", "milliseconds": 2000},
{"type": "write", "text": "firecrawl"},
{"type": "wait", "milliseconds": 2000},
{"type": "press", "key": "ENTER"},
{"type": "wait", "milliseconds": 3000},
{"type": "click", "selector": "h3"},
{"type": "wait", "milliseconds": 3000},
{"type": "scrape"},
{"type": "screenshot"}
]
}
)
print(scrape_result)
{
"success": true,
"data": {
"markdown": "我们的首次Launch Week已经结束...",
"actions": {
"screenshots": [
"https://alttmdsdujxrfnakrkyi.supabase.co/storage/v1/object/public/media/screenshot-75ef2d87-31e0-4349-a478-fb432a29e241.png"
],
"scrapes": [
{
"url": "https://www.firecrawl.dev/",
"html": "<html><body><h1>Firecrawl</h1></body></html>"
}
]
},
"metadata": {
"title": "Home - Firecrawl",
"description": "Firecrawl爬取并将任何网站转换为干净的Markdown。",
"language": "en",
"keywords": "Firecrawl, Markdown, Data, Mendable, Langchain",
"robots": "follow, index",
"ogTitle": "Firecrawl",
"ogDescription": "将任何网站转换为LLM准备好的数据。",
"ogUrl": "https://www.firecrawl.dev/",
"ogImage": "https://www.firecrawl.dev/og.png?123",
"ogLocaleAlternate": [],
"ogSiteName": "Firecrawl",
"sourceURL": "http://google.com",
"statusCode": 200
}
}
}
有关操作参数的更多详细信息,请参阅API参考。
位置和语言
指定国家和首选语言以根据目标位置和语言偏好获取相关内容。
工作原理
当您指定位置设置时,Firecrawl 将使用适当的代理(如果有的话),并模拟相应的语言和时区设置。默认情况下,如果未指定位置,则设置为’US’。
要使用位置和语言设置,请在请求体中包含location
对象及其属性:
country
: ISO 3166-1 alpha-2 国家代码(例如,‘US’, ‘AU’, ‘DE’, ‘JP’)。默认为’US’。
languages
: 请求的首选语言和地区优先级数组。默认为指定位置的语言。
from firecrawl import FirecrawlApp
app = FirecrawlApp(api_key="fc-YOUR_API_KEY")
scrape_result = app.scrape_url('airbnb.com',
params={
'formats': ['markdown', 'html'],
'location': {
'country': 'BR',
'languages': ['pt-BR']
}
}
)
print(scrape_result)
批量抓取多个 URL
现在可以同时批量抓取多个 URL。它接收起始 URL 和可选参数作为参数。params 参数允许您指定批量抓取作业的其他选项,例如输出格式。
工作原理
这与/crawl
端点的工作原理非常相似。它提交一个批量抓取作业并返回一个作业 ID,用于检查批量抓取的状态。
SDK 提供同步和异步两种方法。同步方法将返回批量抓取作业的结果,而异步方法将返回一个作业 ID,您可以使用该 ID 来检查批量抓取的状态。
from firecrawl import FirecrawlApp
app = FirecrawlApp(api_key="fc-YOUR_API_KEY")
batch_scrape_result = app.batch_scrape_urls(['firecrawl.dev', 'mendable.ai'], {'formats': ['markdown', 'html']})
print(batch_scrape_result)
batch_scrape_job = app.async_batch_scrape_urls(['firecrawl.dev', 'mendable.ai'], {'formats': ['markdown', 'html']})
print(batch_scrape_job)
batch_scrape_status = app.check_batch_scrape_status(batch_scrape_job['id'])
print(batch_scrape_status)
如果您使用的是 SDK 中的同步方法,它将返回批量抓取作业的结果。否则,它将返回一个作业 ID,您可以使用该 ID 来检查批量抓取的状态。
同步方式
异步方式
然后,您可以通过调用 /batch/scrape/{id}
端点,使用作业 ID 检查批量抓取的状态。此端点应在作业仍在运行或作业完成后立即使用,因为批量抓取作业会在 24 小时后过期。