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

基于rvest从带选择项的网页提取降水数据的可行性及方法咨询

解决方案:使用R提取DEOS站点降水数据

1. 用rvest实现该数据请求是否可行?

可行,但需要结合httr包(rvest底层依赖httr,也可直接调用)模拟表单提交——因为目标站点的数据是通过提交站点、日期、访问密钥等参数后由后端动态生成的,并非静态页面内容。核心思路是解析网页表单结构,构造合法请求参数后提交,再抓取返回的表格数据。

2. 如何用R提取特定站点一年的降水数据?

以下是可直接复用的实操步骤与代码:

第一步:加载依赖包

library(rvest)
library(httr)
library(dplyr)

第二步:配置核心参数

# 替换为你的实际参数
site_id <- "目标站点ID" # 需从网页站点下拉框的源码中获取对应ID
start_date <- "2023-01-01" # 年度起始日期
end_date <- "2023-12-31" # 年度结束日期
api_key <- "你的访问密钥" # 网页提供的访问密钥
target_url <- "https://deos.udel.edu/data/daily_retrieval.php"

第三步:模拟表单提交并提取数据

# 加载目标页面,解析表单结构
page <- read_html(target_url)
form <- html_form(page)[[1]] # 若页面有多个表单,需根据实际调整索引

# 填充表单参数(字段名需对照网页源码确认,以下为示例)
filled_form <- set_values(form,
  station = site_id,
  start_date = start_date,
  end_date = end_date,
  key = api_key
)

# 提交表单并获取响应
response <- submit_form(session = html_session(target_url), 
                        form = filled_form, 
                        submit = "submit") # submit按钮的name需从源码确认

# 提取响应中的降水表格数据
precip_data <- response %>%
  html_element("table") %>%
  html_table(header = TRUE) %>%
  as_tibble()

关键注意事项

  • 字段名验证:需通过浏览器F12查看网页源码,确认表单字段的name属性(比如站点字段可能叫station,密钥字段可能叫access_key),确保参数名与网站要求完全一致。
  • 请求限制:若批量抓取多个站点/年度数据,建议加入Sys.sleep(1)延迟,避免触发网站反爬机制。
  • 数据清洗:返回的表格可能包含备注行、异常格式,需用dplyr::filter()或type.convert()做后续清洗,比如将降水列转换为数值型。

内容的提问来源于stack exchange,提问作者Josh B

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 03:12:11