Scrapling: extracción web adaptable entre HTTP, navegador y rastreo
D4Vinci/Scrapling · 83.616★ · 8.546 forks
Todo lo que hay que saber sobre D4Vinci/Scrapling: un marco de Python para extraer páginas aisladas o ejecutar rastreos concurrentes, con selectores adaptativos, sesiones y opciones de navegador.
Qué es Scrapling
Scrapling es un marco de extracción web para Python. Su README lo sitúa en un continuo que va desde una petición única hasta un rastreo completo: combina un analizador con selectores CSS, XPath y métodos similares a BeautifulSoup; clientes HTTP y de navegador; y una API de arañas con peticiones y respuestas asíncronas.
La característica distintiva es el modo adaptativo. Al guardar un selector con auto_save=True, el proyecto conserva información del elemento; en una ejecución posterior se puede solicitar adaptive=True para intentar localizarlo si cambió la estructura de la página. Es una ayuda para cambios de diseño, no una garantía de extracción correcta: conviene validar los datos obtenidos.
El proyecto también ofrece clientes con suplantación de huella TLS y cabeceras, automatización de Chromium o Chrome mediante Playwright, sesiones persistentes, rotación de proxies y detección de bloqueos. El README afirma que StealthyFetcher puede resolver desafíos de Cloudflare Turnstile e intersticiales; es una afirmación del proyecto, no una certificación de que funcionará frente a cualquier protección.

El origen: una primera versión pública en octubre de 2024
La API de GitHub registra la creación de D4Vinci/Scrapling el 13 de octubre de 2024 a las 20:29 UTC. Ese mismo día, el historial contiene el commit inicial y, pocas horas después, el commit a721073b, cuyo mensaje describe la salida de la primera versión pública. La cita bibliográfica incluida por el propio repositorio atribuye Scrapling a Karim Shoair en 2024.
La cuenta D4Vinci de GitHub identifica a Shoair como una persona de Egipto interesada en informática, seguridad de la información y extracción web; tenía 45 repositorios públicos y 3.558 seguidores en la consulta. El propio historial de la primera jornada deja ver el contexto técnico inicial: correcciones de compatibilidad para Python 3.6 y 3.7, publicación del paquete y del flujo de CI, documentación y, al día siguiente, la versión 0.1.2. No se recuperó un anuncio de lanzamiento externo con una narración más amplia, por lo que no se atribuye otra motivación personal al autor.

La tensión que aborda el diseño está explícita en la documentación: una biblioteca de análisis de HTML no resuelve por sí sola páginas dinámicas, cambios de estructura, sesiones, límites de velocidad ni defensas contra automatización. Scrapling reúne esas capas bajo una API común y conserva una interfaz familiar a Scrapy, Parsel y BeautifulSoup.
Filosofía y principios
De la documentación y las normas de contribución se desprenden cuatro principios verificables:
- Una sola biblioteca, varios niveles de trabajo. Se puede usar
Selectorsólo para analizar HTML,Fetcherpara HTTP,DynamicFetcheroStealthyFetcherpara navegador, ySpiderpara rastreos. - Resistencia a cambios, pero con trazabilidad. Los selectores adaptativos y la búsqueda de elementos similares intentan reducir fragilidad; la documentación no presenta esa recuperación como infalible.
- Escalar sin abandonar el control operativo. Las arañas incorporan concurrencia, límite por dominio, pausas y reanudaciones con puntos de control, ajuste automático de espera, reintentos y exportación de resultados.
- Responsabilidad del usuario. El README restringe el uso a fines educativos y de investigación, exige cumplir leyes de privacidad, condiciones del sitio y
robots.txt. En las arañas,robots_txt_obeyes una opción explícita que puede respetarDisallow,Crawl-delayyRequest-rate.

Cómo funciona
Instalación y elección del cliente
El núcleo de análisis se instala con pip install scrapling. Para clientes, arañas y navegadores, el README exige pip install "scrapling[fetchers]" y después scrapling install; para MCP, pip install "scrapling[ai]"; y para todo el conjunto, pip install "scrapling[all]". También publica imágenes pyd4vinci/scrapling en Docker Hub y ghcr.io/d4vinci/scrapling:latest.
El flujo documentado se divide así:
| Necesidad | Interfaz documentada | Ejemplo de patrón |
|---|---|---|
| HTML ya disponible | Selector | Selector("<html>...</html>") → .css() o .xpath() |
| Petición HTTP | Fetcher o FetcherSession | Fetcher.get(url) |
| Navegador dinámico | DynamicFetcher o DynamicSession | DynamicFetcher.fetch(url) |
| Navegador con opciones de sigilo | StealthyFetcher o StealthySession | StealthyFetcher.fetch(url, headless=True) |
| Rastreo | Spider | definir start_urls y async def parse() |
Las sesiones preservan cookies y estado; las arañas pueden registrar varias sesiones y dirigir una petición a una de ellas mediante sid. El modo de rastreo proporciona plantillas CrawlSpider, SitemapSpider y ShopifySpider; también incluye extracción de enlaces, puntos de control para reanudar, emisión progresiva con async for item in spider.stream() y exportación a JSON, JSONL, CSV o XML.
Selector adaptable, CLI e IA
El patrón central de adaptación es guardar una selección, por ejemplo page.css('.product', auto_save=True), y recuperarla más adelante con adaptive=True. Además de CSS y XPath, el analizador ofrece búsqueda por texto, expresiones regulares, filtros y navegación entre elementos relacionados.

La CLI evita escribir código para una extracción simple:
scrapling shell
scrapling extract get 'https://example.com' contenido.md
scrapling extract fetch 'https://example.com' contenido.md --no-headless
scrapling extract stealthy-fetch 'https://example.com' captchas.html --solve-cloudflare
El README documenta un servidor MCP integrado, activable con el extra ai, que prepara contenido seleccionado antes de entregarlo a un asistente, mantiene sesiones de navegador entre llamadas, captura pantallas y puede controlar un navegador remoto mediante CDP. También hay una habilidad de agente dentro de agent-skill/ para que los agentes de programación consulten la API actual de Scrapling.

Rendimiento: límites de la comparación
El repositorio publica su propio benchmarks.py. En su prueba de extracción de texto sobre 5.000 elementos anidados, declara 1,98 ms para Scrapling, 1,99 ms para Parsel/Scrapy, 2,48 ms para lxml y cifras mayores para PyQuery, Selectolax, MechanicalSoup y BeautifulSoup. En la prueba de similitud declara 2,29 ms para Scrapling y 12,46 ms para AutoScraper. Son promedios que el proyecto atribuye a más de 100 ejecuciones; no son una evaluación independiente ni sustituyen una prueba con la carga y las políticas del sitio de destino.

Estado oficial y semioficial
El paquete scrapling se distribuye oficialmente por PyPI según los enlaces del README, y las imágenes que el proyecto dice generar en cada publicación se ofrecen desde Docker Hub y GitHub Container Registry. El mismo README enlaza una habilidad mantenida en el propio repositorio y el perfil D4Vinci/scrapling-official de Clawhub.
Esto acredita canales de distribución y una habilidad presentada por el mantenedor; no acredita que Python, Anthropic, OpenAI, Cloudflare, Playwright ni otro proveedor avalen la eficacia de Scrapling frente a sistemas antirobots. Tampoco se recuperó evidencia de que haya sido aceptado como extensión oficial de Claude Code, Cursor u otro mercado de un proveedor. La adopción en proyectos MCP y habilidades de terceros es, por tanto, semioficial o comunitaria, no una certificación del proveedor.
El ecosistema
Materiales y traducciones mantenidos por el proyecto
El README enlaza documentación en árabe, español, portugués de Brasil, francés, alemán, chino simplificado, japonés, ruso y coreano. Son traducciones alojadas en el árbol docs/ del repositorio principal; no son repositorios separados. También incluye agent-skill/, documentación en Read the Docs, el servidor MCP, una imagen Docker y un Discord del proyecto.
Como material directamente relacionado del mismo autor, la búsqueda de repositorios de D4Vinci devolvió D4Vinci/Scrapling-Arabic-Crash-Course (6 estrellas): se describe como los archivos de un curso en árabe sobre Scrapling. No se encontró en esa búsqueda un laboratorio de evaluaciones o un mercado hermano dedicado a Scrapling.

Puertos, bifurcaciones y extensiones comunitarias
La búsqueda de GitHub y la lista de bifurcaciones recuperada permitieron verificar los siguientes proyectos. Las cifras son estrellas de la API de GitHub en la fecha de medición, no una garantía de mantenimiento, compatibilidad ni autorización del autor.
dorisoy/Scrapling— bifurcación traducida al chino, con 17 estrellas. Su descripción presenta en chino el selector adaptable, los clientes antirobots y las arañas; es la traducción comunitaria no inglesa más claramente identificable en los resultados recuperados.Cedriccmh/claude-code-skill-scrapling— habilidad para Claude Code que declara elegir automáticamente un cliente de Scrapling y documentar patrones de sitios; 377 estrellas.cyberchitta/scrapling-fetch-mcp— servidor MCP de terceros para que asistentes accedan a texto de sitios protegidos usando Scrapling; 106 estrellas.sangamsharma/Scrapling-openclaw— bifurcación o adaptación para OpenClaw; 2 estrellas. Su baja cifra y la descripción casi idéntica al original no permiten afirmar soporte independiente sostenido.- Entre las bifurcaciones con mayor número de estrellas en la respuesta de la API figuran
smirk-dev/Scrapling(6),ahmed-el-halawani/scrapling(5) ydmore/Scrapling-red-stealth-python(4). La API las marca como derivadas o las presenta con una descripción de Scrapling; no se recuperó documentación suficiente para tratarlas como alternativas mantenidas.
El ecosistema conecta asimismo con proyectos que la documentación nombra como referentes de API o de evaluación: Scrapy, Parsel, BeautifulSoup, lxml y Playwright. Esos nombres establecen compatibilidad, inspiración o comparación técnica en las fuentes recuperadas; no implican afiliación corporativa.
Números del repo
Medición: 3 de agosto de 2026, API de GitHub.
| Métrica | Valor |
|---|---|
| Estrellas | 72.226 |
| Bifurcaciones | 7.174 |
| Suscriptores | 263 |
| Commits | 1.560 |
| Incidencias abiertas indicadas por la API | 6 |
| Lenguaje principal | Python |
| Licencia | BSD-3-Clause |
| Creación | 13 de octubre de 2024 |
| Último envío de código | 30 de julio de 2026 |
| Última actualización de metadatos | 3 de agosto de 2026 |
| Última publicación | v0.4.12, 26 de julio de 2026 |
El total de 1.560 commits procede del enlace de paginación final de la API de commits. Los contribuidores principales devueltos por la API son D4Vinci (Karim Shoair, 1.490 contribuciones), yetval (14), AbdullahY36 (10), mhillebrand (4), haosenwang1018 (4) y Bortlesboat (4). GitHub duplica el total de estrellas en watchers_count; por eso se informa subscribers_count como suscriptores reales. El campo open_issues_count puede incluir solicitudes de cambios abiertas, así que no equivale necesariamente a sólo incidencias.
Cómo contribuir
La guía CONTRIBUTING.md exige bifurcar el repositorio, clonar la bifurcación y trabajar desde dev; una solicitud contra main se rechaza. El flujo inicial documentado es:
git clone https://github.com/<usuario>/Scrapling.git
cd Scrapling
git checkout dev
python -m venv .venv
pip install -e ".[all]"
pip install -r tests/requirements.txt
scrapling install
pre-commit install
Las contribuciones de funciones deben incluir pruebas; las correcciones deben incluir código que reproduzca el fallo. La guía usa tox y CI de GitHub en las versiones de Python admitidas, además de mypy, pyright, ruff, bandit, vermin y mensajes de commit convencionales. Indica ejecutar pytest tests -n auto; para evitar conflictos de navegador, separa las pruebas no relacionadas con DynamicFetcher o StealthyFetcher de las pruebas de navegador secuenciales. También admite traducciones y plantillas de araña para plataformas con una estructura uniforme entre muchos dominios, pero no raspadores de un único sitio.
Cómo lo recibió la comunidad
La recepción externa verificable es limitada en Hacker News, pero los hilos de GitHub ofrecen ejemplos concretos de uso, problemas y correcciones:
- En Hacker News, 41832425 fue publicado por
d4vinciel 13 de octubre de 2024 y alcanzó 4 puntos y 1 comentario. Ese único comentario es del propio autor y presenta Scrapling como una biblioteca adaptable y de alto rendimiento; no es una reseña independiente. El segundo envío, 43852100, publicado pord4vinciel 30 de abril de 2025, obtuvo 1 punto y 0 comentarios. No se halló un debate amplio de Hacker News que permita inferir consenso. - En la incidencia #50,
restlessroninagradeció el trabajo y explicó una utilidad práctica: obtener documentación de OpenAI que no lograba recuperar. Su objeción concreta fue que mensajes enviados a la salida estándar interferían con un servidor MCP basado enstdio. Finalmente indicó que mantendría una redirección destdoutmientras resolvía la integración; es elogio de un usuario, pero también evidencia de una fricción real de protocolo. - En #215,
nuclei-mastareportó que, conProxyRotator, el navegador no se abría y la araña terminaba con cero elementos.yetvalidentificó primero un conflicto de orden de resolución de métodos y después una fuga en el grupo de páginas de la rotación de proxies; abrió la solicitud de cambios #223. Tras la fusión,nuclei-mastarespondió que funcionaba bien. El hilo ilustra una corrección colaborativa, no que la combinación estuviera libre de fallos antes del arreglo. - En #366,
chcodexobjetó que el servidor MCP no saneaba caracteres de control antes de serializar una respuesta y que recomendar la CLI local no resolvía un despliegue remoto de MCP.yetvalpropuso una corrección;chcodexverificó que pasó de un error de compatibilidad XML a una respuesta HTTP 200, y el mantenedor informó de su integración. Es una mejora comprobada por el reportante, aunque la incidencia revela que las integraciones MCP deben probarse con contenido real.
Scrapling frente a otras propuestas
| Propuesta | Coincidencia verificable | Diferencia verificable |
|---|---|---|
| Scrapy | La API de Spider se documenta como similar a Scrapy y Scrapling ofrece integración mediante scrapling_response. | Scrapling integra en el mismo README clientes HTTP, navegador, selector adaptable y sesiones; la fuente no permite concluir una superioridad general. |
| Parsel | Ambos aparecen en la comparación de rendimiento del analizador y utilizan selectores relacionados con CSS/XPath. | Scrapling declara haber adaptado código de Parsel para su submódulo de traducción y añade clientes, arañas y adaptación de elementos. |
| BeautifulSoup | El analizador de Scrapling ofrece find_all con una forma semejante a BeautifulSoup. | La fuente recuperada describe en Scrapling XPath, navegación de nodos, sesiones, arañas y navegadores, capacidades fuera de esa interfaz de análisis semejante. |
| AutoScraper | Ambos aparecen en el banco interno de similitud de elementos. | El README compara tiempo de localización adaptativa; no recuperamos una fuente que permita equiparar sus arquitecturas o resultados fuera de esa prueba del propio proyecto. |
| Playwright | DynamicFetcher usa Playwright para Chromium y Chrome, y las sesiones admiten CDP remoto. | Playwright figura como motor de automatización dentro de Scrapling; no es un competidor de nivel equivalente en la documentación recuperada. |
Casos de uso y a quién puede ayudar este repositorio
- Quien necesite extraer páginas que cambian con frecuencia puede guardar selectores y pedir recuperación adaptativa, siempre validando el resultado para evitar confundir un elemento similar con el dato esperado.
- Equipos que alternan sitios estáticos, aplicaciones dinámicas y páginas con estado pueden empezar con
Fetcher, subir aDynamicFetcheroStealthyFetchery conservar cookies y estado con sesiones, sin cambiar de biblioteca de análisis. - Operaciones de rastreo de larga duración pueden usar
Spider, límites por dominio, puntos de control, pausa y reanudación, emisión progresiva y exportadores integrados; el modo de desarrollo también permite reutilizar respuestas en disco al iterar sobreparse(). - Desarrolladores que incorporan asistentes o automatización MCP pueden usar el servidor MCP y la habilidad de agente para entregar contenido seleccionado y mantener sesiones, pero deberían probar el transporte
stdio, caracteres de control y la política del sitio, como muestran las incidencias #50 y #366. - Mantenedores que ya usan Scrapy pueden evaluar el decorador
scrapling_responsepara analizar respuestas con el parser de Scrapling sin reescribir su araña completa.

Recursos
- Repositorio: https://github.com/D4Vinci/Scrapling
- Documentación e instalación: https://scrapling.readthedocs.io/en/latest/
- Contribución y pruebas: https://github.com/D4Vinci/Scrapling/blob/main/CONTRIBUTING.md
- Skills oficiales: https://github.com/D4Vinci/Scrapling/tree/main/agent-skill
- Servidor MCP: https://scrapling.readthedocs.io/en/latest/ai/mcp-server.html
- Paquete oficial: https://pypi.org/project/scrapling/
- Imagen Docker: https://hub.docker.com/r/pyd4vinci/scrapling
- Reviews y conversaciones: https://news.ycombinator.com/item?id=41832425, https://news.ycombinator.com/item?id=43852100, https://github.com/D4Vinci/Scrapling/issues/50, https://github.com/D4Vinci/Scrapling/issues/215, https://github.com/D4Vinci/Scrapling/issues/366
- Comunidad Discord: https://discord.gg/EMgGbDceNQ
Nota: este artículo combina el README, la guía de contribución y el historial de D4Vinci/Scrapling, la API de GitHub y la API de Hacker News consultados el 3 de agosto de 2026. Las cifras y el estado de los enlaces cambian con el tiempo.
Comentarios