使用 Rvest 抓取网页
Scrape webpage using Rvest
我正在尝试从该网站加载一些数据 page。我想要获取的信息部分是这个特定部分:
我检查了页面,我看到了这个 class&id:
所以我这样试过:
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())
它是动态填充的。如果您不介意一些非常细微的差异,您可以发出两个请求。一个到初始 url 以获取时间戳值;然后发出 API 请求(如页面所做的那样)添加先前检索到的时间戳,以便获得正确时间段的预测。解析响应以获得持有 avisos
的 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
我正在尝试从该网站加载一些数据 page。我想要获取的信息部分是这个特定部分:
我检查了页面,我看到了这个 class&id:
所以我这样试过:
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())
它是动态填充的。如果您不介意一些非常细微的差异,您可以发出两个请求。一个到初始 url 以获取时间戳值;然后发出 API 请求(如页面所做的那样)添加先前检索到的时间戳,以便获得正确时间段的预测。解析响应以获得持有 avisos
的 jsonlibrary(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