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

如何在R中自动下载Climate Explorer的美国各县Projections.csv数据

无需RSelenium:自动化下载The Climate Explorer美国各县数据

直接构造下载URL(最简便方案)

这类通过void(0)触发的下载,本质是JavaScript拼接参数请求后端接口,我们可以跳过前端交互,直接构造真实下载链接:

1. 确定下载接口格式

通过开发者工具分析页面请求,Projections.csv的下载接口为https://climate-explorer.org/api/download/projections.csv,核心参数包括:

  • region: 固定为county(县级数据)
  • fips: 5位县FIPS编码(比如01003)
  • scenario: 气候情景,可选rcp45/rcp85(对应页面情景选项)
  • variable: 数据变量,可选tavg(平均气温)、precip(降水)等(对应页面变量选项)

2. R批量下载代码

用httr包实现循环下载,示例如下:

library(httr)

# 待下载的县FIPS码列表
target_fips <- c("01003", "01005", "06001", "12001")

# 配置固定参数(根据需求调整)
download_params <- list(
  region = "county",
  scenario = "rcp85",
  variable = "tavg"
)

# 循环处理每个FIPS码
for (fips in target_fips) {
  # 拼接参数
  req_params <- c(download_params, fips = fips)
  
  # 发送GET请求
  res <- GET("https://climate-explorer.org/api/download/projections.csv", query = req_params)
  
  # 检查请求状态并保存文件
  if (res$status_code == 200) {
    writeBin(content(res, "raw"), paste0("county_proj_", fips, ".csv"))
    message("成功下载: ", fips)
  } else {
    warning("下载失败,FIPS: ", fips, " 状态码: ", res$status_code)
  }
  
  # 可选:添加延迟,避免请求过于频繁
  Sys.sleep(0.5)
}

3. 参数验证注意事项

  • FIPS码必须保留前导零(比如01003不能写成1003)
  • 参数值要与页面选项完全匹配,比如变量名需和页面下拉框标识一致
  • 如果遇到403/429错误,可延长Sys.sleep时间,或添加请求头模拟浏览器

备选方案:从页面源码提取参数

如果不确定参数细节,可先爬取页面源码提取内置参数:

library(rvest)
library(stringr)

for (fips in target_fips) {
  # 获取县数据页面源码
  page <- read_html(paste0("https://climate-explorer.org/county/", fips))
  
  # 提取页面中的JS参数(匹配下载相关变量)
  js_content <- page %>% html_nodes("script") %>% html_text()
  scenario <- str_extract(js_content, 'scenario:"([a-z0-9]+)"') %>% str_remove_all('scenario:"|"')
  variable <- str_extract(js_content, 'variable:"([a-z]+)"') %>% str_remove_all('variable:"|"')
  
  # 用提取到的参数构造请求
  req_params <- list(
    region = "county",
    fips = fips,
    scenario = scenario,
    variable = variable
  )
  
  # 下载步骤同前
  res <- GET("https://climate-explorer.org/api/download/projections.csv", query = req_params)
  if (res$status_code == 200) {
    writeBin(content(res, "raw"), paste0("county_proj_", fips, ".csv"))
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 22:58:27