Skip to content

Instantly share code, notes, and snippets.

@ettorerizza
Created July 14, 2018 08:16
Show Gist options
  • Select an option

  • Save ettorerizza/7a6f8adba2a672b4463174daeaf1bcc7 to your computer and use it in GitHub Desktop.

Select an option

Save ettorerizza/7a6f8adba2a672b4463174daeaf1bcc7 to your computer and use it in GitHub Desktop.
Récupère dans Wikipedia.fr la liste des personnes décédées par année et par mois depuis 2010
library(rvest)
library(dplyr)
#création des urls de départ
main_url <- "https://fr.wikipedia.org/wiki/Décès_en_"
annee <- 2010:2018
urls <- paste0(main_url, annee)
#vecteur vide qui contiendra les urls des pages
liens <- vector()
#récolte des urls des pages
for (url in urls) {
liens <-
c(liens,
url %>% read_html() %>% html_nodes("p~ p+ ul a") %>% html_attr("href"))
}
#transforme les urls relatives en urls absolues
liens <- paste0("https://fr.wikipedia.org", liens)
#boucle principale qui récupérera les tableaux html dans chaque page
tableau <- list()
index <- 1
for (lien in liens) {
#le try({}) permet de passer outre les erreurs dues à de mauvais liens
try({
print(lien)
table <-
lien %>% read_html() %>% html_table(fill = TRUE) %>% data.frame()
#on transforme la colonne Source, inutile, pour y stocker l'URL de la page
table[, "Source"] <- lien
#on crée une colonne année en récupérant cette dernière dans l'url de la page
matches <- regexpr("\\d{4}$", lien)
table$annee <- lien %>% regmatches(matches, invert = FALSE)
#ajoute les dataframes à la liste
tableau[[index]] <- table
index <- index + 1
})
}
#fusionne la liste de dataframes en un seul
tableau_complet <- do.call("rbind", tableau)
#écriture du fichier
write.csv(tableau_complet, "tableau_complet.csv", fileEncoding = "UTF-8")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment