Firecrawl rastrea sitios web de forma eficiente para extraer datos completos mientras sortea bloqueos. El proceso:
- Análisis de URL: Analiza el sitemap y recorre el sitio web para identificar enlaces
- Recorrido: Sigue los enlaces de forma recursiva para encontrar todas las subpáginas
- Scraping: Extrae el contenido de cada página, gestionando JS y los 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 inicio.
Se utiliza para rastrear una URL y todas las subpáginas accesibles. Envía un trabajo de rastreo y devuelve un ID de trabajo para comprobar el estado del rastreo.
De forma predeterminada, /crawl ignorará los enlaces de una página si no son descendientes de la URL que proporcionas. Por ejemplo, website.com/other-parent/blog-1 no se devolverá 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 punto de conexión /scrape están disponibles en Crawl mediante scrapeOptions
(JS) / scrape_options
(Python). Se aplican a cada página que el crawler scrapea: 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, esto devolverá un ID
para comprobar el estado del rastreo.
Si utilizas el SDK, consulta los métodos de abajo para entender el comportamiento de waiter frente a starter.
{
"success": true,
"id": "123-456-789",
"url": "https://api.firecrawl.dev/v2/crawl/123-456-789"
}
Consultar trabajo de rastreo
Se usa para comprobar el estado de un trabajo de rastreo y obtener su resultado.
Este punto de conexión solo funciona para rastreos que están en curso 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 grandes que superen los 10 MB, se proporciona el parámetro de URL next
. Debes solicitar esa URL para obtener los siguientes 10 MB de datos. Si el parámetro next
no aparece, significa que llegaste al final de los datos del rastreo.
El parámetro skip define el número máximo de resultados devueltos en cada bloque.
Los parámetros skip y next solo son relevantes cuando accedes a la API directamente. Si usas el SDK, nosotros nos encargamos y te 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)
# Check the status of the crawl
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")
# Inicia primero un rastreo
started = await firecrawl.start_crawl("https://firecrawl.dev", limit=5)
# Supervisa las actualizaciones (capturas) hasta alcanzar un estado final
async for snapshot in firecrawl.watcher(started.id, kind="crawl", poll_interval=2, timeout=120):
if snapshot.status == "completed":
print("LISTO", snapshot.status)
for doc in snapshot.data:
print("DOC", doc.metadata.sourceURL if doc.metadata else None)
elif snapshot.status == "failed":
print("ERR", 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 consultar la documentación completa de los webhooks, incluidos los tipos de eventos, la estructura del payload y ejemplos de implementación, visita la documentación de Webhooks.
Tipos de eventos:
crawl.started
- Cuando se inicia el rastreo
crawl.page
- Para cada página rastreada correctamente
crawl.completed
- Cuando finaliza el rastreo
crawl.failed
- Si el rastreo encuentra un error
Carga útil básica:
{
"success": true,
"type": "crawl.page",
"id": "crawl-job-id",
"data": [...], // Datos de la página para eventos 'page'
"metadata": {}, // Metadatos personalizados
"error": null
}
Para ver la configuración detallada de los webhooks, las prácticas recomendadas de seguridad y la solución de problemas, visita la documentación de webhooks.