(Español) Web Scraping con R: Los 40 Principales

Sorry, this entry is only available in European Spanish. For the sake of viewer convenience, the content is shown below in the alternative language. You may click the link to switch the active language.

web-scraperEn el artículo sobre la colaboración entre cantantes surgía el problema de cómo recuperar la información necesaria para contestar a las preguntas planteadas. Concretamente, necesitábamos recuperar la lista de Los 40 Principales, semana a semana, desde el año 2010 y para 7 países diferentes. Teniendo en cuenta que cada año tiene 52 semanas y que del año 2017 recuperamos las últimas 31, el problema se traduce en la necesidad de recuperar desde un total de 2.401 páginas. De cada una de estas páginas, debíamos obtener la lista de los cantantes que firman cada uno de estos 40 éxitos.

Al conjunto de técnicas y tecnologías que permiten la extracción de datos desde páginas web se les conoce como web scraping. En este artículo vamos a mostrar cómo efectuar un scrape o extracción de datos desde la web de Los 40 Principales con R.

Para empezar, necesitamos una librería que nos permita realizar la conexión HTTP a una página web, y facilite la lectura y extracción de sus componentes HTML. Para ello, R dispone del paquete rvest. Esta librería se inspira en las librerías beatiful soup de Python, y permite, mediante tuberías de comandos, definir de manera sencilla, el acceso y extracción de los datos que necesitamos desde la página web.

La primera vez deberemos instalar el paquete rvest en nuestro sistema R con la siguiente instrucción:

install.packages("rvest")

Para incluir las librerías en el entorno de trabajo, utilizamos la instrucción:

library(rvest)

Rvest permite la definición de tuberías de instrucciones para recuperar y extraer la información, pero por claridad en el proceso, sugiero primero recuperar el contenido de la página web, para posteriormente extraer con cada tubería la información necesaria. Así pues, para recuperar el contenido HTML de una página y almacenarlo en una variable, ejecutaríamos la siguiente instrucción:

html <- read_html("http://los40.com/lista40/2017/31")

Con esto ya tenemos en la variable html todo el contenido de la página y sólo debemos construir la tubería hacia los elementos que queramos extraer. Para ello, con el inspeccionador de página buscamos cuales son los elementos envolventes de la información a extraer, tal y como podemos ver en la siguiente captura:

inspeccionar

Generalmente por prueba y error, aunque dependerá de nuestra intuición y experiencia, encontramos los elementos HTML que nos permiten llegar con la librería rvest hasta la información deseada. A partir de aquí, lo codificamos mediante una tubería como la siguiente:

pipeline

Que codificada en R con la librería rvest quedaría:

artists <- html %>% html_nodes("div.article.estirar") %>% html_nodes("div.info_grupo h4") %>% html_text()

En el código anterior estamos acumulando en la variable artists el resultado de procesar el contenido html de la siguiente manera. En primer lugar, con html_nodes() se obtiene un array con la lista de los contenedores (div) de cada éxito musical. Este contenedor se identifica por las clases article y estirar, y consiste en el cuadro completo relativo a cada éxito musical, tal y como se aprecia en la siguiente imagen:

div1

A continuación, procesamos de nuevo con html_nodes() el contenido HTML del anterior contenedor para extraer únicamente el contenedor de la lista de los artistas, identificado en este caso por la clase info_grupo, dentro de la cual encontramos un elemento h4.

El último paso es extraer únicamente el valor textual, eliminando cualquier otro contenido HTML como por ejemplo los hiperenlaces (a href). Para ello utilizamos la función html_text().

En resumen:

  • La función html_read() permite recuperar el contenido HTML de una página y almacenarlo en una variable de R.
  • La función html_nodes() permite extraer un array de elementos del HTML. En el ejemplo, contenedores div con la información de cada éxito musical (título, artistas, posición en el ranking, evolución en el ranking...)
  • La función html_text() permite la extracción del contenido textual (inner text) de una sección de código HTML.
  • Mediante %>% se permite la generación de una tubería de información, donde el resultado de la función a la izquierda es inyectado como parámetro de la función a la derecha.
  • El resultado final es almacenado en una variable de R (artists) sobre la cual poder realizar los análisis necesarios.

Con esta pequeña guía de rvest y un poquito de programación en R, estaríamos en condiciones de recuperar desde la página web de Los 40 Principales la información necesaria para realizar nuestro análisis. A continuación dejo el snippet completo de código R en nuestro Github para quien lo desee reproducir:

https://github.com/autoritas/RD-Lab/blob/master/src/WebScrapingR/los40.r

En un próximo artículo realizaré un análisis de las colaboraciones entre artistas mediante la herramienta Gephi, de modo que podamos conocer cuáles de estas colaboraciones están dominando el panorama musical en cada uno de los países, según las listas de éxito de Los 40 Principales.

Submit a Comment

Your email address will not be published. Required fields are marked *