使用rvest爬取Wunderground网站日观测表格失败求助
问题分析
你遇到的核心问题是:Wunderground的每日观测表格属于动态渲染内容,页面初始HTML里并不包含表格数据,而是在页面加载完成后通过JavaScript从后端接口获取并渲染的。rvest只能抓取页面初始的静态HTML,因此直接用XPath或CSS选择器无法定位到目标表格元素。
解决方案
以下提供两种可行的解决思路:
方法1:用RSelenium模拟浏览器渲染
通过模拟真实浏览器的加载行为,等待动态内容渲染完成后再抓取表格:
library(RSelenium) library(rvest) library(tidyverse) # 启动Chrome浏览器(需提前安装ChromeDriver并配置环境变量) driver <- rsDriver(browser = "chrome", port = 4567L) remDr <- driver[["client"]] # 访问目标页面 remDr$navigate("https://www.wunderground.com/history/monthly/pl/warsaw/EPWA") # 等待表格加载(可根据网络速度调整等待时长) Sys.sleep(5) # 获取渲染后的页面源码并解析表格 page_source <- remDr$getPageSource()[[1]] html <- read_html(page_source) daily_table <- html %>% html_nodes("lib-city-history-observation table") %>% html_table() %>% .[[1]] # 关闭浏览器及驱动 remDr$close() driver$server$stop() # 查看结果 print(daily_table)
方法2:直接调用后端API(更高效)
通过浏览器开发者工具的「网络」面板抓包,可找到页面获取历史数据的API接口,直接请求接口获取JSON格式数据,无需模拟浏览器:
library(httr) library(jsonlite) library(tidyverse) # 示例为2024年5月的API请求地址,可根据需要修改日期参数 api_url <- "https://api.weather.com/v1/location/EPWA:9:PL/observations/historical.json?apiKey=e1f10a1e78da46f5b10a1e78da96f525&units=m&startDate=20240501&endDate=20240531" # 发送API请求并解析数据 response <- GET(api_url) data <- fromJSON(content(response, "text")) # 提取核心观测字段并整理为表格 daily_obs <- data$observations %>% as_tibble() %>% select(valid_time_gmt, temp, dewPt, rh, wind_spd, precip_total) # 查看结果 print(daily_obs)
注:API的apiKey和参数规则可能随网站更新变化,若请求失败,可重新通过浏览器抓包获取最新的API地址及参数。
内容的提问来源于stack exchange,提问作者szymjot
相关产品推荐
相关产品推荐

