Skip to content

Instantly share code, notes, and snippets.

@jbkunst
Created January 30, 2020 18:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jbkunst/96cf7bf69f64bc27ea7bfafd788e6a21 to your computer and use it in GitHub Desktop.
Save jbkunst/96cf7bf69f64bc27ea7bfafd788e6a21 to your computer and use it in GitHub Desktop.
reclamos.r
library(tidyverse)
# library(tidytext)
library(rvest)
# obtiene el número de páginas por empresa
get_n_pages_from_empresa <- function(empresa = "falabella") {
message(empresa)
url <- read_html(file.path("https://www.reclamos.cl/empresa", empresa))
npag <- url %>%
html_nodes(".pager-last") %>%
html_attr("href") %>%
str_extract("[0-9]+$") %>%
as.numeric()
message("\tpaginas: ", npag)
return(npag)
}
get_n_pages_from_empresa("din")
# obtiene lista de links de una empresa y pagina en particular
get_links_reclamos_empresa_pagina <- function(empresa = "falabella", pagina = 1) {
message(empresa, " ", pagina)
# https://www.reclamos.cl/empresa/din?page=1
url <- str_c("https://www.reclamos.cl/empresa/", empresa, "?page=", pagina, collapse = "")
links <- read_html(url) %>%
html_nodes("tbody") %>%
html_nodes("a") %>%
html_attr("href")
}
# itera la funcion anterior
get_links_reclamos_empreas_hasta_pagina <- function(empresa = "falabella", hasta_pagina = 3) {
map(1:hasta_pagina, get_links_reclamos_empresa_pagina, empresa = empresa) %>%
unlist()
}
get_text_from_reclamo <- function(link = "https://www.reclamos.cl/falabella/reclamo/2020/jan/falabella_devolucion_de_dinero") {
message(link)
l <- read_html(link)
txt <- l %>%
html_nodes(".reclamo-texto-principal") %>%
html_text()
txt
}
# proceso -----------------------------------------------------------------
empresas <- c("falabella", "homecenter_sodimac")
data <- data_frame(
empresa = empresas
)
data <- data %>%
mutate(n_paginas = map_dbl(empresa, get_n_pages_from_empresa))
data
# acá miraremos a lo más 2 páginas, no corras esto si quieres hacer tooooooda la lectura
data <- data %>%
mutate(n_paginas = 2)
# sacamos los links hasta la pagina
data <- data %>%
mutate(link = map2(empresa, n_paginas, get_links_reclamos_empreas_hasta_pagina))
data
# desanidamos
data <- data %>%
select(empresa, link) %>%
unnest()
# recorremos cada link para extraer texto
data <- data %>%
mutate(
text = map(link, get_text_from_reclamo)
)
View(data)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment