Saltar al contenido principal

Raspado por lotes de múltiples URL

Ahora puedes raspar por lotes varias URL al mismo tiempo. Recibe las URL iniciales y parámetros opcionales como argumentos. El argumento params te permite especificar opciones adicionales para el trabajo de raspado por lotes, como los formatos de salida.

Cómo funciona

Es muy similar al funcionamiento del punto de conexión /crawl. Puedes iniciar el lote y esperar a que termine, o iniciarlo y gestionar tú mismo su finalización.
  • batchScrape (JS) / batch_scrape (Python): inicia un trabajo por lotes, espera a que finalice y devuelve los resultados.
  • startBatchScrape (JS) / start_batch_scrape (Python): inicia un trabajo por lotes y devuelve el ID del trabajo para que puedas hacer polling o usar webhooks.

Uso

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"])  # devuelve el 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)

Respuesta

Invocar batchScrape/batch_scrape devuelve los resultados completos cuando el lote finaliza.
Completado
{
  "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": "[Página principal de la documentación de Firecrawl![logotipo claro](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": "Crea un «chat con el sitio web» usando Groq Llama 3 | Firecrawl",
        "language": "en",
        "sourceURL": "https://docs.firecrawl.dev/learn/rag-llama3",
        "description": "Aprende a usar Firecrawl, Groq Llama 3 y LangChain para crear un bot de «chat con tu sitio web»."
        "ogLocaleAlternate": [],
        "statusCode": 200
      }
    },
    ...
  ]
}
Invocar startBatchScrape/start_batch_scrape devuelve un ID de tarea que puedes monitorear mediante getBatchScrapeStatus/get_batch_scrape_status, usando el endpoint de la API /batch/scrape/{id} o webhooks. Los resultados de la tarea están disponibles a través de la API durante 24 horas después de su finalización. Después de este período, aún puedes ver el historial y los resultados de tus ejecuciones de batch scrape en los activity logs.
{
  "success": true,
  "id": "123-456-789",
  "url": "https://api.firecrawl.dev/v2/batch/scrape/123-456-789"
}

Raspado por lotes con extracción estructurada

También puedes usar el punto de conexión de raspado por lotes para extraer datos estructurados de las páginas. Esto es útil si quieres obtener los mismos datos estructurados de una lista de URL.
from firecrawl import Firecrawl

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

# Extrae varios sitios web:
batch_scrape_result = firecrawl.batch_scrape(
    ['https://docs.firecrawl.dev', 'https://docs.firecrawl.dev/sdks/overview'], 
    formats=[{
        'type': 'json',
        'prompt': 'Extrae el título y la descripción de la página.',
        'schema': {
            'type': 'object',
            'properties': {
                'title': {'type': 'string'},
                'description': {'type': 'string'}
            },
            'required': ['title', 'description']
        }
    }]
)
print(batch_scrape_result)

# O puedes usar el método start:
batch_scrape_job = firecrawl.start_batch_scrape(
    ['https://docs.firecrawl.dev', 'https://docs.firecrawl.dev/sdks/overview'], 
    formats=[{
        'type': 'json',
        'prompt': 'Extrae el título y la descripción de la página.',
        'schema': {
            'type': 'object',
            'properties': {
                'title': {'type': 'string'},
                'description': {'type': 'string'}
            },
            'required': ['title', 'description']
        }
    }]
)
print(batch_scrape_job)

# Luego puedes usar el ID del job para comprobar el estado de la extracción por lotes:
batch_scrape_status = firecrawl.get_batch_scrape_status(batch_scrape_job.id)
print(batch_scrape_status)

Respuesta

batchScrape/batch_scrape devuelve resultados completos:
Completado
{
  "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": "Crea un ‘chat con el sitio web’ usando Groq Llama 3 | Firecrawl",
        "description": "Aprende a usar Firecrawl, Groq Llama 3 y LangChain para crear un bot de ‘chat con tu sitio web’."
      }
    },
    ...
  ]
}
startBatchScrape/start_batch_scrape devuelve un ID de tarea:
{
  "success": true,
  "id": "123-456-789",
  "url": "https://api.firecrawl.dev/v2/batch/scrape/123-456-789"
}

Raspado por lotes con webhooks

Puedes configurar webhooks para recibir notificaciones en tiempo real a medida que se rastrea cada URL de tu lote. Esto te permite procesar los resultados de inmediato en lugar de esperar a que finalice todo el lote.
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"]
      }
    }'

Referencia rápida

Tipos de eventos:
  • batch_scrape.started - Cuando comienza el scraping por lotes
  • batch_scrape.page - Para cada URL extraída correctamente
  • batch_scrape.completed - Cuando se procesan todas las URL
  • batch_scrape.failed - Si el scraping por lotes presenta un error
Carga útil básica:
{
  "success": true,
  "type": "batch_scrape.page",
  "id": "batch-job-id",
  "data": [...], // Datos de página para eventos 'page'
  "metadata": {}, // Your custom metadata
  "error": null
}

Seguridad: Verificación de firmas de webhooks

Cada solicitud de webhook de Firecrawl incluye un encabezado X-Firecrawl-Signature que contiene una firma HMAC-SHA256. Verifica siempre esta firma para asegurarte de que el webhook sea auténtico y no haya sido manipulado. Cómo funciona:
  1. Obtén tu secreto de webhook en la pestaña Advanced de la configuración de tu cuenta
  2. Extrae la firma del encabezado X-Firecrawl-Signature
  3. Calcula el HMAC-SHA256 del cuerpo sin procesar de la solicitud usando tu secreto
  4. Compáralo con el encabezado de firma utilizando una función segura frente a ataques de temporización
Nunca proceses un webhook sin verificar primero su firma. El encabezado X-Firecrawl-Signature contiene la firma en el formato: sha256=abc123def456...
Para ejemplos completos de implementación en JavaScript y Python, consulta la documentación de seguridad de webhooks.

Documentación completa

Para documentación completa sobre webhooks, incluidos payloads de eventos detallados, configuración avanzada y diagnóstico y resolución de problemas, consulta la documentación de webhooks.