Saltar a contenido

Scrapling: una alternativa gratuita a la IA para extraer datos web de forma fiable

La extracción de datos web se usa desde hace tiempo para recopilar información, indexar contenido y preparar conjuntos de datos, entre otras tareas. Sin embargo, quienes tienen experiencia suelen encontrar problemas que dificultan el trabajo. En los últimos años, ha crecido el interés por usar IA para resolverlos.

En este artículo veremos cuáles son esos problemas, por qué las empresas están recurriendo a la IA, qué dificultades tiene ese enfoque y cómo Scrapling puede ayudarte sin el coste de usar IA.

Problemas comunes y objetivos difíciles

Si llevas tiempo extrayendo datos web, seguramente has visto estos problemas más de una vez:

  1. Cambios frecuentes en la estructura de los sitios: Los sitios actualizan su DOM y los selectores XPath/CSS fijos dejan de funcionar.
  2. Selectores inestables: Los nombres de clases e identificadores cambian o se generan al azar, lo que rompe los scrapers o dificulta la extracción.
  3. Medidas contra bots cada vez más complejas: Los sistemas CAPTCHA, las huellas del navegador y el análisis de comportamiento dificultan la extracción tradicional.

Y hay más. Todo esto ocurre incluso si trabajas con sitios conocidos para los que puedes escribir código específico.

Si quieres ir más lejos y extraer datos de muchos sitios distintos, lo que suele llamarse Broad Scraping o Generic Web Scraping, esos problemas aumentan y aparecen otros:

  1. Gran variedad de sitios: Un scraper genérico debe manejar muchas estructuras HTML, formas de usar CSS, frameworks de JavaScript y tecnologías de servidor.
  2. Identificar los datos útiles: ¿Cómo sabe el scraper qué datos importan en una página que nunca ha visto?
  3. Distintas formas de paginación: El desplazamiento infinito, las páginas numeradas y los botones para cargar más contenido necesitan enfoques distintos.

Y la lista sigue. ¿Cómo resolver todo esto a mano? Me refiero a extraer datos de sitios muy distintos que no comparten tecnologías.

La IA ayuda, pero tiene un coste alto

La IA puede resolver muchos de estos problemas porque entiende el código de la página, identifica los campos que buscas o crea selectores para ellos. Claro, siempre que ya hayas resuelto la protección contra bots con otras herramientas :)

Me gusta este enfoque. La IA me parece fascinante, sobre todo la IA generativa. Puede que pases mucho tiempo ajustando instrucciones para el modelo. Si eso no te molesta, pronto llegarás al verdadero problema de usar IA aquí.

Muchas páginas tienen muchísimo contenido, y tendrás que enviárselo de algún modo al modelo. Esto consume tokens muy rápido y el coste puede subir enseguida.

Salvo que el dinero no te preocupe, buscarás opciones más baratas. Ahí entra Scrapling 😄

Scrapling te ayuda

Scrapling puede resolver casi todos los problemas que encontrarás al extraer datos web. Las próximas actualizaciones irán cubriendo los demás.

Resolver T1: cambios frecuentes en la estructura de los sitios

Para eso existe la función adaptive. Sabías que iba a hablar de ella, y aquí estamos :)

Si activas adaptive, puedes guardar las propiedades que distinguen a un elemento para encontrarlo después, aunque cambie la estructura del sitio. Lo más difícil es que cualquier parte del elemento puede cambiar, así que no siempre tienes una propiedad fija en la que confiar.

La función guarda todo lo que distingue al elemento. Cuando cambia la estructura del sitio, devuelve el elemento que más se parece al anterior.

Ya lo expliqué con más detalle y varios ejemplos. Puedes leerlos aquí.

Resolver T2: selectores inestables

Si llevas tiempo extrayendo datos web, seguramente te ha pasado: un sitio con HTML sin identificadores ni clases, nombres de clase aleatorios o un diseño que no ofrece nada estable para seleccionar elementos.

En estos casos, los selectores CSS/XPath habituales pueden no ser la mejor opción. Por eso, Scrapling ofrece tres formas más de seleccionar elementos:

  1. Seleccionar por el contenido: Busca por texto con find_by_text o por una expresión regular que coincida con el texto con find_by_regex.
  2. Seleccionar elementos parecidos a otro: Encuentra un elemento y nosotros buscamos los demás.
  3. Seleccionar mediante filtros: Indica las condiciones que debe cumplir el elemento y lo encontramos.

Abre los enlaces para ver cómo resuelve Scrapling cada caso.

Resolver T3: medidas contra bots cada vez más complejas

Los proxies y las acciones que imitan a una persona pueden no bastar para los sitios protegidos. StealthyFetcher combina la automatización del navegador con ajustes de su huella y opciones para manejar la protección contra bots. Activa solve_cloudflare=True para los desafíos Turnstile e Interstitial de Cloudflare.

Resolver B1 y B2: variedad de sitios e identificación de datos útiles

Este problema es difícil, pero la flexibilidad de Scrapling permite abordarlo.

Hablé con alguien que usa IA para extraer precios de distintos sitios. Solo le interesan los precios y los títulos, así que pide a la IA que encuentre el precio.

Le dije que no necesitaba IA para eso y le di este ejemplo:

price_element = page.find_by_regex(r'£[\d\.,]+', first_match=True)  # Get the first element that contains a text that matches price regex eg. £10.50
# If you want the container/element that contains the price element
price_element_container = price_element.parent or price_element.find_ancestor(lambda ancestor: ancestor.has_class('product'))  # or other methods...
target_element_selector = price_element_container.generate_css_selector or price_element_container.generate_full_css_selector # or xpath
Entonces me preguntó qué pasaría en un caso como este:
<span class='currency'> $ </span> <span class='a-price'> 45,000 </span>
Así que adapté el código:
price_element_container = page.find_by_regex(r'[\d,]+', first_match=True).parent # Adjusted the regex for this example
full_price_data = price_element_container.get_all_text(separator="", strip=True)  # Returns '$45,000' in this case
Esto bastó para su caso. Puedes probar la primera expresión regular y, si no encuentra nada, usar la siguiente. Empieza por los patrones más comunes y después cubre los menos frecuentes. Puede ser algo aburrido, pero cuesta mucho menos que usar IA.

Ese es el punto del ejemplo: no todos los problemas necesitan IA. A veces, buscar otra forma de resolverlos puede ahorrarte mucho dinero.

Resolver B3: distintas formas de paginación

Scrapling aún no tiene un método que detecte automáticamente los enlaces de paginación. Sus spiders siguen esos enlaces con response.follow().

Pero puedes cubrir muchos sitios buscando los patrones más comunes con page.find_by_text('Next')['href'] o page.find_by_text('load more')['href'], o con selectores como 'a[href*="?page="]' o 'a[href*="/page/"]'. Esa es la idea.

Comparación de costes y ahorro

Esta tabla ofrece una comparación rápida:

Aspecto Scrapling Herramientas con IA (por ejemplo, Browse AI u Oxylabs)
Coste Gratuito, sin cargos por uso de la biblioteca Planes de pago; el precio depende del proveedor y del uso
Configuración Requiere algunos conocimientos técnicos y configuración manual A menudo no requiere código y resulta más fácil para usuarios sin experiencia técnica
Formas de uso Mediante código, terminal o servidor MCP A menudo mediante una interfaz gráfica o una API, según lo que ofrezca la empresa
Escalabilidad Depende de la implementación del usuario Servicios gestionados con soporte para grandes volúmenes
Adaptación a cambios Alta, con funciones como adaptive y métodos de selección sin selectores CSS/XPath Alta y automática con IA, pero costosa si los cambios son frecuentes

Consulta los precios actuales de Browse AI y de la Web Scraper API de Oxylabs.

Conclusión

La IA ofrece funciones potentes, pero su coste puede ser demasiado alto para muchas tareas de extracción web. Scrapling reúne herramientas fiables, flexibles y económicas para extraer datos de sitios concretos o de muchos sitios distintos. A menudo permite evitar soluciones de IA costosas. Con funciones como adaptive, varias formas de seleccionar elementos y fetchers avanzados, puedes crear scrapers que resistan mejor los cambios.

¡Explora la documentación y descubre cómo puede simplificar Scrapling tus próximos proyectos!