Firecrawl rastreia sites de forma eficiente para extrair dados completos enquanto dribla bloqueios. O processo:
- Análise de URL: Examina o sitemap e rastreia o site para identificar links
- Navegação: Segue links recursivamente para encontrar todas as subpáginas
- Raspagem: Extrai o conteúdo de cada página, lidando com JS e limites de taxa
- Saída: Converte os dados em markdown limpo ou em formato estruturado
Isso garante uma coleta abrangente de dados a partir de qualquer URL inicial.
Usado para rastrear uma URL e todas as subpáginas acessíveis. Isso cria uma tarefa de rastreamento e retorna um ID para acompanhar o status.
Por padrão, o rastreamento ignora sublinks de uma página se eles não forem filhos da URL fornecida. Assim, website.com/other-parent/blog-1 não será retornado se você rastrear website.com/blogs/. Se precisar de website.com/other-parent/blog-1, use o parâmetro crawlEntireDomain
. Para incluir subdomínios, como blog.website.com ao rastrear website.com, use o parâmetro allowSubdomains
.
# pip install firecrawl-py
from firecrawl import Firecrawl
firecrawl = Firecrawl(api_key="fc-YOUR-API-KEY")
from firecrawl import Firecrawl
firecrawl = Firecrawl(api_key="fc-SUA-API-KEY")
docs = firecrawl.crawl(url="https://docs.firecrawl.dev", limit=10)
print(docs)
Opções de scrape no crawl
Todas as opções do endpoint /scrape estão disponíveis no /crawl via scrapeOptions
(JS) / scrape_options
(Python). Elas se aplicam a cada página raspada pelo crawler: formatos, proxy, cache, ações, localização, tags etc. Veja a lista completa na Referência do endpoint /scrape.
import Firecrawl from '@mendable/firecrawl-js';
const firecrawl = new Firecrawl({ apiKey: 'fc-YOUR_API_KEY' });
// Crawl with scrape options
const crawlResponse = await firecrawl.crawl('https://example.com', {
limit: 100,
scrapeOptions: {
formats: [
'markdown',
{ type: 'json', schema: { type: 'object', properties: { title: { type: 'string' } } } }
],
proxy: 'auto',
maxAge: 600000,
onlyMainContent: true
}
});
Se você estiver usando cURL ou o método starter, será retornado um ID
para verificar o status do crawl.
Se você estiver usando o SDK, veja abaixo os métodos e o comportamento de waiter vs starter.
{
"success": true,
"id": "123-456-789",
"url": "https://api.firecrawl.dev/v2/crawl/123-456-789"
}
Usado para verificar o status de um job de crawl e obter seu resultado.
Este endpoint só funciona para crawls que estão em andamento ou que foram concluídos recentemente.
status = firecrawl.get_crawl_status("<crawl-id>")
print(status)
A resposta varia conforme o status do crawl.
Para respostas não concluídas ou grandes (acima de 10 MB), é fornecido um parâmetro de URL next
. Você deve requisitar essa URL para obter os próximos 10 MB de dados. Se o parâmetro next
não estiver presente, isso indica o fim dos dados do crawl.
O parâmetro skip define o número máximo de resultados retornados em cada bloco de resultados.
Os parâmetros skip e next só são relevantes ao acessar a API diretamente. Se você estiver usando o SDK, nós cuidamos disso para você e retornaremos todos os resultados de uma vez.
{
"status": "em andamento",
"total": 36,
"completed": 10,
"creditsUsed": 10,
"expiresAt": "2024-00-00T00:00:00.000Z",
"next": "https://api.firecrawl.dev/v2/crawl/123-456-789?skip=10",
"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 seu site'."
"ogLocaleAlternate": [],
"statusCode": 200
}
},
...
]
}
Existem duas maneiras de usar o SDK:
- Crawl e aguarde (
crawl
):
- Aguarda a conclusão do crawl e retorna a resposta completa
- Faz a paginação automaticamente
- Recomendado para a maioria dos casos de uso
from firecrawl import Firecrawl, ScrapeOptions
firecrawl = Firecrawl(api_key="fc-YOUR_API_KEY")
# Fazer crawl de um site:
crawl_status = firecrawl.crawl(
'https://firecrawl.dev',
limit=100,
scrape_options=ScrapeOptions(formats=['markdown', 'html']),
poll_interval=30
)
print(crawl_status)
A resposta inclui o status do crawl e todos os dados extraídos:
success=True
status='concluída'
completed=100
total=100
creditsUsed=100
expiresAt=datetime.datetime(2025, 4, 23, 19, 21, 17, tzinfo=TzInfo(UTC))
next=None
data=[
Document(
markdown='[Dia 7 - Launch Week III. Dia de Integrações — 14 a 20 de abril](...',
metadata={
'title': '15 projetos de web scraping em Python: do básico ao avançado',
...
'scrapeId': '97dcf796-c09b-43c9-b4f7-868a7a5af722',
'sourceURL': 'https://www.firecrawl.dev/blog/python-web-scraping-projects',
'url': 'https://www.firecrawl.dev/blog/python-web-scraping-projects',
'statusCode': 200
}
),
...
]
- Inicie e depois verifique o status (
startCrawl
/start_crawl
):
- Retorna imediatamente com um ID de crawl
- Permite verificar o status manualmente
- Útil para crawls de longa duração ou lógica de polling personalizada
from firecrawl import Firecrawl
firecrawl = Firecrawl(api_key="fc-YOUR-API-KEY")
job = firecrawl.start_crawl(url="https://docs.firecrawl.dev", limit=10)
print(job)
# Check the status of the crawl
status = firecrawl.get_crawl_status(job.id)
print(status)
O método do Firecrawl baseado em WebSocket, Crawl URL and Watch
, permite extrair e monitorar dados em tempo real. Inicie um crawl a partir de uma URL e personalize-o com opções como limite de páginas, domínios permitidos e formatos de saída — ideal para necessidades de processamento de dados imediatas.
import asyncio
from firecrawl import AsyncFirecrawl
async def main():
firecrawl = AsyncFirecrawl(api_key="fc-YOUR-API-KEY")
# Primeiro, inicie um crawl
started = await firecrawl.start_crawl("https://firecrawl.dev", limit=5)
# Acompanhe as atualizações (snapshots) até o status final
async for snapshot in firecrawl.watcher(started.id, kind="crawl", poll_interval=2, timeout=120):
if snapshot.status == "completed":
print("CONCLUÍDO", snapshot.status)
for doc in snapshot.data:
print("DOC", doc.metadata.sourceURL if doc.metadata else None)
elif snapshot.status == "failed":
print("ERRO", snapshot.status)
else:
print("STATUS", snapshot.status, snapshot.completed, "/", snapshot.total)
asyncio.run(main())
Você pode configurar webhooks para receber notificações em tempo real conforme o seu crawl avança. Isso permite processar as páginas à medida que são extraídas, em vez de esperar a conclusão de todo o crawl.
curl -X POST https://api.firecrawl.dev/v2/crawl \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-d '{
"url": "https://docs.firecrawl.dev",
"limit": 100,
"webhook": {
"url": "https://your-domain.com/webhook",
"metadata": {
"any_key": "any_value"
},
"events": ["iniciado", "página", "concluído"]
}
}'
Para documentação completa sobre webhooks, incluindo tipos de eventos, estrutura do payload e exemplos de implementação, consulte a documentação de Webhooks.
Tipos de evento:
crawl.started
- Quando o crawl é iniciado
crawl.page
- Para cada página extraída com sucesso
crawl.completed
- Quando o crawl é concluído
crawl.failed
- Se o crawl encontrar um erro
Payload básico:
{
"success": true,
"type": "crawl.page",
"id": "crawl-job-id",
"data": [...], // Dados da página para eventos "page"
"metadata": {}, // Seus metadados personalizados
"error": null
}
Para ver a configuração detalhada de webhooks, as melhores práticas de segurança e dicas de solução de problemas, acesse a documentação de Webhooks.