En esta página
LlamaIndex es el framework de referencia para RAG en producción, pero viene con readers de HTML que se desmoronan en sitios con mucho JavaScript y páginas protegidas por Cloudflare. Cámbialos por CrawlForge y tu pipeline de LlamaIndex manejará cualquier URL: HTML estático, SPA o muro anti-bot.
Esta guía muestra cómo usar el web scraping con LlamaIndex y CrawlForge como tu fuente de datos: desde loaders de una sola página hasta pipelines RAG completos y herramientas de agentes.
Índice
- Por qué LlamaIndex necesita un mejor lector web
- Requisitos previos
- Paso 1: Instala las dependencias
- Paso 2: Crea un lector de CrawlForge
- Paso 3: Indexa páginas web en vivo
- Paso 4: Consulta el índice
- Ejemplo completo: RAG de docs con actualizaciones en vivo
- Avanzado: herramientas de CrawlForge para agentes de LlamaIndex
- Solución de problemas
- Preguntas frecuentes
Por qué LlamaIndex necesita un mejor lector web
El SimpleWebPageReader y el BeautifulSoupWebReader integrados de LlamaIndex están bien para entradas de blog estáticas, pero fallan en:
- Contenido renderizado con JavaScript (apps de React, Vue, Angular)
- Páginas protegidas por Cloudflare / DataDome / Akamai (la mayoría de docs SaaS)
- Sitios que devuelven 403 a User-Agents genéricos
- Páginas donde el contenido principal está dentro de un hermano
<main>, no extraíble de forma trivial
CrawlForge resuelve los cuatro casos. Su herramienta extract_content usa un algoritmo de legibilidad afinado para páginas de artículos, docs y productos. stealth_mode maneja el anti-bot. scrape_with_actions ejecuta JavaScript. Las 20 herramientas devuelven texto o markdown limpio listo para chunking. Para entender por qué esto importa en RAG, consulta nuestra guía de pipelines RAG.
Requisitos previos
- Python 3.9+ --
python --version - LlamaIndex --
pip install llama-index-core llama-index-readers-web - Cuenta de CrawlForge -- gratis en crawlforge.dev/signup, 1.000 credits incluidos
- API key de OpenAI o Anthropic para las llamadas al LLM de LlamaIndex (o usa cualquier proveedor compatible)
Paso 1: Instala las dependencias
Exporta tus claves:
Paso 2: Crea un lector de CrawlForge
Los readers de LlamaIndex heredan de BaseReader y devuelven objetos Document. Aquí tienes un reader mínimo que envuelve el endpoint extract_content de CrawlForge:
Coste: 2 credits por URL con extract_content, 5 credits con stealth_mode.
Paso 3: Indexa páginas web en vivo
Conecta el reader a un pipeline estándar de LlamaIndex:
Ahora tienes un índice persistido de la API de Stripe creado a partir de docs en vivo. Coste: 6 credits (3 URLs x 2).
Paso 4: Consulta el índice
Ejemplo completo: RAG de docs con actualizaciones en vivo
Júntalo todo: un RAG de docs de Stripe que se refresca cada noche:
Coste del refresco nocturno: 10 credits (5 URLs x 2). En 30 días son 300 credits, holgadamente dentro del plan gratuito.
Avanzado: herramientas de CrawlForge para agentes de LlamaIndex
El sistema de agentes de LlamaIndex acepta definiciones de FunctionTool arbitrarias. Envuelve las llamadas a CrawlForge como herramientas y tu agente podrá hacer scraping bajo demanda:
Después pasa [scrape_tool, search_tool] a cualquier agente de LlamaIndex:
Desglose del coste en credits
| Operación | Herramienta | Credits |
|---|---|---|
| Ingerir una página estática | extract_content | 2 |
| Ingerir una página con mucho JS | scrape_with_actions | 5 |
| Ingerir una protegida por Cloudflare | stealth_mode | 5 |
| Búsqueda + scraping del agente (3 URLs) | search_web + 3x extract_content | 11 |
| Deep research completo | deep_research | 10 |
Solución de problemas
Document.text vacío en algunas URLs -- La página probablemente requiere JavaScript. Instancia con use_stealth=True o crea una variante del reader que llame a scrape_with_actions.
requests.exceptions.HTTPError: 429 -- Estás alcanzando el límite de velocidad de CrawlForge. Añade reintentos con backoff o divide las cargas masivas en lotes de 10 URLs.
La indexación de LlamaIndex es lenta -- Procesa en lotes las llamadas a tu reader con concurrent.futures.ThreadPoolExecutor (vinculado a E/S, el GIL no es un bloqueo). Lo habitual es un aumento de velocidad de 10x en 50+ URLs.
Faltan metadatos del Document -- El endpoint scrape_structured de CrawlForge no rellena title igual que lo hace extract_content. Usa extract_content para la ingesta de RAG; usa scrape_structured solo para la extracción de campos tipados.
El coste de embeddings se dispara -- LlamaIndex vuelve a generar embeddings en cada llamada a VectorStoreIndex.from_documents. Persiste con index.storage_context.persist() y carga con load_index_from_storage() para evitar trabajo repetido.
Próximos pasos
- Lee la guía de pipelines RAG para patrones de recuperación de extremo a extremo
- Explora otros frameworks en nuestra entrada sobre integración con LangChain
- Consulta los docs de primeros pasos para la API REST completa
- Compara proveedores de scraping en alternativa a Firecrawl
Empieza gratis con 1.000 credits en crawlforge.dev/signup. No se requiere tarjeta de crédito.