22.700 estrellas en GitHub. Un parser que se adapta a los cambios de estructura. Y un servidor MCP nativo que conecta directo con Claude.
Todo desarrollador que armó alguna vez un web scraper conoce esa sensación. Pasás una tarde escribiendo un script prolijo, selectores bien ajustados — y dos semanas después el sitio rota sus clases CSS, reorganiza el layout o migra a un nuevo framework. Tu scraper se rompe. Empezás de cero.
Scrapling, un framework Python creado por Karim Shoair (D4Vinci), ataca este problema de frente. Su parser no solo encuentra elementos por selector — aprende dónde viven esos elementos en la estructura de la página, y cuando el layout cambia, los reubica automáticamente usando algoritmos de similitud. El scraper sigue corriendo.
Este mes Scrapling entró en GitHub Trending con más de 22.700 estrellas. Para desarrolladores que construyen pipelines de datos y arquitecturas RAG para sistemas de IA, el momento es relevante.
El problema central: los scrapers son frágiles
Las herramientas tradicionales de scraping — BeautifulSoup, Scrapy, requests a secas — son excelentes. Pero todas comparten el mismo supuesto fundamental: la estructura de la página es estable. En el momento en que un sitio rota sus clases CSS o reestructura su DOM, los selectores dejan de funcionar.
La solución habitual es mantenimiento manual: detectar la rotura, hacer ingeniería inversa de la nueva estructura, actualizar los selectores, redesplegar. Para scripts de uso único es molesto. Para pipelines en producción que alimentan un data lake o un sistema RAG — donde los datos desactualizados o faltantes tienen consecuencias reales aguas abajo — es una carga operacional seria.
El enfoque de Scrapling: marcás elementos con auto_save=True y el framework almacena una huella estructural. En ejecuciones posteriores, aunque los selectores exactos ya no funcionen, el motor adaptativo encuentra el elemento por similitud estructural. El scraper degrada con gracia en lugar de fallar en silencio.
from scrapling.fetchers import StealthyFetcher
StealthyFetcher.adaptive = True
page = StealthyFetcher.fetch('https://example.com', headless=True, network_idle=True)
# auto_save almacena una huella estructural de cada elemento
products = page.css('.product', auto_save=True)
Sistema de fetchers en tres niveles
Scrapling organiza sus capacidades de fetching en tres niveles. Empezás en el nivel de menor costo y escalás solo cuando es necesario:
Fetcher / AsyncFetcher — Requests HTTP simples sin overhead de browser. El más rápido, menor uso de recursos. Funciona para cualquier sitio que no requiera ejecución de JavaScript.
DynamicFetcher — Fetching basado en browser vía Playwright para sitios que dependen de JavaScript. Maneja contenido dinámico, secciones con lazy loading y single-page applications.
StealthyFetcher — Fetching con browser y evasión activa de sistemas anti-bot. Bypasea Cloudflare Turnstile y protecciones similares out of the box, usando un fingerprint de Chromium completamente falsificado.
Los tres retornan el mismo objeto Response, que hereda de Selector. Esto significa que cualquier código de extracción que escribas para una request estática con Fetcher funciona idéntico si después migrás a DynamicFetcher — sin cambios en la lógica de extracción.
Spider API para crawls a escala
Para cargas de trabajo más grandes, Scrapling incluye un framework de spiders estilo Scrapy. Definís un spider con start_urls y un callback parse asíncrono, y el motor se encarga del crawling concurrente con límites de concurrencia configurables, throttling por dominio, delays de descarga, pause/resume y rotación automática de proxies.
from scrapling import Spider
class ProductSpider(Spider):
start_urls = ['https://example.com/catalogo']
async def parse(self, response):
for product in response.css('.product', auto_save=True):
yield {
'nombre': product.css('.name').text,
'precio': product.css('.price').text,
}
next_page = response.css('a.next-page')
if next_page:
yield next_page.follow()
El motor de crawling concurrente ofrece stats en tiempo real y streaming — útil para monitorear jobs de larga duración sin necesidad de polling.
Servidor MCP: conectá tu scraper con Claude
Un detalle que llama la atención: Scrapling viene con un servidor MCP nativo. Esto significa que podés configurarlo como herramienta en Claude Code, Cursor o cualquier entorno compatible con MCP.
La integración está diseñada específicamente para workflows de IA — en lugar de volcar HTML crudo en el contexto de tu LLM, Scrapling preprocesa y extrae el contenido objetivo antes de pasárselo al modelo. El resultado: menos tokens consumidos, menores costos de API, respuestas más rápidas.
Para desarrolladores construyendo pipelines RAG o capas de adquisición de datos para sistemas de IA, esto es una ganancia de eficiencia concreta. Fetchear una página cruda y limpiarla en el contexto del LLM es desperdicio; tener una capa de extracción dedicada que lo resuelva antes de que los tokens lleguen al modelo es la arquitectura más prolija.
Nota LatAm: Para equipos que operan con presupuesto ajustado de API — que describe a la mayoría de los dev shops de la región — la reducción de tokens es un beneficio de costo concreto, no solo una mejora de performance.
Instalación
# Solo el parser (sin fetchers)
pip install scrapling
# Instalación completa con todos los fetchers
pip install "scrapling[fetchers]"
scrapling install # Descarga browsers y dependencias de fingerprint
Requiere Python 3.10+. Imagen Docker disponible vía docker pull pyd4vinci/scrapling.
Para proyectos donde no querés gestionar dependencias de browser, el nivel Fetcher / AsyncFetcher funciona solo con pip install scrapling — sin instalación de browser.
Caveats que vale la pena conocer
auto_save no es magia. El motor adaptativo reubica elementos por similitud estructural — si el rediseño de un sitio es suficientemente radical (no solo cambios de clases CSS sino reestructuración total del DOM), las huellas pueden no sobrevivir. Reduce el mantenimiento, no lo elimina.
Las dependencias de browser son pesadas. scrapling install descarga browsers de Playwright y librerías de manipulación de fingerprint. En entornos con recursos limitados (containers CI con poco disco, VMs ajustadas), considerá el footprint adicional.
El bypass de anti-bot tiene límites. StealthyFetcher maneja bien Cloudflare Turnstile. Para protecciones enterprise (Akamai, DataDome, Kasada), el propio README apunta a servicios API externos — Scrapling solo no es suficiente.
Uso legal y ético. El web scraping está sujeto a los términos de servicio de cada sitio y a la regulación aplicable. Scrapling es una herramienta técnica — la responsabilidad del uso apropiado queda en manos del desarrollador.
Para quién es esto
Scrapling encaja naturalmente en algunos escenarios específicos:
- Pipelines de datos para IA — Alimentar stores vectoriales, bases de conocimiento o capas de retrieval RAG con datos estructurados
- Monitoreo de precios e inventario — Scrapers de larga duración que se rompen cada vez que los retailers actualizan su frontend
- Research e inteligencia competitiva — Extracción periódica de múltiples fuentes con distinto nivel de estabilidad
- Desarrolladores migrando desde BeautifulSoup o Scrapy — La API es deliberadamente familiar; la curva de migración es baja
Para extracciones puntuales donde controlás la URL objetivo y no necesitás resiliencia, herramientas más simples son suficientes. Scrapling justifica su peso en pipelines en producción donde el uptime importa.
Recursos
- GitHub: github.com/D4Vinci/Scrapling — 22.700+ estrellas
- Documentación: scrapling.readthedocs.io
- Licencia: BSD-3-Clause
