Muchas veces me interesa obtener información de páginas web para mis proyectos y estas no cuentan con APIs REST u otros medios para compartir su contenido. De hecho hace algún tiempo necesité unos textos y me encontré con este problema, por lo que decidí hacer un web scraper con NodeJS.

¿Qué es el web scraping?

Es una técnica que por medio de software extraemos información de sitios web. A veces incluso simulando un navegador web.

Para nuestro pequeño proyecto vamos a guardar en un archivo de texto algunas frases de los personajes de Rick & Morty que encontré en QuoteCatalog.

Haciendo un web scraper con NodeJS

Este pequeño tutorial toma en cuenta que tienes la última versión estable de NodeJS instalada y que te llevas bien con la terminal.

Creamos un nuevo proyecto con npm e instalamos las dependencias necesarias:

npm install -y && npm install request cheerio fs

El Proceso

Llegamos a la parte interesante. Para poder guardar cada frase que nos muestran en la página tenemos que saber la estructura del HTML:

Como se ven en la imagen, las frases están dentro de un tag de enlace con clase quote__text. Para obtenerlos desde NodeJS usaremos cheerio: un paquete que permite usar sintáxis como la de JQuery, pero en el servidor. Por lo que obtener todos los enlaces, será muy fácil:

const quoutes = $('a.quote__text');

¿Y cómo accedemos a la web?

Con el otro paquete: request. El cual nos permite hacer peticiones HTTP de manera sencilla. Así que obtendremos el body de la petición, lo pasaremos a cheerio y después buscamos los enlaces. En cuanto los tengamos, los guardamos en un archivo de texto.

Aquí el código:

Conclusión

Como se puede ver (y gracias a las librerías) el proceso es sumamente sencillo y  el código es muy facil de seguir. Inclusive, podríamos guardar toda la información en una base de datos y empezar a hacer análisis de la misma: ¡las posibilidades son infinitas!.