Hoy vamos a comentarles esta técnica (Web Scraping) que realmente podemos decir que sirve para todo. Sirve para hacer pruebas sobre una aplicación web o sobre una página web. Sirve también para poder automatizar tareas en la red. Verdaderamente podemos decir que es un humano codificado.
Web Scraping para novatos.
Para los más inexpertos en el mundo web, el Web Scraping es una técnica para extraer datos de servicios web. Esta técnica se puede emplear de dos formas: para extraer datos o para hacer testing. Imagínese poder probar su aplicación web y ver que funciona correctamente sin tener que hacer un click. Imagínese poder ver los resultados de las últimas semanas de todos sus equipos favoritos. Esto es Web Scraping.
Fundamentos básicos para el Scraping.
Hay dos modos se hacer scraping. El primero es como hace google, con arañas. Estos bichitos van recorriendo las páginas web, descargando todo su contenido y siguiendo los enlaces. El segundo método es para conseguir datos de páginas web que necesiten algún modo de autenticación. Esta forma se basa en Cookies o Tokens de sesión y en AJAX (Técnica en el cliente para pedir datos. Información).
Scraping con simulación de usuario.
Esta técnica carga la página como un explorador normal, como el que esta usando para leer nuestra página. Por lo general se usan Frameworks o programas que simulan clicks y nos dejan extraer la información de la página web, que es lo que buscamos. Estas técnicas están bien para simular accesos a páginas en las que necesitemos un login o rellenar formularios sin tener que complicarnos buscando lo que realmente hace la página o perder tiempo hasta llegar a la información que nos interesa.
Scraping mediante HTTP
Esta segunda técnica se basa en cómo funciona un explorador. Tenemos que tener en cuenta que todo lo que vemos en una página web, como ésta, necesita ser descargado en nuestro ordenador, por lo tanto se puede simular. Tendríamos que hacer todas esas peticiones que hace el explorador al servidor automáticamente, pero de forma manual. Los exploradores actuales nos permiten ver las peticiones que hacen, incluyendo todo lo que envían y lo que reciben. Cuando hacemos click derecho en una página web suele aparecer un menú emergente con la opción de ‘Inspeccionar’; si elegimos esta opción se nos mostrará una pantalla con varias pestañas. La que nos interesa se suele llamar o ‘Red’ o ‘Network’. Es aquí donde encontraremos toda la información de las peticiones realizadas por el browser.
Diferencias
Como siempre que existen dos métodos para hacer una misma cosa, cada uno de ellos tiene sus ventajas e inconvenientes. Mediante el primer método se pueden realizar imágenes de la página, se puede simular perfectamente la interacción de los usuarios… pero peca de que necesita descargar todo lo que tiene la web para poder visualizarse, y eso necesita tiempo. En cambio con el segundo método no tenemos este problema, pero su complejidad es bastante más grande, siendo un método para gente más experta.
Ejemplo de Uso
Para poder mostrar las diferencias entre ambos métodos vamos a poner un ejemplo. Imaginemos que queremos acceder a nuestra información de una red social. Mediante el primer método solo habría que rellenar el log in, simular el click para entrar y ya tendríamos acceso a todo. Mediante el segundo método, en cambio, tendríamos que encontrar el método de login y conseguir los Tokens o Cookies, guardándolos. A partir de ahí tendríamos que hacer la llamada a la página de inicio y posteriormente obtendríamos la información que buscamos.
Problema
En el segundo método, si la página usa la tecnología AJAX tendríamos que hacer cada una de las llamadas que se realizan con esta técnica para poder obtener la información. O si el método de autenticación es demasiado complicado, esta segunda opción quizá nos complique demasiado la vida.
Tecnologías
Para llevar a cabo el primer método existen tecnologías como PhantomJS, SlimerJS y CasperJS. Esta última hemos tenido el placer de probarla. Funciona por encima de una de las anteriores, es decir que necesita de PhantomJS o de SlimerJS para poder funcionar. En nuestro caso lo hicimos con PhantomJS y la verdad es que funcionaba perfectamente y era fácil de usar, aunque de vez en cuando nos topamos con pequeñas complicaciones. Existen más tecnologías como Selenium o Scrapy.
Para el segundo método existe cUrl, que es una tecnología disponible para cualquier lenguaje de programación, o simplemente usar las librerías HTTP por defecto del lenguaje en cuestión. En nuestro caso lo hicimos con GuzzlePHP. Lo más complicado fue que en algunas páginas la autenticación era bastante enrevesada. Una vez autenticados todo fue coser y cantar.
Esperemos que les haya gustado y ante cualquier duda o problema que puedan tener no duden en comentárnoslo.