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.
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.
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)
Invocar batchScrape/batch_scrape devuelve los resultados completos cuando el lote finaliza.
{
"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!...",
"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"
}
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)
batchScrape/batch_scrape devuelve resultados completos:
{
"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 -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"]
}
}'
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:
- Obtén tu secreto de webhook en la pestaña Advanced de la configuración de tu cuenta
- Extrae la firma del encabezado
X-Firecrawl-Signature
- Calcula el HMAC-SHA256 del cuerpo sin procesar de la solicitud usando tu secreto
- 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.
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.