Creando un scraper – Parte 2: eligiendo tecnología y definiendo la estructura
A la hora de afrontar un proyecto de software existen infinidad de lenguajes de programación y de tecnologías que podemos escoger, y aunque en principio podríamos pensar que cualquiera nos podría valer, vamos a pensar las cualidades de nuestro proyecto, los factores limitantes y a partir de ahí escogeremos un lenguaje u otro.
Nuestro objetivo es realizar un programa que, dada una url inicial, sea capaz de obtener toda la información que queramos del sitio web en cuestión, y todo esto de manera automática. Esto se traduce en un programa que:
- Se descargue una página web
- Extraiga la información que queremos obtener de la página descargada
- Extraiga, además, todos los enlaces, almacenando aquellos que pertenezcan al mismo sitio web, y los añada a una cola
- Acceda al siguiente elemento de la cola y vuelva a empezar el proceso, así hasta que no haya más elementos en la lista
Por lo tanto, tenemos que buscar una tecnología orientada sobre todo a trabajar con peticiones HTTP. Hoy en día casi cualquier lenguaje de programación tiene, ya sea de manera nativa o mediante alguna biblioteca, permite realizar peticiones HTTP de manera mas o menos sencilla.
Personalmente me gusta usar NodeJS para todos aquellos proyectos que de una manera u otra están relacionados con el protocolo HTTP, puesto se trata de un entorno de ejecución orientado a eventos con entrada/salida no bloqueante, lo que permite procesar unas peticiones mientras otras están en proceso, sin necesidad de gestionar hilos de manera manual. También cuenta con un gran soporte de la comunidad y el lenguaje de programación que emplea es JavaScript, más que conocido y empleado por los desarrolladores de Frontend.
Una vez escogida la tecnología, vamos a definir la estructura en base las tareas que va a realizar nuestro scraper.
- En primer lugar necesitamos convertir una url a los datos que queremos obtener de esa url, es decir, la propia tarea de scraping. Esto lo vamos a cubrir en la siguiente entrada, un scraper en NodeJS.
- El siguiente paso es automatizar la tarea de scraping, es decir, diseñar un sistema de crawling que permita ir obteniendo de manera automática todas las urls de la página sobre la que queremos obtener los datos, y vaya lanzando el scraper sobre todas ellas.
- Para finalizar tendremos en consideración algunas buenas prácticas a tener en cuenta antes de poner en producción un sistema de scraping.
En las siguientes entradas cubriremos todos esos aspectos, con código de ejemplo totalmente funcional.