【问题标题】:Scrape webpage using Rvest使用 Rvest 抓取网页
【发布时间】:2020-07-18 04:03:30
【问题描述】:

我正在尝试从该网站page 加载一些数据。我想得到的信息部分是这个特定的部分:

我检查了页面,我看到了这个类&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())

【问题讨论】:

    标签: r web-scraping rvest


    【解决方案1】:

    它是动态填充的。如果您不介意一些非常小的差异,您可以发出两个请求。一个到初始 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
    

    【讨论】:

    • 嗨 QHarr。我认为您的系统运行良好,但我有一个以前没有的额外错误:“open.connection(x, "rb") 中的错误:已达到超时:[www.aemet.es] Connection timed 10001 毫秒后退出”。我试图使用this 来避免它,但我在数据部分出错(我修改了包含代码的帖子)
    • 你好,今天晚些时候我会看看
    猜你喜欢
    • 2019-02-17
    • 2019-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-15
    相关资源
    最近更新 更多