You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 07:09:39