Ni siquiera sabía que se llamaban “scrapers” , “crawlers” o “spiders”, pero ya los había utilizado como solución en algunos programas que por alguna que otra razón escribí. Resulta ser que “web scraping” según la Wiki, es…

una técnica utilizada por softwares de computadora para extraer información de sitios webs. Usualmente, simula la navegación de un humano en la World Wide Web ya sea utilizando el protocolo HTTP manualmente, o incrustando un navegador en una aplicación…”

Típicamente esta técnica de análisis y procesamiento es utilizada en buscadores, aplicaciones para minería de datos, tendencias de mercado, y otras áreas. Para nada soy un experto en ninguno de los temas anteriores, pero como desarrollador que ha utilizado el “scraping” varias veces en cosas sencillas, he escrito este post para comentarles las ventajas que tiene procesar automáticamente la web en nuestras aplicaciones. 🙂

Pero … ¿por qué procesar la web en nuestras aplicaciones?

Precisamente porque en la web existe mucha información que ofrece respuestas y datos valiosos, pero que son sumamente difíciles (si no imposibles 🙁 ) de recopilar siendo un internauta humano. Es por eso que puedes lograr que manipulen y analicen el código de las páginas para:

Ahorrar esfuerzo a los usuarios:si bien la Web nos ofrece muchas ventajas, también es cierto que muchas veces conseguir la información que necesitamos puede costarnos tiempo y trabajo. Un fragmento de código que lea y analice datos de ciertos sitios webs, puede librarte de…

  • Estar visitando constantemente una o varias páginas para verificar si un dato se ha actualizado.

  • Lidiar con sistemas de navegación mal diseñados y dar mil clicks para encontrar algo específico en un sitio.

Sacando partido de la web haciendo scraping_html_m18203b63

Esta app que escribí hace bastante, me permite buscar productos en un sitio de ventas mediante expresiones regulares, y dar seguimiento a sus precios cada un tiempo determinado.

Brindar soluciones astutas: ¡No fuerces al usuario a hacer trabajo extra!Muchas de las respuestas ya están en la Web esperando a que las uses. Además esto muchas veces brinda una solución más elegante y libre de parámetros y opciones que suministrar.

Por ejemplo, para una parte de mi tesis escribí un módulo que haciendo “scraping” a una dirección URL, encontrara los repositorios de NOVA y Ubuntu bajo esa dirección. De esa forma el usuario solo debía seleccionar los repositorios y componentes que quería utilizar y no lidiar manualmente con un “sources.list” y otras herramientas de Apt.

Puedes idear muchas soluciones interesantes que sigan por esta línea.

Sacando partido de la web haciendo scraping_html_m14c69427

Para mantener actualizado el clima de mi Android, escribí un “scrapper” que busca el tiempo en varias páginas web y engaña a la app “AccurateWeather“ con un XML idéntico al que normalmente el software utiliza. Hoy fue un mediodía soleado… con bastante calor. 😀

Así debes empezar.

Algunos consejos para cuando tengas que usar “scraping” en una aplicación según mi experiencia.

  1. Realiza primero un análisis del sitio (o los sitios) que vayas a “scrapear”. Ese es sin dudas el punto de partida: los URL que devuelven la información que necesites. Navega por los sitios y ve mirando cómo cambian las direcciones cuando entras en cada sección o sub-sección, así como el comportamiento de los parámetros y valores.

  2. Consíguete un buen “parser” HTML. La humanidad ha avanzado mucho como para que interpretes el código a golpe de funciones de cadenas. Tómate un tiempo para buscar un buen “parser” según el lenguaje que utilices y seguro que encuentras alguno que valga la pena.

En algunos lenguajes es fácil encontrar varios. Por ejemplo en Python te recomiendo BeautifulSoup. En oros no hay muchas opciones :-/ , por ejemplo en C lo más decente que he utilizado es curl.

No uses editores XML, porque muchos sitios no validan ni siquiera que sus páginas estén bien formadas y algunos parsers no saben lidiar con esto. Va a traerte bastantes problemas.

  1. Escribe tu lógica de “scraping”. O sea, la parte del software en que defines cómo vas a hacer y procesar las solicitudes, cómo vas a guardar los URL que vayas visitando, etc. Generalmente se comienza por un conjunto y luego recursivamente el conjunto va creciendo. En esta partehay un montón de cosas por definir y en las cuales la teoría de estos temas puede ayudarte mucho.

  2. O usa un API especializado, como por ejemplo Scrapy para Python, o Web-Harvest para Java. Son cómodos porque solo tienes que implementar las reglas de extracción y de visita. Algunas veces no se puede hacer TODO con ellos (al menos así me ha pasado con los dos anteriores), pero sí gran parte.

Y nunca olvides que…

  • Si usas una lógica bien fea y que no tiene en cuenta una serie de cosas, el servidor puede vanear tu IP por exceso de solicitudeso porque demoras muy poco entre cada una. Esto cambia en dependencia de la página.

  • Debes tener en cuenta la paginación,porque la mayoría de las veces no todos los datos son visibles en una sola página. Muchas veces puedes resolverlo también con la URL, pero en algunos sitios no.

  • Hay contenidos que no pueden verse sin autenticarse, sin escribir un captcha u otras validaciones. Algunos API tienen maneras de lidiar con la autenticación, de lo contrario asegúrate “a mano” que estás autenticado antes de comenzar la búsqueda.

En cuanto a lo segundo… jaja… bueno si se enteran como pasar un captcha me lo dicen para aprender yo también. 😀

  • Existen páginas con una definición tan pobre y mal estructurada que es casi imposible hacer “scraping” a ellas 🙁 . Es algo sin remedio. La definición de un sitio debe permitir la validación de su contenido a favor de que haya forma de encontrar lo relevante.

Espero que les haya sido de utilidad el post. 🙂 Puedes encontrar más información sobre este tema y sobre cómo utilizarlo en tus proyectos personales en la página de “Web Scraping” de la Wikipedia y otras fuentes de internet.

¡Happy hacking! 😀

Más información

es.wikipedia.org