Webscraping amb Rvest

Author

Mireia Camacho

Què és el Webscraping?

Recordem que fa un parell de classes vam estar explicant les possibles fonts de dades obertes a Internet.

El Webscraping és la tècnica que consisteix en extreure les dades que apareixen en una web (de forma estructurada o no estructurada) i afegir-les en un arxiu local (normalment excel, csv… però també pot ser un Word) amb el qual poguem treballar.

Webscraping amb Rvest

Rvest és una llibreria d’R que permet fer webscraping de forma senzilla i eficient.

No té gaires funcions, al contrari que altres llibreries que hem vist anteriorment, però ens permeten cobrir pràcticament totes les necessitats que ens puguin sorgir a l’hora d’extreure informació d’Internet.

Les funcions de Rvest

PAS 1:

  • read_html(): És la funció principal que s’ha d’utilitzar sempre. Permet extreure el codi HTML de la URL que li passem i que, a partir d’aquí, poguem treballar-hi.

PAS 2:

  • html_nodes(): Selecciona tots els elements (nodes) de l’HTML a partir de selectors CSS o XPath.

  • html_node(): Selecciona el primer element que coincideix amb el selector CSS o XPath que li hem passat a la funció.

PAS 3:

  • html_text(): Extreu el text dels elements que haguem seleccionat com a nodes.

  • html_attr(): Extreu l’atribut que especifiquem dels elements seleccionats com a nodes.

  • html_table(): Extreu els elements dins d’una taula HTML i els transforma en un dataframe.

  • html_children(): Extreu tots els elements que continguin els nodes seleccionats.

ALTRES:

  • read_xml(): Extreu la informació d’un arxiu XML de forma que sigui més senzill treballar-hi.

EXEMPLES D’ÚS

library(tidyverse)
library(rvest)

EXEMPLE 1

url <- "https://es.wikipedia.org/wiki/Anexo:Municipios_de_Catalu%C3%B1a_por_poblaci%C3%B3n"

html_pag <- read_html(url)

taula <- html_table(html_node(html_pag, "table"))

EXEMPLE 2

url2 <- "https://guia.barcelona.cat/agenda"

html_agenda <- read_html(url2)


titol <- html_nodes(html_agenda, "h3.properes") %>% html_text()

link_titol <- html_nodes(html_agenda, "h3.properes a") %>% html_attr("href")

resum <- html_nodes(html_agenda, "p.resum") %>% html_text()

lloc_data <- html_nodes(html_agenda, "div.dades") %>% html_text()


df_scrapeig <- data.frame(titol, link_titol, resum, lloc_data)