Scraping. Obtén cualquier dato de cualquier web de forma automatizada

Cada vez mas frecuente es muy útil y necesario para muchos sitios webs obtener datos de forma automatizada de otras webs, es lo que se conoce como «scraping». El mejor ejemplo que se viene a la mente y seguramente el mas utilizado es el de conocer los precios de la competencia y monitorizarlos para diferentes propósitos: desde adaptar los propios precios de tu e-commerce, estar pendiente de ofertas, vigilar como marca los precios de tus productos, adaptar sus campañas en shopping o amazon. Las posibilidades y necesidades son múltiples.

Profesionalmente he tenido que desarrollar infinidad de scrapers para muy diferentes tipos de webs, en su mayoría ecommerces para obtener precios de la competencia, pero también directorios de empresas, recetas de cocina y seguro que otras tantas si me pongo a hacer memoria. Entre ellos he peleado con google shopping, amazon, marketplaces, directorios de empresas nacionales… no me considero un experto en la materia pero algunos conocimientos puedo aportar.

No voy a entrar en el tema ético/legal que conlleva la práctica de scraping pero es seguro que hoy en día es una parte fundamental en muchos tipos de negocios y una actividad muy extendida en internet (el propio google y los robots de motores de búsqueda son en definitiva «scrapers»).

Me centraré en el aspecto puramente técnico.

La dificultad de realizar un scraping depende de muchos factores, básicamente:

  • Número de webs a scrapear.
  • Número de solicitudes concurrentes y frecuencia necesarias.
  • Las medidas de protección de la propia web contra técnicas de scraping.
  • El html/página de donde obtener los dados necesarios.
  • Necesidad de render javascript y simular acciones humanas (por ejemplo logearse o hacer click)
  • La estructura del sitio web.

Aunque cualquier desarrollador podría obtener cualquier dato de cualquier página puntual, pocos desarrolladores tienen los conocimientos necesarios para comprender la complejidad necesaria para trabajar en volumen y saltar todas las medidas de protección de las webs objetivo y es esto último lo que lo hace interesante a un perfil profesional más enfocado a sistemas donde conocer toda la cadena de tecnologías desde que se inicia una solicitud a un servidor y te devuelve los datos es de gran ayuda.

Existen infinidad de librerías (sobre todo en python), clases y herramientas que facilitan el desarrollo de un scraper, pero finalmente, en mi caso la mayoría de veces no utilicé ninguna de ellas. Todas necesitaban de grandes recursos hardware en cuanto era necesario realizar varios cientos de miles de solicitudes diarias y las supuestas ventajas de utilizar el DOM html con herramientas específicas para localizar el xpath del dato necesario no resultaba tan útil ni me aportaba una ventaja real a mis viejas conocidas expresiones regulares. Otro tema diferentes es cuando se necesita simular una interacción humana, en tal caso si es casi obligatorio el uso de estas herramientas.

El otro aspecto importante es el de contar con o bien un pool de ips amplio con subnets diferentes (en esto OVH es de gran ayuda) o con una buena empresa de proxys mundiales con ips de diferentes tipos (datacenter, residenciales, red móvil, por países) a precio razonable. En mi caso cuento con ambas opciones para optimizar costes; cuando las medidas de seguridad del website objetivo lo permiten, utilizo el propio pool de ips y si se complica, el proveedor proxy.

Luego hay mucho mas, aunque ya a un nivel mas alejado de lo que para mi es la parte mas emocionante. El diseño de la base de datos donde guardar los datos y la aplicación que utilice los datos que has obtenidos para el propósito deseado, ejemplo: generar un feed de datos optimizado para shopping con tus mejores productos según los precios tuyos y de la competencia y así optimizar el retorno de tu inversión en publicidad.

En próximas entradas me centraré en ejemplos mas prácticos he información mas concreta de como obtener datos de alguna web.

 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este formulario guarda los datos que indiques de nombre, email y comentario para poder realizar un seguimiento de los comentarios dejados en cada entrada.