Skip to content

Instantly share code, notes, and snippets.

@leobarone
Last active April 11, 2019 13:25
Show Gist options
  • Save leobarone/86bd5c9bb62076f0872c8d152434b0b3 to your computer and use it in GitHub Desktop.
Save leobarone/86bd5c9bb62076f0872c8d152434b0b3 to your computer and use it in GitHub Desktop.
Raspagem do cardapio no app prato aberto com RSelenium
library(RSelenium)
library(rvest)
library(stringr)
library(dplyr)
remDr <- remoteDriver(port = 4445L)
remDr$open(silent = TRUE)
url_prato_aberto <- "https://pratoaberto.sme.prefeitura.sp.gov.br/"
remDr$navigate(url_prato_aberto)
# Procurar o CEI Suzana e Fev 2018 e expandir a janela
dias_semana_vetor <- c('Segunda-feira', 'Terça-feira',
'Quarta-feira', 'Quinta-feira',
'Sexta-feira')
dados <- NULL
proximo_mes_xpath <- '/html/body/app-root/div/app-school/section/div[1]/div[1]/div/responsive-date-picker/div/div[2]/div/div/div[1]/div[3]/em'
for (m in 1:15) {
dia_xpath_base <- '/html/body/app-root/div/app-school/section/div[1]/div[1]/div/responsive-date-picker/div/div[2]/div/div/div[4]/div[2]/div[LINHA]/div[COLUNA]/div/b'
for (i in 1:6){
for (j in 2:5){
dia_xpath <- dia_xpath_base %>%
str_replace("LINHA", as.character(i)) %>%
str_replace("COLUNA", as.character(j))
erro <- try(remDr$findElement(using = "xpath", dia_xpath)$clickElement(), silent = T)
if (!(class(erro) == "try-error")){
pagina <- read_html(remDr$getPageSource()[[1]])
dia <- pagina %>%
html_node(xpath = dia_xpath) %>%
html_text() %>%
as.numeric()
mes <- pagina %>%
html_node(xpath = '//*[@class = "monyear"]') %>%
html_text
idade_xpath_base <- '//*[@class = "age-item"][IDADE]'
refeicao_xpath_base <- '//*[@class = "card-item"][ITEM]'
for (k in 1:6){
idade_xpath <- idade_xpath_base %>%
str_replace("IDADE", as.character(k))
idade <- pagina %>%
html_node(xpath = paste0(idade_xpath, '/div[1]')) %>%
html_text
n_refeicoes <- pagina %>%
html_nodes(xpath = paste0(idade_xpath, '/div[@class = "card-item"]')) %>%
length()
for (l in 1:n_refeicoes){
refeicao_xpath <- refeicao_xpath_base %>%
str_replace("ITEM", as.character(l))
refeicao <- pagina %>%
html_nodes(xpath = paste0(idade_xpath, refeicao_xpath, '//h4')) %>%
html_text
cardapio <- pagina %>%
html_nodes(xpath = paste0(idade_xpath, refeicao_xpath, '//*[@class = "food-title"]')) %>%
html_text
if(length(cardapio) > 0){
tabela <- data.frame(mes, dia,
dia_semana = dias_semana_vetor[j-1],
idade, refeicao,
cardapio)
print(head(tabela))
dados <- bind_rows(dados, tabela)
}
}
}
}
}
}
remDr$findElement(using = "xpath", proximo_mes_xpath)$clickElement()
}
save.image("cardapio_prato_aberto.RData")
faixas_idade <- c('0 a 5 meses', '6 meses', '7 meses', '8 a 11 meses','1 ano', '2 a 6 anos')
for (faixa in faixas_idade){
dados$idade[str_detect(dados$idade, faixa)] <- faixa
}
dados$ano <- str_sub(dados$mes, nchar(dados$mes) - 3, nchar(dados$mes))
dados$mes <- str_sub(dados$mes, 1, nchar(dados$mes) - 5)
dados <- dados[, c("ano", "mes", "dia", "dia_semana", "idade", "refeicao", "cardapio")]
dados2 <- dados %>%
mutate(mes = factor(mes, ordered = T, levels = c("Janeiro", "Fevereiro", "Março",
"Abril", "Maio", "Junho",
"Julho", "Agosto", "Setembro",
"Outubro", "Novembro", "Dezembro"))) %>%
group_by(ano, mes, dia, dia_semana, idade, refeicao) %>%
summarise(cardapio = paste(cardapio, collapse = " ")) %>%
ungroup()
readr::write_csv(dados, "cardapio_20190411.csv")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment