Introducción
En esta lección aprenderás cómo crear un chatbot RAG (Retrieval-Augmented Generation) que puede extraer información de sitios web completos de forma gratuita usando solicitudes HTTP y técnicas de web scraping en n8n.
¿Qué haremos?
Crearemos un flujo de trabajo que:
- Extrae URLs de un sitio web
- Obtiene el contenido HTML de todas las páginas
- Convierte el HTML a Markdown para facilitar el procesamiento
- Limpia la información innecesaria
- Almacena todo en una base de datos vectorial Pinecone
- Permite conversar con el contenido a través de un chatbot RAG
⚠️ Scraping Ético: Lo Primero Es Lo Primero
IMPORTANTE: Siempre debemos hacer scraping de forma ética y legal.
Cómo verificar si puedes hacer scraping de un sitio
Antes de extraer datos de cualquier sitio web, debes verificar si está permitido:
- Visita el sitio web que quieres analizar
- Añade
/robots.txt
al final de la URL - Revisa el contenido del archivo robots.txt
Ejemplos prácticos:
✅ Sitio que PERMITE scraping (Flowwise):
https://flowwise.ai/robots.txt
Resultado: «Allow: *» (Todo permitido)
❌ Sitios que NO PERMITEN scraping:
GitHub:
https://github.com/robots.txt
Resultado: «Disallow: *» (Todo prohibido)
YouTube:
https://youtube.com/robots.txt
Resultado: «Disallow: *» (Todo prohibido)
Regla de oro
Si un sitio web prohíbe el scraping en su archivo robots.txt, NO lo hagas. Respeta siempre estas reglas.
Arquitectura del Sistema
Nuestro sistema consta de dos flujos de trabajo principales:
Flujo 1: Extracción y Procesamiento
- Formulario de entrada – Donde introduces la URL
- Normalización de URLs – Limpia y estandariza la URL
- Verificación de robots.txt – Comprueba permisos
- Extracción de sitemap – Encuentra todas las URLs del sitio
- Solicitudes HTTP – Obtiene el contenido HTML
- Conversión a Markdown – Simplifica el contenido
- Limpieza de datos – Elimina información innecesaria
- Almacenamiento vectorial – Guarda en Pinecone
Flujo 2: Chatbot RAG
- Interfaz de chat – Donde haces preguntas
- Búsqueda vectorial – Encuentra contenido relevante
- Generación de respuestas – Usa GPT para responder
Paso a Paso: Cómo Funciona el Scraping
1. Normalización de URLs
El primer nodo usa GPT-4o Mini para limpiar la URL:
- Añade
https://
si no está presente - Elimina
www.
innecesario - Remueve rutas, consultas y parámetros
- Convierte a minúsculas
- Preserva subdominios
Ejemplo de transformación:
Entrada: www.ejemplo.com/pagina?param=valor
Salida: https://ejemplo.com
2. Verificación de Robots.txt
El sistema busca el archivo robots.txt en la URL base:
https://sitio.com/robots.txt
Este archivo contiene:
- User-agent: Qué bots pueden acceder
- Allow/Disallow: Qué se puede o no extraer
- Sitemap: Ubicación del mapa del sitio
3. Extracción del Sitemap
El sitemap es crucial porque nos da una lista completa de URLs para extraer.
Tipos de sitemap que el sistema maneja:
sitemap.xml
– Formato estándarsitemap_index.xml
– Índice de múltiples sitemapssitemap.json
– Formato JSON alternativosite.map.xml
– Variante de nomenclatura
Dos estructuras posibles:
Estructura Simple (URLs directas):
<urlset>
<url>
<loc>https://sitio.com/pagina1</loc>
</url>
<url>
<loc>https://sitio.com/pagina2</loc>
</url>
</urlset>
Estructura Categorizada (XMLs anidados):
<sitemapindex>
<sitemap>
<loc>https://sitio.com/categoria1.xml</loc>
</sitemap>
<sitemap>
<loc>https://sitio.com/categoria2.xml</loc>
</sitemap>
</sitemapindex>
4. Procesamiento Diferenciado
El sistema detecta automáticamente el tipo de estructura:
Para URLs Directas:
- Extrae todas las URLs del sitemap
- Hace solicitudes HTTP a cada URL
- Procesa el HTML directamente
Para Categorías XML:
- Extrae los enlaces a XMLs de categorías
- Hace solicitudes HTTP a cada XML de categoría
- Extrae las URLs de cada categoría
- Hace solicitudes HTTP a todas las URLs encontradas
5. Conversión y Limpieza
Una vez obtenido el HTML:
- Conversión a Markdown – Elimina etiquetas HTML innecesarias
- Eliminación de ruido – Remueve elementos como menús, footers, ads
- Fragmentación – Divide el contenido en chunks manejables
- Embeddings – Convierte texto a vectores numéricos
6. Almacenamiento en Pinecone
Los datos procesados se almacenan en Pinecone con:
- Embeddings OpenAI (text-embedding-3-small)
- Fragmentación recursiva para optimizar búsquedas
- Metadatos que incluyen URL fuente y título
Configuración del Chatbot RAG
Componentes del agente:
- Prompt del sistema:
Eres un asistente útil para FlowWise, LangChain y n8n. Tienes acceso a una base de datos vectorial con información sobre estos temas. Úsala para responder preguntas precisas.
- Memoria de ventana: Mantiene contexto de la conversación
- Modelo de chat: GPT-4 Omni para respuestas
- Retriever vectorial: Top-K=4 para encontrar contenido relevante
- Embeddings: Mismos que para almacenamiento (consistencia)
Ejemplos Prácticos
Ejemplo 1: Flowwise (Estructura Simple)
URL: https://flowwise.ai
Robots.txt: ✅ Permitido
Sitemap: URLs directas
Resultado: 4 registros en Pinecone
Capacidad: Responde preguntas sobre precios, características
Ejemplo 2: LangChain (Sin Robots.txt)
URL: https://langchain.com
Robots.txt: ❌ No existe (pero sitemap sí)
Sitemap: 37 URLs directas
Resultado: 131 registros en Pinecone
Capacidad: Responde sobre LangSmith, APIs, integraciones
Ejemplo 3: n8n (Estructura Compleja)
URL: https://n8n.io
Robots.txt: ✅ Permitido
Sitemap: Categorías XML (12 categorías)
URLs extraídas: 57+ páginas
Resultado: 452 registros en Pinecone
Capacidad: Responde sobre integraciones, workflows, APIs
Flujo de Datos Completo
URL de entrada
↓
Normalización de URL
↓
Verificación robots.txt
↓
┌─────────────────┐
│ ¿Tiene robots? │
└─────────────────┘
↓ ↓
Sí No
↓ ↓
Extrae sitemap Busca sitemap
del robots.txt directamente
↓ ↓
└─────┬─────┘
↓
Solicitud HTTP
al sitemap
↓
┌─────────────────────┐
│ ¿URLs o categorías? │
└─────────────────────┘
↓ ↓
URLs directas Categorías XML
↓ ↓
Extraer URLs Extraer XMLs
↓ ↓
└─────┬─────────┘
↓
Solicitudes HTTP
a todas las URLs
↓
Conversión a
Markdown
↓
Limpieza de
contenido
↓
Fragmentación
de texto
↓
Generación de
embeddings
↓
Almacenamiento
en Pinecone
↓
Chatbot RAG
listo para usar
Consejos para el Éxito
1. Verificación Previa
- Siempre revisa robots.txt antes de hacer scraping
- Respeta los límites de velocidad implícitos
- No sobrecargues los servidores con demasiadas solicitudes simultáneas
2. Gestión de Errores
- Implementa reintentos para solicitudes fallidas
- Maneja timeouts adecuadamente
- Registra errores para debugging
3. Optimización de Contenido
- Ajusta los parámetros de fragmentación según tu contenido
- Experimenta con diferentes modelos de embeddings
- Fine-tunea el prompt del sistema para tu dominio específico
4. Mantenimiento
- Actualiza periódicamente el contenido extraído
- Monitorea cambios en la estructura del sitemap
- Revisa la calidad de las respuestas del chatbot
Casos de Uso Ideales
✅ Perfecto para:
- Documentación técnica
- Sitios de productos/servicios
- Bases de conocimiento públicas
- Blogs y sitios informativos
- Sitios con sitemap bien estructurado
❌ No recomendado para:
- Sitios que prohíben scraping
- Contenido dinámico (JavaScript pesado)
- Sitios con autenticación requerida
- Contenido que cambia constantemente
- Sitios con estructura muy compleja
Conclusión
Este sistema te permite crear chatbots RAG potentes que pueden responder preguntas basadas en el contenido completo de sitios web. La clave está en:
- Respetar las reglas de scraping
- Entender la estructura del sitemap
- Procesar el contenido adecuadamente
- Configurar el RAG correctamente
Con esta base, puedes crear asistentes especializados en cualquier dominio que tenga documentación web accesible.
Próximos Pasos
- Descarga el workflow de n8n
- Configura tus API keys (OpenAI, Pinecone)
- Prueba con sitios pequeños primero
- Experimenta con diferentes configuraciones
- Escala a sitios más grandes gradualmente
¡Ahora eres un experto en web scraping para RAG! Recuerda siempre hacerlo de forma ética y legal.