Firecrawl rastrea sitios web de forma eficiente para extraer datos completos mientras sortea bloqueos. El proceso:
  1. Análisis de URL: Analiza el sitemap y recorre el sitio web para identificar enlaces
  2. Recorrido: Sigue los enlaces de forma recursiva para encontrar todas las subpáginas
  3. Scraping: Extrae el contenido de cada página, gestionando JS y los límites de tasa
  4. 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.

Rastreo

punto de conexión /crawl

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.

Instalación

# pip install firecrawl-py

from firecrawl import Firecrawl

firecrawl = Firecrawl(api_key="fc-TU-API-KEY")

Uso

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
  }
});

Respuesta de la API

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)

Manejo de la respuesta

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![logo claro](https://mintlify.s3-us-west-1.amazonaws.com/firecrawl/logo/light.svg)!...",
      "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
      }
    },
    ...
  ]
}

Métodos del SDK

Hay dos maneras de usar el SDK:
  1. 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
    }
  ),
  ...
]
  1. 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)

WebSocket de rastreo

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())

Webhook de rastreo

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
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.

Referencia rápida

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.