批量抓取多个 URL

现在你可以同时批量抓取多个 URL。该方法以起始 URL 和可选参数作为入参。通过 params 参数,你可以为批量抓取任务指定其他选项,例如输出 formats。

工作原理

它与 /crawl 端点的工作方式非常相似。你可以启动批处理并等待其完成,或先启动再自行处理完成流程。
  • batchScrape(JS)/ batch_scrape(Python):启动批处理作业并等待完成,返回结果。
  • startBatchScrape(JS)/ start_batch_scrape(Python):启动批处理作业并返回作业 ID,便于你轮询或使用 webhooks。

使用方法

from firecrawl import Firecrawl

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

start = firecrawl.start_batch_scrape([
    "https://firecrawl.dev",
    "https://docs.firecrawl.dev",
], formats=["markdown"])  # 返回 ID

job = firecrawl.batch_scrape([
    "https://firecrawl.dev",
    "https://docs.firecrawl.dev",
], formats=["markdown"], poll_interval=2, wait_timeout=120)

print(job.status, job.completed, job.total)

响应

  • 调用 batchScrape/batch_scrape 会在批处理完成后返回完整结果。
已完成
{
  "status": "completed",
  "total": 36,
  "completed": 36,
  "creditsUsed": 36,
  "expiresAt": "2024-00-00T00:00:00.000Z",
  "next": "https://api.firecrawl.dev/v2/batch/scrape/123-456-789?skip=26",
  "data": [
    {
      "markdown": "[Firecrawl 文档首页![浅色标志](https://mintlify.s3-us-west-1.amazonaws.com/firecrawl/logo/light.svg)!...",
      "html": "<!DOCTYPE html><html lang=\"en\" class=\"js-focus-visible lg:[--scroll-mt:9.5rem]\" data-js-focus-visible=\"\">...",
      "metadata": {
        "title": "使用 Groq Llama 3 构建“网站对话”功能 | Firecrawl",
        "language": "en",
        "sourceURL": "https://docs.firecrawl.dev/learn/rag-llama3",
        "description": "了解如何使用 Firecrawl、Groq Llama 3 和 LangChain 构建“与你的网站对话”的机器人。",
        "ogLocaleAlternate": [],
        "statusCode": 200
      }
    },
    ...
  ]
}
  • 调用 startBatchScrape/start_batch_scrape 会返回一个作业 ID。你可以通过 getBatchScrapeStatus/get_batch_scrape_status、API 端点 /batch/scrape/{id},或 webhooks 来跟踪进度。该端点用于进行中检查或在完成后立即查询,因为批处理作业会在 24 小时后过期
{
  "success": true,
  "id": "123-456-789",
  "url": "https://api.firecrawl.dev/v2/batch/scrape/123-456-789"
}

批量抓取并进行结构化提取

你也可以使用批量抓取端点从页面中提取结构化数据。如果你想从一组 URL 中获取相同的结构化数据,这将非常有用。
from firecrawl import Firecrawl

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

# 抓取多个站点:
batch_scrape_result = firecrawl.batch_scrape(
    ['https://docs.firecrawl.dev', 'https://docs.firecrawl.dev/sdks/overview'], 
    formats=[{
        'type': 'json',
        'prompt': '提取页面的标题和描述。',
        'schema': {
            'type': 'object',
            'properties': {
                'title': {'type': 'string'},
                'description': {'type': 'string'}
            },
            'required': ['title', 'description']
        }
    }]
)
print(batch_scrape_result)

# 或者可以使用 start 方法:
batch_scrape_job = firecrawl.start_batch_scrape(
    ['https://docs.firecrawl.dev', 'https://docs.firecrawl.dev/sdks/overview'], 
    formats=[{
        'type': 'json',
        'prompt': '提取页面的标题和描述。',
        'schema': {
            'type': 'object',
            'properties': {
                'title': {'type': 'string'},
                'description': {'type': 'string'}
            },
            'required': ['title', 'description']
        }
    }]
)
print(batch_scrape_job)

# 然后可使用作业 ID 查询批量抓取的状态:
batch_scrape_status = firecrawl.get_batch_scrape_status(batch_scrape_job.id)
print(batch_scrape_status)

响应

  • batchScrape/batch_scrape 返回完整结果:
已完成
{
  "status": "completed",
  "total": 36,
  "completed": 36,
  "creditsUsed": 36,
  "expiresAt": "2024-00-00T00:00:00.000Z",
  "next": "https://api.firecrawl.dev/v2/batch/scrape/123-456-789?skip=26",
  "data": [
    {
      "json": {
        "title": "使用 Groq Llama 3 打造“网站聊天”功能 | Firecrawl",
        "description": "了解如何结合使用 Firecrawl、Groq Llama 3 和 Langchain,构建一个可与您网站对话的聊天机器人。"
      }
    },
    ...
  ]
}
  • startBatchScrape/start_batch_scrape 返回任务 ID:
{
  "success": true,
  "id": "123-456-789",
  "url": "https://api.firecrawl.dev/v2/batch/scrape/123-456-789"
}

使用 webhooks 批量抓取

你可以配置 webhooks,在批量中的每个 URL 被抓取时接收实时通知。这样你可以立即处理结果,而无需等待整个批次完成。
cURL
curl -X POST https://api.firecrawl.dev/v2/batch/scrape \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer YOUR_API_KEY' \
    -d '{
      "urls": [
        "https://example.com/page1",
        "https://example.com/page2",
        "https://example.com/page3"
      ],
      "webhook": {
        "url": "https://your-domain.com/webhook",
        "metadata": {
          "any_key": "any_value"
        },
        "events": ["started", "page", "completed"]
      }
    }'
有关完整的 webhooks 文档(包括事件类型、负载结构和实现示例),请参见 Webhooks 文档

快速参考

事件类型:
  • batch_scrape.started - 批量抓取开始时
  • batch_scrape.page - 每个 URL 抓取成功时
  • batch_scrape.completed - 所有 URL 处理完成时
  • batch_scrape.failed - 批量抓取发生错误时
基础载荷:
{
  "success": true,
  "type": "batch_scrape.page",
  "id": "batch-job-id",
  "data": [...], // “page” 事件的页面数据
  "metadata": {}, // 你的自定义元数据
  "error": null
}
如需了解更详细的 webhook 配置、安全性最佳实践和故障排除,请参阅 Webhooks 文档