Firecrawl rastrea sitios web de forma eficiente para extraer datos completos mientras sortea bloqueos. El proceso:
- Análisis de URL: Examina el sitemap y rastrea el sitio web para identificar enlaces
- Recorrido: Sigue enlaces de manera recursiva para encontrar todas las subpáginas
- Extracción (scraping): Extrae contenido de cada página, gestionando JS y límites de tasa
- Salida: Convierte los datos a Markdown limpio o a un formato estructurado
Esto garantiza una recopilación exhaustiva de datos desde cualquier URL de partida.
Se utiliza para rastrear una URL y todas las subpáginas accesibles. Esto envía un trabajo de rastreo y devuelve un ID de trabajo para verificar el estado del rastreo.
De forma predeterminada, el rastreador ignorará los enlaces de una página si no son
descendientes directos de la URL que proporcionas. Así, website.com/other-parent/blog-1 no se
devolvería si rastreas website.com/blogs/. Si quieres incluir
website.com/other-parent/blog-1, usa el parámetro crawlEntireDomain
. Para
rastrear subdominios como blog.website.com al rastrear website.com, usa el
parámetro allowSubdomains
.
# pip install firecrawl-py
from firecrawl import Firecrawl
firecrawl = Firecrawl(api_key="fc-TU-API-KEY")
from firecrawl import Firecrawl
firecrawl = Firecrawl(api_key="fc-TU-API-KEY")
docs = firecrawl.crawl(url="https://docs.firecrawl.dev", limit=10)
print(docs)
Opciones de scraping en crawl
Todas las opciones del endpoint Scrape están disponibles en Crawl mediante scrapeOptions
(JS) / scrape_options
(Python). Se aplican a cada página que el crawler raspa: formatos, proxy, caché, acciones, ubicación, etiquetas, etc. Consulta la lista completa en la referencia de la API de Scrape.
import Firecrawl from '@mendable/firecrawl-js';
const firecrawl = new Firecrawl({ apiKey: 'fc-YOUR_API_KEY' });
// Crawl con opciones de scraping
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,
},
});
Si usas cURL o el método starter, se devolverá un ID
para verificar el estado del rastreo.
Si usas el SDK, consulta los métodos a continuación para conocer el comportamiento de waiter vs starter.
{
"success": true,
"id": "123-456-789",
"url": "https://api.firecrawl.dev/v2/crawl/123-456-789"
}
Consultar trabajo de rastreo
Se usa para verificar el estado de un trabajo de rastreo y obtener su resultado.
Este endpoint solo funciona para rastreos que están en progreso o que se han
completado recientemente.
estado = firecrawl.get_crawl_status("<crawl-id>")
print(estado)
La respuesta varía según el estado del rastreo.
Para respuestas incompletas o de gran tamaño que superen los 10 MB, se proporciona un parámetro de URL next
. Debes solicitar esta URL para obtener los siguientes 10 MB de datos. Si el parámetro next
no está presente, indica el final de los datos del rastreo.
El parámetro skip
define el número máximo de resultados incluidos en cada bloque de resultados devueltos.
Los parámetros skip
y next
solo son relevantes cuando se consume la API directamente.
Si usas el SDK, nos encargamos de esto por ti y devolveremos
todos los resultados de una vez.
{
"status": "en proceso de scraping",
"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 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
}
},
...
]
}
Hay dos maneras de usar el SDK:
- Rastrear y esperar (
crawl
):
- Espera a que el rastreo termine y devuelve la respuesta completa
- Gestiona la paginación automáticamente
- Recomendado para la mayoría de los casos de uso
from firecrawl import Firecrawl, ScrapeOptions
firecrawl = Firecrawl(api_key="fc-YOUR_API_KEY")
# Explora un sitio web:
crawl_status = firecrawl.crawl(
'https://firecrawl.dev',
limit=100,
scrape_options=ScrapeOptions(formats=['markdown', 'html']),
poll_interval=30
)
print(crawl_status)
La respuesta incluye el estado del rastreo y todos los datos extraídos:
success=True
status='completed'
completed=100
total=100
creditsUsed=100
expiresAt=datetime.datetime(2025, 4, 23, 19, 21, 17, tzinfo=TzInfo(UTC))
next=None
data=[
Document(
markdown='[Día 7 - Semana de lanzamiento III. Día de integraciones (del 14 al 20 de abril)](...',
metadata={
'title': '15 proyectos de web scraping con Python: de principiante a avanzado',
...
'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
}
),
...
]
- Iniciar y luego verificar el estado (
startCrawl
/start_crawl
):
- Devuelve de inmediato un ID de rastreo
- Permite verificar el estado manualmente
- Útil para rastreos de larga duración o lógica de sondeo 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)
# Comprueba el estado del rastreo
status = firecrawl.get_crawl_status(job.id)
print(status)
El método de Firecrawl basado en WebSocket, Crawl URL and Watch
, permite la extracción y el monitoreo de datos en tiempo real. Inicia un rastreo con una URL y personalízalo con opciones como límites de páginas, dominios permitidos y formatos de salida; ideal para necesidades de procesamiento de datos inmediatas.
import asyncio
from firecrawl import AsyncFirecrawl
async def main():
firecrawl = AsyncFirecrawl(api_key="fc-YOUR-API-KEY")
# Iniciar un rastreo primero
started = await firecrawl.start_crawl("https://firecrawl.dev", limit=5)
# Monitorear actualizaciones (snapshots) hasta estado terminal
async for snapshot in firecrawl.watcher(started.id, kind="crawl", poll_interval=2, timeout=120):
if snapshot.status == "completed":
print("COMPLETADO", snapshot.status)
for doc in snapshot.data:
print("DOC", doc.metadata.source_url if doc.metadata else None)
elif snapshot.status == "failed":
print("ERROR", snapshot.status)
else:
print("ESTADO", snapshot.status, snapshot.completed, "/", snapshot.total)
asyncio.run(main())
Puedes configurar webhooks para recibir notificaciones en tiempo real a medida que avanza el rastreo. Esto te permite procesar las páginas conforme se van extrayendo, en lugar de esperar a que finalice todo el rastreo.
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://tu-dominio.com/webhook",
"metadata": {
"any_key": "any_value"
},
"events": ["started", "page", "completed"]
}
}'
Para una documentación completa sobre webhooks, incluidos los tipos de eventos, la estructura del payload y ejemplos de implementación, consulta la documentación de webhooks.
Tipos de eventos:
crawl.started
- Cuando se inicia el rastreo
crawl.page
- Por cada página extraída correctamente
crawl.completed
- Cuando finaliza el rastreo
crawl.failed
- Si ocurre un error durante el rastreo
Carga útil básica:
{
"success": true,
"type": "crawl.page",
"id": "crawl-job-id",
"data": [...], // Datos de página para eventos 'page'
"metadata": {}, // Tus metadatos personalizados
"error": null
}
Para obtener información detallada sobre la configuración de webhooks, las prácticas recomendadas de seguridad y la resolución de problemas, visita la documentación sobre Webhooks.