El santoral de El centón de un enano con R
Santoral español
En R existen diversos paquetes que permiten recopilar información de páginas publicadas en la internet. Cada uno de ellos se encarga de una tarea específica, como por ejemplo:
- Descargar una página web con el paquete
httr
. - Extraer las partes relevantes con el paquete
rvest
. - Procesar las cadenas de texto con el paquete
stringr
. - Guardar la información con el paquete
data.table
.
Bajo licencia CC BY-NC-ND
Santopedia publica el santoral español. Usaremos dicha página como ejemplo de aplicación de los paquetes anteriormente descritos.
Referencia
Código
library(httr) library(rvest) library(stringr) library(data.table)
Download the source
url <- "https://www.santopedia.com/santoral" file <- tempfile() # temporal file GET(url,write_disk(file)) # get the url and save it
Extract the relevant part
body_text <- read_html(file) %>% html_nodes("#content") %>% html_text()
Now, the boring steps… Split by months
pormeses <- strsplit(body_text,"Santoral de")[[1]][-1]
Split by days
pormesesdias <- lapply(1:12,function(i){ mes <- pormeses[[i]] print(i) print(mes) mes <- str_replace(mes,"[:alpha:]+\n[ 1]+\n","1|") mes <- str_replace_all(mes, " y otros\\.\\.\\.","") mes <- str_replace_all(mes, "\n\n","\n") mes <- str_replace_all(mes, "\n([ 0-9]+)\n","\n\\1|") print(mes) dt <- fread(text=mes,sep="|") dt$mes <- i dt })
Collect them
santoral <- rbindlist(pormesesdias) colnames(santoral) <- c("dia","santos","mes") santoral <- santoral[,.(mes,dia,santos)] santoral[,mesdia:=paste0(sprintf("%02d", mes),"-",sprintf("%02d", santoral$dia))] santoral # Alleluia!
Put the results in this directory
graphdirectory <- "graphics" dir.create(graphdirectory, showWarnings = FALSE) fwrite(santoral,file.path(graphdirectory,"santoral.csv"))
Write it a la emacs-lisp
stringelisp <- paste0("(",paste0(paste0("(\"",santoral$mesdia,"\" . \"",santoral$santos,"\")"),collapse="\n"),")") cat("\n\n\n") cat(stringelisp,sep="\n\n") cat("\n\n\n")