Deja de luchar contra sistemas anti-bot. Deja de reescribir selectores después de cada actualización del sitio web.
Scrapling no es solo otra biblioteca de Web Scraping. Es la primera biblioteca de scraping adaptativa que aprende de los cambios de los sitios web y evoluciona con ellos. Mientras que otras bibliotecas se rompen cuando los sitios web actualizan su estructura, Scrapling relocaliza automáticamente tus elementos y mantiene tus scrapers funcionando.
Construido para la Web moderna, Scrapling presenta su propio motor de análisis rápido y fetchers para manejar todos los desafíos de Web Scraping que enfrentas o enfrentarás. Construido por Web Scrapers para Web Scrapers y usuarios regulares, hay algo para todos.
>>fromscrapling.fetchersimportFetcher,AsyncFetcher,StealthyFetcher,DynamicFetcher>>StealthyFetcher.adaptive=True# ¡Obtén el código fuente de sitios web bajo el radar!>>page=StealthyFetcher.fetch('https://example.com',headless=True,network_idle=True)>>print(page.status)200>>products=page.css('.product',auto_save=True)# ¡Extrae datos que sobreviven a cambios de diseño del sitio web!>># Más tarde, si la estructura del sitio web cambia, pasa `adaptive=True`>>products=page.css('.product',adaptive=True)# ¡y Scrapling aún los encuentra!
Patrocinadores
¿Quieres mostrar tu anuncio aquí? ¡Haz clic aquí y elige el nivel que te convenga!
Características Principales
Obtención Avanzada de Sitios Web con Soporte de Sesión
Solicitudes HTTP: Solicitudes HTTP rápidas y sigilosas con la clase Fetcher. Puede imitar la huella TLS de los navegadores, encabezados y usar HTTP3.
Carga Dinámica: Obtén sitios web dinámicos con automatización completa del navegador a través de la clase DynamicFetcher compatible con Chromium de Playwright y Google Chrome.
Evasión Anti-bot: Capacidades de sigilo avanzadas con StealthyFetcher y falsificación de huellas digitales. Puede evadir fácilmente todos los tipos de Turnstile/Interstitial de Cloudflare con automatización.
Gestión de Sesión: Soporte de sesión persistente con las clases FetcherSession, StealthySession y DynamicSession para la gestión de cookies y estado entre solicitudes.
Soporte Async: Soporte async completo en todos los fetchers y clases de sesión async dedicadas.
Scraping Adaptativo e Integración con IA
🔄Seguimiento Inteligente de Elementos: Relocaliza elementos después de cambios en el sitio web usando algoritmos inteligentes de similitud.
🎯Selección Flexible Inteligente: Selectores CSS, selectores XPath, búsqueda basada en filtros, búsqueda de texto, búsqueda regex y más.
🔍Encontrar Elementos Similares: Localiza automáticamente elementos similares a los elementos encontrados.
🤖Servidor MCP para usar con IA: Servidor MCP integrado para Web Scraping asistido por IA y extracción de datos. El servidor MCP presenta capacidades poderosas y personalizadas que aprovechan Scrapling para extraer contenido específico antes de pasarlo a la IA (Claude/Cursor/etc), acelerando así las operaciones y reduciendo costos al minimizar el uso de tokens. (video demo)
Arquitectura de Alto Rendimiento y Probada en Batalla
🚀Ultrarrápido: Rendimiento optimizado que supera a la mayoría de las bibliotecas de scraping de Python.
🔋Eficiente en Memoria: Estructuras de datos optimizadas y carga diferida para una huella de memoria mínima.
⚡Serialización JSON Rápida: 10 veces más rápido que la biblioteca estándar.
🏗️Probado en batalla: Scrapling no solo tiene una cobertura de prueba del 92% y cobertura completa de type hints, sino que ha sido utilizado diariamente por cientos de Web Scrapers durante el último año.
Experiencia Amigable para Desarrolladores/Web Scrapers
🎯Shell Interactivo de Web Scraping: Shell IPython integrado opcional con integración de Scrapling, atajos y nuevas herramientas para acelerar el desarrollo de scripts de Web Scraping, como convertir solicitudes curl a solicitudes Scrapling y ver resultados de solicitudes en tu navegador.
🚀Úsalo directamente desde la Terminal: Opcionalmente, ¡puedes usar Scrapling para hacer scraping de una URL sin escribir ni una sola línea de código!
🛠️API de Navegación Rica: Recorrido avanzado del DOM con métodos de navegación de padres, hermanos e hijos.
🧬Procesamiento de Texto Mejorado: Métodos integrados de regex, limpieza y operaciones de cadena optimizadas.
📝Generación Automática de Selectores: Genera selectores CSS/XPath robustos para cualquier elemento.
🔌API Familiar: Similar a Scrapy/BeautifulSoup con los mismos pseudo-elementos usados en Scrapy/Parsel.
📘Cobertura Completa de Tipos: Type hints completos para excelente soporte de IDE y autocompletado de código.
🔋Imagen Docker Lista: Con cada lanzamiento, se construye y publica automáticamente una imagen Docker que contiene todos los navegadores.
Empezando
Uso Básico
fromscrapling.fetchersimportFetcher,StealthyFetcher,DynamicFetcherfromscrapling.fetchersimportFetcherSession,StealthySession,DynamicSession# Solicitudes HTTP con soporte de sesiónwithFetcherSession(impersonate='chrome')assession:# Usa la última versión de la huella TLS de Chromepage=session.get('https://quotes.toscrape.com/',stealthy_headers=True)quotes=page.css('.quote .text::text')# O usa solicitudes de una sola vezpage=Fetcher.get('https://quotes.toscrape.com/')quotes=page.css('.quote .text::text')# Modo sigiloso avanzado (Mantén el navegador abierto hasta que termines)withStealthySession(headless=True,solve_cloudflare=True)assession:page=session.fetch('https://nopecha.com/demo/cloudflare',google_search=False)data=page.css('#padded_content a')# O usa el estilo de solicitud de una sola vez, abre el navegador para esta solicitud, luego lo cierra después de terminarpage=StealthyFetcher.fetch('https://nopecha.com/demo/cloudflare')data=page.css('#padded_content a')# Automatización completa del navegador (Mantén el navegador abierto hasta que termines)withDynamicSession(headless=True)assession:page=session.fetch('https://quotes.toscrape.com/',network_idle=True)quotes=page.css('.quote .text::text')# O usa el estilo de solicitud de una sola vezpage=DynamicFetcher.fetch('https://quotes.toscrape.com/',network_idle=True)quotes=page.css('.quote .text::text')
Selección de Elementos
# CSS selectorspage.css('a::text')# Extracta textopage.css('a::attr(href)')# Extracta atributospage.css('a',recursive=False)# Solo elementos directospage.css('a',auto_save=True)# Guarda posiciones de los elementos automáticamente# XPathpage.xpath('//a/text()')# Búsqueda flexiblepage.find_by_text('Python',first_match=True)# Encuentra por textopage.find_by_regex(r'\d{4}')# Encuentra por patrón regexpage.find('div',{'class':'container'})# Encuentra por atributos# Navegaciónelement.parent# Obtener elemento padreelement.next_sibling# Obtener siguiente hermanoelement.children# Obtener hijos# Elementos similaressimilar=page.get_similar(element)# Encuentra elementos similares# Scraping adaptativosaved_elements=page.css('.product',auto_save=True)# Más tarde, cuando el sitio web cambia:page.css('.product',adaptive=True)# Encuentra elementos usando posiciones guardadas
Uso de Sesión
fromscrapling.fetchersimportFetcherSession,AsyncFetcherSession# Sesión sincrónicawithFetcherSession()assession:# Las cookies se mantienen automáticamentepage1=session.get('https://quotes.toscrape.com/login')page2=session.post('https://quotes.toscrape.com/login',data={'username':'admin','password':'admin'})# Cambiar fingerprint del navegador si es necesariopage2=session.get('https://quotes.toscrape.com/',impersonate='firefox135')# Uso de sesión asyncasyncwithAsyncStealthySession(max_pages=2)assession:tasks=[]urls=['https://example.com/page1','https://example.com/page2']forurlinurls:task=session.fetch(url)tasks.append(task)print(session.get_pool_stats())# Opcional - El estado del pool de pestañas del navegador (ocupado/libre/error)results=awaitasyncio.gather(*tasks)print(session.get_pool_stats())
CLI y Shell Interactivo
Scrapling v0.3 incluye una poderosa interfaz de línea de comandos:
Lanzar shell interactivo de Web Scraping
scrapling shell
Extraer páginas a un archivo directamente sin programar (Extrae el contenido dentro de la etiqueta body por defecto). Si el archivo de salida termina con .txt, entonces se extraerá el contenido de texto del objetivo. Si termina con .md, será una representación Markdown del contenido HTML; si termina con .html, será el contenido HTML en sí mismo.
scrapling extract get 'https://example.com' content.md
scrapling extract get 'https://example.com' content.txt --css-selector '#fromSkipToProducts' --impersonate 'chrome'# Todos los elementos que coinciden con el selector CSS '#fromSkipToProducts'
scrapling extract fetch 'https://example.com' content.md --css-selector '#fromSkipToProducts' --no-headless
scrapling extract stealthy-fetch 'https://nopecha.com/demo/cloudflare' captchas.html --css-selector '#padded_content a' --solve-cloudflare
Note
Hay muchas características adicionales, pero queremos mantener esta página concisa, como el servidor MCP y el Shell Interactivo de Web Scraping. Consulta la documentación completa aquí
Benchmarks de Rendimiento
Scrapling no solo es poderoso, también es increíblemente rápido, y las actualizaciones desde la versión 0.3 han brindado mejoras de rendimiento excepcionales en todas las operaciones. Los siguientes benchmarks comparan el analizador de Scrapling con otras bibliotecas populares.
Prueba de Velocidad de Extracción de Texto (5000 elementos anidados)
#
Biblioteca
Tiempo (ms)
vs Scrapling
1
Scrapling
1.99
1.0x
2
Parsel/Scrapy
2.01
1.01x
3
Raw Lxml
2.5
1.256x
4
PyQuery
22.93
~11.5x
5
Selectolax
80.57
~40.5x
6
BS4 with Lxml
1541.37
~774.6x
7
MechanicalSoup
1547.35
~777.6x
8
BS4 with html5lib
3410.58
~1713.9x
Rendimiento de Similitud de Elementos y Búsqueda de Texto
Las capacidades de búsqueda adaptativa de elementos de Scrapling superan significativamente a las alternativas:
Biblioteca
Tiempo (ms)
vs Scrapling
Scrapling
2.46
1.0x
AutoScraper
13.3
5.407x
Todos los benchmarks representan promedios de más de 100 ejecuciones. Ver benchmarks.py para la metodología.
Instalación
Scrapling requiere Python 3.10 o superior:
pip install scrapling
A partir de v0.3.2, esta instalación solo incluye el motor de análisis y sus dependencias, sin ningún fetcher o dependencias de línea de comandos.
Dependencias Opcionales
Si vas a usar alguna de las características adicionales a continuación, los fetchers, o sus clases, necesitarás instalar las dependencias de los fetchers y sus dependencias del navegador de la siguiente manera:
Esto descarga todos los navegadores, junto con sus dependencias del sistema y dependencias de manipulación de huellas digitales.
Características adicionales:
Instalar la característica del servidor MCP:
pip install "scrapling[ai]"
Instalar características del shell (shell de Web Scraping y el comando extract):
pip install "scrapling[shell]"
Instalar todo:
pip install "scrapling[all]"
Recuerda que necesitas instalar las dependencias del navegador con scrapling install después de cualquiera de estos extras (si no lo hiciste ya)
Docker
También puedes instalar una imagen Docker con todos los extras y navegadores con el siguiente comando desde DockerHub:
docker pull pyd4vinci/scrapling
O descárgala desde el registro de GitHub:
docker pull ghcr.io/d4vinci/scrapling:latest
Esta imagen se construye y publica automáticamente usando GitHub Actions y la rama principal del repositorio.
Contribuir
¡Damos la bienvenida a las contribuciones! Por favor lee nuestras pautas de contribución antes de comenzar.
Descargo de Responsabilidad
Caution
Esta biblioteca se proporciona solo con fines educativos y de investigación. Al usar esta biblioteca, aceptas cumplir con las leyes locales e internacionales de scraping de datos y privacidad. Los autores y contribuyentes no son responsables de ningún mal uso de este software. Respeta siempre los términos de servicio de los sitios web y los archivos robots.txt.
Licencia
Este trabajo está licenciado bajo la Licencia BSD-3-Clause.
Agradecimientos
Este proyecto incluye código adaptado de:
Parsel (Licencia BSD)—Usado para el submódulo translator