/extract 端点让你更轻松地从任意数量的 URL 或整个域名收集结构化数据。你只需提供一个 URL 列表(可选使用通配符,例如 example.com/*),再配上描述所需信息的提示词或 JSON 模式即可。Firecrawl 会负责爬取、解析与汇总,无论数据集大小如何。
Extract 的计费方式不同于其他端点。详情请参见 Extract 定价

使用 /extract

你可以从一个或多个 URL 提取结构化数据,支持使用通配符:
  • 单个页面
    示例:https://firecrawl.dev/some-page
  • 多个页面 / 整个域名
    示例:https://firecrawl.dev/*
当你使用 /* 时,Firecrawl 会自动在该域名内爬取并解析它能发现的所有 URL,然后提取所需的数据。此功能仍处于实验阶段;如遇问题,请发送邮件至 help@firecrawl.com

示例用法

from firecrawl import Firecrawl

firecrawl = Firecrawl(api_key="fc-YOUR-API-KEY")

schema = {
    "type": "object",
    "properties": {"description": {"type": "string"}},
    "required": ["description"],
}

res = firecrawl.extract(
    urls=["https://docs.firecrawl.dev"],
    prompt="提取该页面的描述",
    schema=schema,
)

print(res.data["description"])
关键参数:
  • urls:一个或多个 URL 的数组。支持通配符(/*)以进行更广泛的爬取。
  • prompt(可选,若无 schema 则必填):用自然语言描述所需数据,或说明数据应如何结构化。
  • schema(可选,若无 prompt 则必填):当已知 JSON 结构时使用的更严格定义。
  • enableWebSearch(可选):设为 true 时,提取可跟随链接跳出指定域名。
更多详情见 API Reference

响应(SDK)

JSON
{
  "success": true,
  "data": {
    "company_mission": "Firecrawl 是从网页提取数据的最简便方式。开发者通过一次 API 调用即可将 URL 稳定转换为适用于 LLM 的 Markdown 或结构化数据。",
    "supports_sso": false,
    "is_open_source": true,
    "is_in_yc": true
  }
}

作业状态与完成

当你提交一次提取作业(通过 API 或入门方法),会收到一个 Job ID。你可以用该 ID:
  • 获取作业状态:向 /extract/ 端点发送请求,查看作业是否仍在运行或已完成。
  • 等待结果:如果你使用默认的 extract 方法(Python/Node),SDK 会等待并返回最终结果。
  • 先启动再轮询:如果你使用启动方法——start_extract(Python)或 startExtract(Node),SDK 会立即返回一个 Job ID。使用 get_extract_status(Python)或 getExtractStatus(Node)检查进度。
此端点仅对进行中或最近完成(24 小时内)的作业有效。
以下是使用 Python、Node.js 和 cURL 检查提取作业状态的代码示例:
from firecrawl import Firecrawl

firecrawl = Firecrawl(
    api_key="fc-YOUR_API_KEY"
)

# 先启动一个提取任务
extract_job = firecrawl.start_extract([
    'https://docs.firecrawl.dev/*', 
    'https://firecrawl.dev/'
], prompt="从这些页面提取公司的使命和功能。")

# 获取该提取任务的状态
job_status = firecrawl.get_extract_status(extract_job.id)

print(job_status)
# 示例输出:
# id=None
# status='completed'
# expires_at=datetime.datetime(...)
# success=True
# data=[{ ... }]
# error=None
# warning=None
# sources=None

可能的状态

  • completed: 提取已成功完成。
  • processing: Firecrawl 仍在处理你的请求。
  • failed: 发生错误,数据未完整提取。
  • cancelled: 该任务已被用户取消。

处理中示例

JSON
{
  "success": true,
  "data": [],
  "status": "processing",
  "expiresAt": "2025-01-08T20:58:12.000Z"
}

完成示例

JSON
{
  "success": true,
  "data": {
      "company_mission": "Firecrawl 是从网页提取数据的最简便方式。开发者只需一次 API 调用,便可将 URL 可靠地转换为适用于 LLM 的 Markdown 或结构化数据。",
      "supports_sso": false,
      "is_open_source": true,
      "is_in_yc": true
    },
  "status": "已完成",
  "expiresAt": "2025-01-08T20:58:12.000Z"
}

无需 Schema 的提取

如果你不想定义严格的结构,只需提供一个 prompt。底层模型会自动为你选择结构,这在进行探索性或更灵活的请求时很有用。
from firecrawl import Firecrawl

# 使用你的 API 密钥初始化 FirecrawlApp
firecrawl = Firecrawl(api_key='your_api_key')

data = firecrawl.extract([
  'https://docs.firecrawl.dev/',
  'https://firecrawl.dev/'
], prompt="从页面中提取 Firecrawl 的使命(mission)。")
print(data)
JSON
{
  "success": true,
  "data": {
    "company_mission": "将网站转化为可直接用于 LLM 的数据。用从任意网站抓取的干净数据驱动你的 AI 应用。"
  }
}
在请求中将 enableWebSearch = true 启用后,抓取范围会扩展到所提供的 URL 集合之外,从而获取来自相关链接页面的支撑性或关联信息。 下面是一个示例:它提取有关行车记录仪的信息,并使用相关页面的数据来充实结果:
from firecrawl import Firecrawl

# 使用你的 API 密钥初始化 Firecrawl

firecrawl = Firecrawl(api_key='your_api_key')

data = firecrawl.extract([
'https://nextbase.com/dash-cams/622gw-dash-cam'
], prompt="提取最佳行车记录仪的相关信息,包括价格、功能、优缺点和评测。", enable_web_search=True)
print(data)
JSON
{
  "success": true,
  "data": {
    "dash_cams": [
      {
        "name": "Nextbase 622GW",
        "price": "$399.99",
        "features": [
          "4K video recording",
          "Image stabilization",
          "Alexa built-in",
          "What3Words integration"
        ],
        /* Information below enriched with other websites like 
        https://www.techradar.com/best/best-dash-cam found 
        via enableWebSearch parameter */
        "pros": [
          "Excellent video quality",
          "Great night vision",
          "Built-in GPS"
        ],
        "cons": ["Premium price point", "App can be finicky"]
      }
    ],
  }

该响应包含从相关页面收集的补充上下文,从而提供更全面、更准确的信息。

无需提供 URL 的提取

/extract 端点现已支持在不提供特定 URL 的情况下,基于提示提取结构化数据。适用于研究场景或在确切 URL 不确定时使用。目前处于 Alpha 阶段。
from pydantic import BaseModel

class ExtractSchema(BaseModel):
    company_mission: str


# Define the prompt for extraction
prompt = 'Extract the company mission from Firecrawl\'s website.'

# Perform the extraction
scrape_result = firecrawl.extract(prompt=prompt, schema=ExtractSchema)

print(scrape_result)

已知限制(Beta)

  1. 大规模站点覆盖
    目前尚不支持在单个请求中完整覆盖超大型网站(例如“Amazon 上的所有产品”)。
  2. 复杂逻辑查询
    类似“查找 2025 年的所有帖子”的请求可能无法稳定返回全部预期数据。更高级的查询能力正在开发中。
  3. 偶发不一致
    不同运行的结果可能有所差异,尤其是在非常大型或动态的网站上。通常能捕获核心信息,但可能存在一定差异。
  4. Beta 状态
    由于 /extract 仍处于 Beta,功能和性能将持续演进。欢迎提交问题与反馈,帮助我们改进。

使用 FIRE-1

FIRE-1 是一款 AI 代理,可增强 Firecrawl 的抓取能力。它能够控制浏览器 actions,并在复杂的网站结构中导航,从而实现超越传统抓取方式的全面数据提取。 对于需要在多个页面之间导航或与页面元素交互的复杂抽取任务,你可以通过 /extract 端点使用 FIRE-1 代理。 示例(cURL):
curl -X POST https://api.firecrawl.dev/v2/extract \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer YOUR_API_KEY' \
    -d '{
      "urls": ["https://example-forum.com/topic/123"],
      "prompt": "提取该论坛帖中的所有用户评论。",
      "schema": {
        "type": "object",
        "properties": {
          "comments": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "author": {"type": "string"},
                "comment_text": {"type": "string"}
              },
              "required": ["author", "comment_text"]
            }
          }
        },
        "required": ["comments"]
      },
      "agent": {
        "model": "FIRE-1"
      }
    }'
FIRE-1 已上线,目前处于预览可用状态。

计费与用量追踪

你可以在 /extract 定价页面 查看价格,并通过 仪表盘的 Extract 页面 监控用量。 有反馈或需要帮助?请发送邮件至 help@firecrawl.com