3. Fuentes:
- Pagina oficial del estado peruano
- SUNAT
- OSCE
# install.packages(c('rvest', 'dplyr'))
library(dplyr)
library(purrr)
library(rvest)
# Extraccion de las entidades a scrapear
entidades_estado_peruano <-
rvest::read_html('https://www.gob.pe/estado/poder-ejecutivo') %>%
rvest::html_elements(xpath = "//*[@class='w-full grid md:grid-cols-6 grid-cols-3 items-center bg-blue-100 mb-0 rounded-t p-1 gap-1 border-blue-100 border']") %>%
rvest::html_nodes('a') %>%
rvest::html_attr('href')
# Funcion para extraer las subentidades para cadad entidad
extraer_subentidades <- function(entidad) {
url <- paste0('https://www.gob.pe', entidad)
tryCatch(
url %>%
rvest::read_html() %>%
rvest::html_nodes('p a') %>%
rvest::html_attr('href'),
error = function(e) NULL
)
}
# Funcion para extraer los miembros de cada subentidad
extraer_miembros <- function(subentidad, entidad) {
resultados <- list()
for (pagina in 1:100) {
url <- paste0('https://www.gob.pe/institucion', subentidad, '/funcionarios?sheet=', pagina)
miembros <- tryCatch(
url %>%
rvest::read_html() %>%
rvest::html_elements(xpath = "//*[@class='flex flex-col w-full p-6']"),
error = function(e) NULL
)
if (length(miembros) == 0) break
aux_miembros <- miembros %>%
rvest::html_elements('img') %>%
rvest::html_attrs() %>%
unlist() %>%
unname()
nombres <- aux_miembros[seq(1, length(aux_miembros), 4)]
cargos <- miembros %>% rvest::html_elements('p') %>% rvest::html_text2()
url_imagen <- aux_miembros[seq(4, length(aux_miembros), 4)]
resultados[[pagina]] <- dplyr::tibble(
entidad = entidad,
subentidad = subentidad,
nombre = nombres,
cargo = cargos,
url_imagen = url_imagen
)
}
dplyr::bind_rows(resultados)
}
# Funcion de extraccion principal (3): (1) + (2)
extraer_datos_entidades <- function(entidades) {
entidades_scrap <- purrr::map(entidades, extraer_subentidades)
entidades_scrap <- stats::setNames(entidades_scrap, entidades)
resultados <- purrr::map_df(entidades, function(entidad) {
subentidades <- entidades_scrap[[entidad]]
if (is.null(subentidades)) return(dplyr::tibble())
purrr::map_df(subentidades, extraer_miembros, entidad = entidad)
})
resultados
}
# Extrayendo todos los miembros que componen el estado peruano
df_miembros_estado_peruano <- extraer_datos_entidades(entidades_estado_peruano)
# Proyccion a tabla visual
df_miembros_estado_peruano %>%
DT::datatable(
extensions = 'Buttons',
rownames = F,
filter = 'top',
caption = 'Miembros del estado peruano',
options = list(dom = 'Bfrtip',
buttons = list('excel', "csv")))