Очистить веб-страницу с помощью Rvest - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь загрузить некоторые данные из этой сети страница . Часть информации, которую я хочу получить, это указанная c часть:

enter image description here

Я проверил страницу и вижу этот класс и идентификатор:

enter image description here

Итак, я попытался так:

url = url(paste0("http://www.aemet.es/es/eltiempo/prediccion/avisos?w=mna"))
aa2 = html_nodes(read_html(url),
                 'div#listado-avisos.contenedor-tabla')

aa3 = data.frame(texto = str_replace_all(html_text(aa2),"[\r\n\t]" , ""),
                 stringsAsFactors = FALSE)

И я получаю информационный кадр со строкой без какой-либо информации ... Что я делаю не так?

Заранее спасибо.

Обновлено: Возможный ответ благодаря QHarr:

library(httr)
library(rvest)
library(jsonlite)
url = "https://www.aemet.es/es/eltiempo/prediccion/avisos?w=mna"
download.file(url, destfile = "scrapedpage.html", quiet=TRUE)
date_value <- read_html("scrapedpage.html") %>% html_node('#fecha-seleccionada-origen') %>% html_attr('value')

url2 = paste0('https://www.aemet.es/es/api-eltiempo/resumen-avisos-geojson/PB/', date_value , '/D+1')
download.file(url2, destfile = "scrapedpage2.html", quiet=TRUE)

data <- httr::GET(url = "scrapedpage2.html", httr::add_headers(.headers=headers)) 

avisos = jsonlite::parse_json(read_html("scrapedpage2.html") %>%
  html_node('p') %>% html_text())

1 Ответ

1 голос
/ 06 апреля 2020

Он динамически заселен. Если вы не возражаете против незначительных различий, вы можете отправить два запроса. Один к начальному URL, чтобы выбрать значение метки времени; затем выполните запрос API (как это делает страница), добавив предварительно извлеченную временную метку, чтобы получить прогнозы на правильный период. Разобрать ответ, чтобы получить на json, удерживая ависос

library(httr)
library(rvest)
library(jsonlite)

headers = c('Referer' = 'https://www.aemet.es/es/eltiempo/prediccion/avisos?w=mna')

date_value <- read_html('https://www.aemet.es/es/eltiempo/prediccion/avisos?w=mna') %>% html_node('#fecha-seleccionada-origen') %>% html_attr('value')

data <- httr::GET(url = paste0('https://www.aemet.es/es/api-eltiempo/resumen-avisos-geojson/PB/', date_value , '/D+1'), httr::add_headers(.headers=headers)) 

avisos <- jsonlite::parse_json(read_html(data$content) %>% html_node('p') %>% html_text())$objects$Avisos$geometries
...