Firecrawl ofrece distintos tipos de proxy para ayudarte a hacer scraping en sitios web con diversos niveles de protección antibots. El tipo de proxy puede especificarse mediante el parámetro proxy.

Tipos de proxy

Firecrawl admite tres tipos de proxy:
  • basic: Proxy para extraer sitios con protección anti-bot nula o básica. Es rápido y suele funcionar.
  • stealth: Proxy sigiloso para extraer sitios con protecciones anti-bot avanzadas. Es más lento, pero más confiable en ciertos sitios.
  • auto: Firecrawl volverá a intentar automáticamente la extracción con un proxy sigiloso si falla el básico. Si el reintento con stealth tiene éxito, se cobrarán 5 créditos por la extracción. Si el primer intento con basic tiene éxito, solo se cobrará el costo regular.
Si no especificas un proxy, Firecrawl usará auto por defecto.

Uso del modo stealth

Al extraer datos de sitios web con protección anti-bot avanzada, puedes usar el modo de proxy stealth para mejorar la tasa de éxito.
from firecrawl import Firecrawl

firecrawl = Firecrawl(api_key='fc-YOUR-API-KEY')

# Choose proxy strategy: 'basic' | 'stealth' | 'auto'
doc = firecrawl.scrape('https://example.com', formats=['markdown'], proxy='auto')

print(doc.warning or 'ok')
Nota: Las solicitudes con proxy stealth cuestan 5 créditos por solicitud cuando se usan.

Usar Stealth como mecanismo de reintento

Un patrón común es intentar primero hacer scraping con la configuración de proxy predeterminada y luego reintentar con el modo Stealth si aparecen códigos de estado de error específicos (401, 403 o 500) en el campo metadata.statusCode de la respuesta. Estos códigos pueden indicar que el sitio web está bloqueando tu solicitud.
# pip install firecrawl-py

from firecrawl import Firecrawl

firecrawl = Firecrawl(api_key="YOUR_API_KEY")

# First try with basic proxy
try:
    content = firecrawl.scrape("https://example.com")
    
    # Check if we got an error status code
    status_code = content.get("metadata", {}).get("statusCode")
    if status_code in [401, 403, 500]:
        print(f"Got status code {status_code}, retrying with stealth proxy")
        # Retry with stealth proxy
        content = firecrawl.scrape("https://example.com", proxy="stealth")
    
    print(content["markdown"])
except Exception as e:
    print(f"Error: {e}")
    # Retry with stealth proxy on exception
    try:
        content = firecrawl.scrape("https://example.com", proxy="stealth")
        print(content["markdown"])
    except Exception as e:
        print(f"Stealth proxy also failed: {e}")
Este enfoque te permite optimizar el uso de créditos al emplear el modo Stealth solo cuando sea necesario.