如何在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
相关产品推荐
相关产品推荐

