> ## Documentation Index
> Fetch the complete documentation index at: https://firecrawl.web3doc.top/llms.txt
> Use this file to discover all available pages before exploring further.

# 提取

> 使用LLM从页面中提取结构化数据

## 介绍 `/extract`（开放测试版）

`/extract` 端点简化了从任意数量的URL或整个域名收集结构化数据的过程。提供URL列表，可选地包含通配符（例如，`example.com/*`），以及描述所需信息的提示或模式。Firecrawl处理爬取、解析和整理大数据或小数据集的细节。

## 使用 `/extract`

您可以从单个或多个URL（包括通配符）提取结构化数据：

* **单页**\
  示例：`https://firecrawl.dev/some-page`
* **多页 / 完整域名**\
  示例：`https://firecrawl.dev/*`

当您使用 `/*` 时，Firecrawl 将自动爬取并解析该域中所有可发现的URL，然后提取请求的数据。此功能为实验性质；如果遇到问题，请通过电子邮件 [help@firecrawl.dev](mailto:help@firecrawl.dev) 联系我们。

### 示例用法

<CodeGroup>
  ```python Python theme={null}
  from firecrawl import FirecrawlApp
  from pydantic import BaseModel, Field

  # 使用您的API密钥初始化FirecrawlApp
  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.extract([
    'https://docs.firecrawl.dev/*', 
    'https://firecrawl.dev/', 
    'https://www.ycombinator.com/companies/'
  ], {
      'prompt': '从页面中提取公司使命、是否支持SSO、是否开源以及是否在Y Combinator。',
      'schema': ExtractSchema.model_json_schema(),
  })
  print(data)
  ```

  ```js Node theme={null}
  import FirecrawlApp from '@mendable/firecrawl-js';
  import { z } from 'zod';

  const app = new FirecrawlApp({
    apiKey: 'fc-YOUR_API_KEY',
  });

  // 定义用于提取内容的架构
  const schema = z.object({
    company_mission: z.string(),
    supports_sso: z.boolean(),
    is_open_source: z.boolean(),
    is_in_yc: z.boolean(),
  });

  const scrapeResult = await app.extract(['https://docs.firecrawl.dev/*', 'https://firecrawl.dev/', 'https://www.ycombinator.com/companies/'], {
    prompt: '从页面中提取公司使命、是否支持SSO、是否开源以及是否在Y Combinator。',
    schema: schema,
  });

  if (!scrapeResult.success) {
    throw new Error(`抓取失败: ${scrapeResult.error}`);
  }

  console.log(scrapeResult.data);
  ```

  ```bash cURL theme={null}
  curl -X POST https://api.firecrawl.dev/v1/extract \
      -H 'Content-Type: application/json' \
      -H 'Authorization: Bearer YOUR_API_KEY' \
      -d '{
        "urls": [
          "https://firecrawl.dev/", 
          "https://docs.firecrawl.dev/", 
          "https://www.ycombinator.com/companies"
        ],
        "prompt": "提取公司使命，是否支持SSO，是否开源，以及是否在Y Combinator中。",
        "schema": {
          "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"
          ]
        }
      }'
  ```
</CodeGroup>

**关键参数：**

* **urls**：一个或多个URL的数组。支持用于更广泛爬取的通配符（`/*`）。
* **prompt**（除非没有模式，否则可选）：描述您想要的数据或指定您希望的数据结构的自然语言提示。
* **schema**（除非没有提示，否则可选）：如果您已经知道JSON布局，则可以提供一个更严格的结构。
* **enableWebSearch**（可选）：当设置为 `true` 时，提取可以跟随指定域之外的链接。

更多详情请参见[API参考](https://docs.firecrawl.dev/api-reference/endpoint/extract)。

### 响应（sdks）

```json JSON theme={null}
{
  "success": true,
  "data": {
    "company_mission": "Firecrawl是提取网页数据的最简单方式。开发者使用我们，通过一次API调用即可将URL可靠地转换为LLM就绪的Markdown或结构化数据。",
    "supports_sso": false,
    "is_open_source": true,
    "is_in_yc": true
  }
}
```

## 异步提取与状态检查

当您提交一个提取任务——无论是直接通过API还是通过SDK的异步方法——您将收到一个作业ID。您可以使用此ID进行以下操作：

* 检查作业状态：向 /extract/{ID} 端点发送请求，以查看作业是否仍在运行或已经完成。
* 自动轮询（默认SDK行为）：如果您使用默认的提取方法（Python/Node），SDK会自动为您轮询此端点，并在作业完成后返回最终结果。
* 手动轮询（异步SDK方法）：如果您使用异步方法——async\_extract（Python）或 asyncExtract（Node）——SDK会立即返回一个作业ID，您可以跟踪。使用 get\_extract\_status（Python）或 getExtractStatus（Node）按自己的计划检查作业进度。

<Note>
  此端点仅适用于正在进行中的作业或最近完成（24小时内）的作业。
</Note>

以下是使用Python、Node.js和cURL检查提取作业状态的代码示例：

<CodeGroup>
  ```python Python theme={null}
  from firecrawl import FirecrawlApp

  app = FirecrawlApp(
      api_key="fc-YOUR_API_KEY"
  )

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

  # 获取提取任务的状态
  job_status = app.get_extract_status(extract_job.job_id)

  print(job_status)
  # 示例输出：
  # {
  #     "status": "completed",
  #     "progress": 100,
  #     "results": [{
  #         "url": "https://docs.firecrawl.dev",
  #         "data": { ... }
  #     }]
  # }
  ```

  ```js Node theme={null}
  import FirecrawlApp from '@mendable/firecrawl-js';

  const app = new FirecrawlApp({
    apiKey: 'fc-YOUR_API_KEY',
  });

  // 首先启动一个提取任务
  const extractJob = await app.asyncExtract(['https://docs.firecrawl.dev/*', 'https://firecrawl.dev/'], {
    prompt: '从这些页面中提取公司的使命和功能。',
  });

  // 获取提取任务的状态
  const jobStatus = await app.getExtractStatus(extractJob.jobId);

  console.log(jobStatus);
  // 示例输出：
  // {
  //   status: "completed",
  //   progress: 100,
  //   results: [{
  //     url: "https://docs.firecrawl.dev",
  //     data: { ... }
  //   }]
  // }
  ```

  ```bash cURL theme={null}
  curl -X GET https://api.firecrawl.dev/v1/extract/<extract_id> \
      -H 'Content-Type: application/json' \
      -H 'Authorization: Bearer YOUR_API_KEY'
  ```
</CodeGroup>

### 可能的状态

* **completed**：提取成功完成。
* **pending**：Firecrawl仍在处理您的请求。
* **failed**：发生错误；数据未完全提取。
* **cancelled**：用户取消了作业。

#### 待定示例

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

#### 完成示例

```json JSON theme={null}
{
  "success": true,
  "data": {
      "company_mission": "Firecrawl是最简单的从网页提取数据的方法。开发者使用我们通过一次API调用，可靠地将URL转换为LLM准备的Markdown或结构化数据。",
      "supports_sso": false,
      "is_open_source": true,
      "is_in_yc": true
    },
  "status": "completed",
  "expiresAt": "2025-01-08T20:58:12.000Z"
}
```

## 无模式提取

如果您不想定义严格的结构，只需提供 `prompt`。底层模型将为您选择一种结构，这对于更具探索性或灵活性的请求非常有用。

<CodeGroup>
  ```python Python theme={null}
  from firecrawl import FirecrawlApp

  # 使用您的API密钥初始化FirecrawlApp
  app = FirecrawlApp(api_key='your_api_key')

  data = app.extract([
    'https://docs.firecrawl.dev/',
    'https://firecrawl.dev/'
  ], {
    'prompt': "从页面中提取Firecrawl的使命。"
  })
  print(data)
  ```

  ```js Node theme={null}
  import FirecrawlApp from '@mendable/firecrawl-js';

  const app = new FirecrawlApp({
    apiKey: 'fc-YOUR_API_KEY',
  });

  const scrapeResult = await app.extract(['https://docs.firecrawl.dev/', 'https://firecrawl.dev/'], {
    prompt: "Extract Firecrawl's mission from the page.",
  });

  if (!scrapeResult.success) {
    throw new Error(`Failed to scrape: ${scrapeResult.error}`);
  }

  console.log(scrapeResult.data);
  ```

  ```bash cURL theme={null}
  curl -X POST https://api.firecrawl.dev/v1/extract \
      -H 'Content-Type: application/json' \
      -H 'Authorization: Bearer YOUR_API_KEY' \
      -d '{
        "urls": [
          "https://docs.firecrawl.dev/",
          "https://firecrawl.dev/"
        ],
        "prompt": "从页面中提取Firecrawl的使命。"
      }'
  ```
</CodeGroup>

```json JSON theme={null}
{
  "success": true,
  "data": {
    "company_mission": "将网站转化为LLM准备就绪的数据。通过从任何网站爬取的干净数据，为您的AI应用提供动力。"
  }
}
```

## 使用网络搜索改善结果

在您的请求中设置 `enableWebSearch = true` 将扩展爬取范围，超越提供的URL集。这可以从链接的页面捕获支持或相关信息。

以下是提取关于行车记录仪信息并使用相关页面数据丰富结果的示例：

<CodeGroup>
  ```python Python theme={null}
  from firecrawl import FirecrawlApp

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

  data = app.extract([
  'https://nextbase.com/dash-cams/622gw-dash-cam'
  ], {
  'prompt': "提取关于最佳行车记录仪的详细信息，包括价格、功能、优缺点和评论。",
  'enableWebSearch': True # 启用网络搜索以获得更好的上下文
  })
  print(data)
  ```

  ```js Node theme={null}
  import FirecrawlApp from '@mendable/firecrawl-js';

  const app = new FirecrawlApp({
    apiKey: 'fc-YOUR_API_KEY',
  });

  const scrapeResult = await app.extract(['https://nextbase.com/dash-cams/622gw-dash-cam'], {
    prompt: '提取关于最佳行车记录仪的详细信息，包括价格、功能、优缺点和评论。',
    enableWebSearch: true, // 启用网络搜索以获得更好的上下文
  });

  if (!scrapeResult.success) {
    throw new Error(`抓取失败: ${scrapeResult.error}`);
  }

  console.log(scrapeResult.data);
  ```

  ```bash cURL theme={null}
  curl -X POST https://api.firecrawl.dev/v1/extract \
      -H 'Content-Type: application/json' \
      -H 'Authorization: Bearer YOUR_API_KEY' \
      -d '{
        "urls": ["https://nextbase.com/dash-cams/622gw-dash-cam"],
        "prompt": "提取关于最佳行车记录仪的详细信息，包括价格、功能、优缺点和评论。",
        "enableWebSearch": true
      }'
  ```
</CodeGroup>

### 带网络搜索的示例响应

```json JSON theme={null}
{
  "success": true,
  "data": {
    "dash_cams": [
      {
        "name": "Nextbase 622GW",
        "price": "$399.99",
        "features": [
          "4K视频录制",
          "图像稳定",
          "内置Alexa",
          "What3Words集成"
        ],
        /* Information below enriched with other websites like 
        https://www.techradar.com/best/best-dash-cam found 
        via enableWebSearch parameter */
        "pros": [
          "出色的视频质量",
          "优秀的夜视功能",
          "内置GPS"
        ],
        "cons": ["价格较高", "应用程序有时不稳定"]
      }
    ],
  }

```

响应包括从相关页面收集的额外上下文，提供了更全面和准确的信息。

## 已知限制（Beta）

1. **大规模站点覆盖**\
   一次请求中还不支持完全覆盖大型站点（例如，“亚马逊上的所有产品”）。

2. **复杂逻辑查询**\
   像“查找2025年的所有帖子”这样的请求可能无法可靠地返回所有预期数据。更高级的查询功能正在开发中。

3. **偶尔的不一致性**\
   结果可能会在不同运行间有所不同，特别是对于非常大的或动态的网站。通常它会捕获核心细节，但可能会出现一些变化。

4. **Beta状态**\
   由于 `/extract` 仍处于Beta阶段，功能和性能将继续发展。我们欢迎错误报告和反馈以帮助我们改进。

## 计费和使用跟踪

您可以在[提取登录页面定价页面](https://www.firecrawl.dev/extract#pricing)上查看我们的定价，并通过[仪表板上的提取页面](https://www.firecrawl.dev/app/extract)监控使用情况。

有反馈或需要帮助吗？请通过电子邮件 [help@firecrawl.dev](mailto:help@firecrawl.dev) 联系我们。
