01 Qué es el scraping con modelos de lenguaje
El scraping tradicional depende de selectores CSS: le dices al programa «el precio está en el elemento con la clase price». Funciona hasta que la web cambia el diseño y todo se rompe. Con un modelo de lenguaje el enfoque es distinto: le das el contenido de la página y le describes en lenguaje natural qué datos quieres. El modelo los localiza aunque cambie el HTML.
ScrapeGraphAI es una librería de Python con licencia MIT que organiza ese proceso en grafos: descargar la página, limpiarla y trocearla, pedir al modelo que extraiga los campos y devolver un diccionario. Lo interesante es que Claude Code ya hace buena parte de eso por sí mismo, así que en muchos casos no necesitas instalar nada.
| Paso | En ScrapeGraphAI | En Claude Code sin instalar nada |
|---|---|---|
| Descargar la página | Playwright (navegador real) o peticiones simples | Herramienta WebFetch |
| Limpiar el contenido | Convierte el HTML a texto y lo trocea | WebFetch ya entrega el contenido procesado |
| Extraer campos | El modelo que configures (OpenAI, Groq, Gemini, Ollama…) | El propio Claude |
| Buscar fuentes | SearchGraph sobre un buscador | Herramienta WebSearch |
| Exportar | Diccionario de Python | Claude escribe y ejecuta el script que guarda CSV o Excel |
02 Modo nativo: datos a CSV sin instalar nada
-
1
Crea una carpeta de trabajo
Una carpeta solo para estos datos, por ejemplo extracciones en tu escritorio. Así los archivos generados no se mezclan con otros proyectos.
-
2
Abre Claude Code dentro
Desde el terminal, entra en la carpeta y ejecuta claude. Todo lo que guarde quedará ahí.
-
3
Describe la página y los campos
Pega la URL, enumera las columnas que quieres y el formato de salida. Pide siempre que deje celdas vacías antes que inventar datos.
-
4
Revisa una muestra
Compara cinco filas con la web real antes de dar el archivo por bueno.
mkdir -p ~/extracciones && cd ~/extracciones
claude
Usa WebFetch para leer [URL]. Necesito una fila por producto con estas columnas: nombre, precio, moneda, disponibilidad y enlace a la ficha.
Si la página tiene paginación, averigua el patrón y recorre como máximo [N] páginas, con una pausa de un par de segundos entre peticiones. Elimina duplicados por enlace.
Guarda el resultado en productos.csv (UTF-8, separador coma) y enséñame las diez primeras filas. Si un dato no aparece, deja la celda vacía y no lo deduzcas. Al final dime qué páginas no pudiste leer.
Quiero una tabla de [tipo de empresa] en [zona]. Usa WebSearch para encontrar fuentes públicas (webs corporativas, directorios sectoriales, asociaciones), descarta foros y anuncios y lee con WebFetch las que parezcan fiables.
Por cada empresa: nombre, web, localidad, actividad en una frase y la fuente de donde sale el dato. Solo información publicada por la propia empresa o el directorio; nada de datos personales de empleados.
Guárdalo en empresas.csv y después crea empresas.xlsx con cabecera en negrita, filtros activados, columnas ajustadas y enlaces clicables usando openpyxl.
03 Cuándo el modo nativo se queda corto
La página llega vacía
Webs hechas con React, Vue o similares que pintan el contenido con JavaScript. Hace falta un navegador real que espere a que cargue.
Cientos de URLs
Recorrer muchas páginas una a una dentro de la conversación es lento y consume mucho contexto. Mejor un script que corra solo.
Datos para producción
Si los datos alimentan una base de datos, cada fila debe cumplir un esquema estricto con tipos y campos obligatorios.
Tareas programadas
Un script de Python se programa con cron o el programador de tareas del sistema sin depender de una sesión abierta.
04 Instalar ScrapeGraphAI
La librería necesita Python 3.12 o superior y un modelo de lenguaje que hará la extracción. Admite proveedores como OpenAI, Groq, Gemini o Azure mediante clave de API, y también modelos locales con Ollama si no quieres enviar el contenido a terceros. El comando playwright install descarga los navegadores que usa para webs con JavaScript.
python3 -m venv .venv
source .venv/bin/activate
pip install scrapegraphai
playwright install
import json
from scrapegraphai.graphs import SmartScraperGraph
config = {
"llm": {
"model": "ollama/llama3.2",
"model_tokens": 8192,
"format": "json",
},
"verbose": True,
"headless": True,
}
grafo = SmartScraperGraph(
prompt="Lista los servicios que ofrece la empresa y sus datos de contacto públicos",
source="https://www.ejemplo.es/",
config=config,
)
print(json.dumps(grafo.run(), indent=2, ensure_ascii=False))
05 Los grafos que más vas a usar
| Grafo | Para qué sirve |
|---|---|
| SmartScraperGraph | Una página y una instrucción: el caso más habitual |
| SmartScraperMultiGraph | La misma instrucción sobre una lista de URLs, con llamadas al modelo en paralelo |
| SearchGraph | Busca un tema, lee los primeros resultados y consolida los datos |
| ScriptCreatorGraph | Genera un script de Python de scraping para una página concreta |
En esta carpeta tengo ScrapeGraphAI instalado en .venv y la clave del modelo en .env. Lee urls.txt (una URL por línea).
Escribe lote.py con SmartScraperMultiGraph para extraer de cada página: [campos]. Procesa las URLs en bloques de 25, registra las que fallen en errores.txt sin detener el resto y añade a cada fila la columna url_origen.
Valida cada fila con un modelo de Pydantic (campos obligatorios y tipos) y descarta las que no cumplan anotando el motivo. Guarda el resultado en lote.xlsx. Ejecuta primero con las cinco primeras URLs, enséñame el resultado y espera mi visto bueno antes del lote completo.
06 Casos de uso para negocio
Vigilancia de precios
Una extracción semanal de las fichas clave de la competencia y una comparación con la semana anterior para detectar bajadas y roturas de stock.
Listados de prospección
Empresas de un sector y provincia a partir de directorios y asociaciones públicas, con la fuente de cada dato para poder verificarlo.
Cambios en páginas
Tarifas de proveedores, convocatorias o boletines: guardas una copia diaria y comparas con la anterior.
Migraciones de contenido
Pasar el catálogo o el blog de una web antigua a una tabla estructurada antes de rehacerla.
07 Uso responsable y legal
- ✓Consulta robots.txt y las condiciones de uso del sitio antes de extraer nada.
- ✓Limita el ritmo: unos segundos entre peticiones y detente si recibes errores 429 o 503.
- ✓No extraigas datos personales sin base legal: en la UE se aplica el RGPD aunque el dato esté publicado.
- ✓No republiques textos ni imágenes extraídos; usa los datos para análisis interno.
- ✓Evita redes sociales y plataformas que exigen inicio de sesión; usa sus API oficiales.
- ✓Guarda la fuente y la fecha de cada dato para poder justificar su origen.
Preguntas frecuentes
En el modo nativo no: Claude Code hace la descarga y la extracción. ScrapeGraphAI sí necesita un modelo, ya sea por API (OpenAI, Groq, Gemini…) o en local con Ollama, sin coste por uso.
Con las páginas públicas que se ven sin iniciar sesión, en la mayoría de casos. Las que cargan con JavaScript necesitan el navegador de Playwright, y las que tienen protección antibots pueden bloquear cualquier intento automatizado.
Extraer datos públicos para análisis suele ser aceptable si respetas las condiciones del sitio, no saturas el servidor y no tratas datos personales sin base legal. Republicar contenido protegido o saltarse inicios de sesión es otra cosa.
Cuando tengas el script de Python funcionando, prográmalo con cron en Linux o macOS o con el Programador de tareas de Windows. Guarda cada ejecución con la fecha en el nombre del archivo.
Los creadores ofrecen además una API gestionada de pago con renderizado y proxies incluidos. Esta guía se centra en la librería de código abierto, que ejecutas tú.
Sobre el autor
Equipo editorial de appyweb
Marketing, SEO y desarrollo con IA
Especialistas de appyweb en SEO, publicidad, desarrollo web y automatización con IA.