El cajón de Drazul

El lugar donde duerme el pequeño dragón

Web Scraping Y Automatización Del Navegador Web

En algunas ocasiones nos enfrentamos a tediosas tareas de extracción de datos de alguna página o servicio web consistentes en la recopilación de cierto contenido para almacenarlo o tratarlo posteriormente. En otras ocasiones tenemos el caso contrario, en el que tenemos cierta información y queremos ponerla en un sitio web y no sirve con copiar y pegar una sola vez, o subir un archivo en cierto formato legible, típicamente CSV. En realidad, en ambos casos propuestos, nos enfrentamos al mismo problema: procesar a mano un número considerable de datos estructurados de la misma forma que tenemos que procesar periódicamente.

Para estas ocasiones debemos hacer uso de herramientas de web scraping, cuya traducción podría ser recortar una web. Estas herramientas nacieron con el propósito de automatizar las tareas de navegación y recopilación de información a través de la web y son ampliamente utilizadas por todo tipo de empresas o por particulares para las tareas más diversas. Como ejemplo representativo de estas herramientas encontramos los robots de los buscadores (Google, Bing, Yahoo, …), contados por cientos de miles y que recorren toda la web conocida saltando de enlace en enlace y recopilando toda la información que encuentran.

En este post voy a comentar algunas alternativas con las que he trasteado y algunas ventajas y desventajas de cada una. Estas herramietnas funcionan perfectamente en python pero son compatibles o tienen alternativas en otros lenguajes.

urllib2

La primera alternativa de todas es un simple navegador web al que le damos una url y nos devuelve el código fuente al que apunta, al estilo de curl si hablamos de shell scrip en sistemas GNU/Linux. En python tenemos el módulo urllib2 para esa tarea. Las ventajas más obvias son que es simple de utilizar, apenas cuesta nada en términos de rendimiento y se encuentra instalado por defecto. Por contra tenemos que las herramientas para extraer la información del código fuente recibido las tenemos que hacer nosotros, pero tenemos como ayuda el módulo de expresiones regulares re si la información tiene una estructura sencilla de detectar. Otro gran problema, y por el que se utilizan otras alternativas, es que solo sirve para páginas estáticas ya que no interpreta el código javascript que pueda estar presente en la página consultada.

Mechanize

Otra alternativa viable que sí interpreta el código javascript es el módulo Mechanize, que emula un navegador completo y nos permite incluso la edición de los headers que utilizamos en la comunicación HTTP y el manejo de cookies. Las ventajas de esta herramienta son obvias y citadas mayormente en la línea anterior. A estas ventajas se debe añadir que sigue siendo bastante ligero en cuanto a rendimiento. Por contra tenemos que la forma de manejarlo e interactuar con el DOM de la página sigue siendo de muy bajo nivel. Este sistema ya permite realizar prácticamente cualquier interacción con una web, desde acceder a ella y recopilar información hasta completar formularios y enviarlos o incluso descargar archivos de forma automática.

Selenium

La última herramienta que yo he utilizado, y la que me parece más completa, es Selenium. Esta herramienta sirve como puente entre un lenguaje de programación, en el que configuras las acciones a realizar, y un navegador web tradicional como pueden ser Firefox o Chrome. Una de las ventajas, a mi parecer imprescindibles durante el desarrollo, es el poder tener una interfaz gráfica completa que ahora nos proporciona alguno de estos navegadores. Además este módulo permite navegar por el DOM de la página mediante identificadores XPATH. Como ventajas a destacar, además de las mencionadas, es la posibilidad de utilizar cualquier navegador web teniendo, por ejemplo, PhantomJS como navegador web a utilizar en entornos donde no tengamos servidor gráfico instalado (como servidores de producción). Como gran desventaja tenemos la carga que incorpora el utilizar un navegador completo como Firefox o Chrome debido sobretodo a los tiempos de inicio que necesitan. Otra gran desventaja es que no soporta por defecto la descarga de archivos, o al menos no he encontrado la manera de hacerlo.

Comments