Web Scraping
- Lectura de información contenida en la página web suministrada.
url <- "https://es.wikipedia.org/wiki/Anexo:Sondeos_de_intenci%C3%B3n_de_voto_para_las_elecciones_presidenciales_de_Colombia_de_2022"
web_info <- url %>%
read_html()
web_info
## {html_document}
## <html class="client-nojs" lang="es" dir="ltr">
## [1] <head>\n<meta http-equiv="Content-Type" content="text/html; charset=UTF-8 ...
## [2] <body class="mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-104 ns-subjec ...
- Accediendo a la información que está en el nodo body.
web_info %>%
html_node("body")
## {html_node}
## <body class="mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-104 ns-subject mw-editable page-Anexo_Sondeos_de_intención_de_voto_para_las_elecciones_presidenciales_de_Colombia_de_2022 rootpage-Anexo_Sondeos_de_intención_de_voto_para_las_elecciones_presidenciales_de_Colombia_de_2022 skin-vector action-view skin-vector-legacy">
## [1] <div id="mw-page-base" class="noprint"></div>
## [2] <div id="mw-head-base" class="noprint"></div>
## [3] <div id="content" class="mw-body" role="main">\n\t<a id="top"></a>\n\t<di ...
## [4] <div id="mw-data-after-content">\n\t<div class="read-more-container"></di ...
## [5] <div id="mw-navigation">\n\t<h2>Menú de navegación</h2>\n\t<div id="mw-he ...
## [6] <footer id="footer" class="mw-footer" role="contentinfo"><ul id="footer-i ...
## [7] <script>(RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgPageParseR ...
- Se podría generar una base datos con la información de todas las tablas que están presentes en el body de la página web.
web_info %>%
html_node("body") %>%
html_table()
- La aproximación anterior junta todas las tablas en un solo
data.frame
, pero como no todas las tablas tienen la misma estructura sería más fácil de manipular si se extraen de manera individual y luego se busca la manera correcta de unirlas.
lista_tablas <-
web_info %>%
html_table(header = TRUE)
lista_tablas <- lista_tablas[-c(1)]
data_encuestas <-
lista_tablas %>%
map(.f = clean_data) %>%
bind_rows() %>%
mutate(across(
c(margen_de_error, alfredo_saade:rafael_nieto_loaiza),
clean_candidate
),
across(
c(margen_de_error, alfredo_saade:rafael_nieto_loaiza),
as.numeric
))
data_encuestas