Coleta em lote de várias URLs
Agora você pode coletar em lote várias URLs simultaneamente. A função recebe as URLs iniciais e parâmetros opcionais como argumentos. O argumento params permite especificar opções adicionais para a tarefa de coleta em lote, como os formatos de saída.
Funciona de forma muito semelhante ao endpoint /crawl. Você pode iniciar o lote e aguardar a conclusão ou iniciá-lo e lidar com a conclusão por conta própria.
batchScrape (JS) / batch_scrape (Python): inicia um job em lote e aguarda a conclusão, retornando os resultados.
startBatchScrape (JS) / start_batch_scrape (Python): inicia um job em lote e retorna o ID do job para que você possa fazer polling ou 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"]) # retorna o 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)
Chamar batchScrape/batch_scrape retorna os resultados completos quando o lote é concluído.
{
"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 inicial da documentação do Firecrawl!...",
"html": "<!DOCTYPE html><html lang=\"en\" class=\"js-focus-visible lg:[--scroll-mt:9.5rem]\" data-js-focus-visible=\"\">...",
"metadata": {
"title": "Crie um ‘chat com o site’ usando Groq Llama 3 | Firecrawl",
"language": "en",
"sourceURL": "https://docs.firecrawl.dev/learn/rag-llama3",
"description": "Aprenda a usar o Firecrawl, o Groq Llama 3 e o LangChain para criar um bot de ‘chat com o seu site’."
"ogLocaleAlternate": [],
"statusCode": 200
}
},
...
]
}
Chamar startBatchScrape/start_batch_scrape retorna
um ID de job que você pode acompanhar via getBatchScrapeStatus/get_batch_scrape_status, usando
o endpoint da API /batch/scrape/{id} ou webhooks. Os resultados do job ficam disponíveis via API por 24 horas após a conclusão. Depois desse período, você ainda pode visualizar o histórico e os resultados dos seus batch scrapes nos activity logs.
{
"success": true,
"id": "123-456-789",
"url": "https://api.firecrawl.dev/v2/batch/scrape/123-456-789"
}
Você também pode usar o endpoint de coleta em lote para extrair dados estruturados das páginas. Isso é útil se você quiser obter os mesmos dados estruturados de uma lista de URLs.
from firecrawl import Firecrawl
firecrawl = Firecrawl(api_key="fc-YOUR_API_KEY")
# Raspar vários sites:
batch_scrape_result = firecrawl.batch_scrape(
['https://docs.firecrawl.dev', 'https://docs.firecrawl.dev/sdks/overview'],
formats=[{
'type': 'json',
'prompt': 'Extraia o título e a descrição da página.',
'schema': {
'type': 'object',
'properties': {
'title': {'type': 'string'},
'description': {'type': 'string'}
},
'required': ['title', 'description']
}
}]
)
print(batch_scrape_result)
# Ou você pode usar o método start:
batch_scrape_job = firecrawl.start_batch_scrape(
['https://docs.firecrawl.dev', 'https://docs.firecrawl.dev/sdks/overview'],
formats=[{
'type': 'json',
'prompt': 'Extraia o título e a descrição da página.',
'schema': {
'type': 'object',
'properties': {
'title': {'type': 'string'},
'description': {'type': 'string'}
},
'required': ['title', 'description']
}
}]
)
print(batch_scrape_job)
# Em seguida, você pode usar o ID do job para verificar o status da raspagem em lote:
batch_scrape_status = firecrawl.get_batch_scrape_status(batch_scrape_job.id)
print(batch_scrape_status)
batchScrape/batch_scrape retorna resultados completos:
{
"status": "concluído",
"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": "Crie um 'chat com o site' usando Groq Llama 3 | Firecrawl",
"description": "Aprenda a usar Firecrawl, Groq Llama 3 e LangChain para criar um bot de 'chat com o seu site'."
}
},
...
]
}
startBatchScrape/start_batch_scrape retorna um ID de tarefa:
{
"success": true,
"id": "123-456-789",
"url": "https://api.firecrawl.dev/v2/batch/scrape/123-456-789"
}
Raspagem em lote com webhooks
Você pode configurar webhooks para receber notificações em tempo real conforme cada URL do seu lote é raspada. Isso permite processar os resultados imediatamente, em vez de esperar a conclusão de todo o 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": ["iniciado", "página", "concluído"]
}
}'
Tipos de eventos:
batch_scrape.started - Quando a raspagem em lote começa
batch_scrape.page - Para cada URL raspada com sucesso
batch_scrape.completed - Quando todas as URLs são processadas
batch_scrape.failed - Se a raspagem em lote encontrar um erro
Payload básico:
{
"success": true,
"type": "batch_scrape.page",
"id": "batch-job-id",
"data": [...], // Dados da página para eventos 'page'
"metadata": {}, // Your custom metadata
"error": null
}
Segurança: Verificando Assinaturas de Webhook
Toda requisição de webhook do Firecrawl inclui o cabeçalho X-Firecrawl-Signature contendo uma assinatura HMAC-SHA256. Sempre verifique essa assinatura para garantir que o webhook é autêntico e não foi adulterado.
Como funciona:
- Obtenha o segredo do seu webhook na aba Advanced das configurações da sua conta
- Extraia a assinatura do cabeçalho
X-Firecrawl-Signature
- Calcule o HMAC-SHA256 do corpo bruto da requisição usando o seu segredo
- Compare com o cabeçalho de assinatura usando uma função segura contra ataques de timing
Nunca processe um webhook sem verificar sua assinatura antes. O cabeçalho X-Firecrawl-Signature contém a assinatura no formato: sha256=abc123def456...
Para exemplos completos de implementação em JavaScript e Python, consulte a documentação de Segurança de Webhooks.
Para uma documentação completa sobre webhooks, incluindo payloads de eventos detalhados, configurações avançadas e solução de problemas, consulte a documentação de webhooks.