从没有 URL 的下拉菜单中抓取数据

问题描述 投票:0回答:1

我正在尝试自动化从 R 中的 The Climate Explorer 下载美国每个县的数据的过程。我感兴趣的数据要求用户从下拉菜单中选择,但我不知道如何自动化这一点。

我编写了一些代码,只需调整以下 URL 中的 5 位县 FIPS 代码即可导航到包含我想要下载的数据的相关页面:https://crt-climate-explorer.nemac。 org/climate_graphs/?fips=01003&id=days_tmax_lt_32f&zoom=7#。例如,只需在循环中用不同的代码替换“01003”代码。

此时,我需要单击“下载”下拉菜单并选择“Projections.csv”,这会触发下载我感兴趣的数据。我希望有一个与此操作关联的 URL,但是当我右键单击“Projections.csv”按钮并选择“复制链接”时,该链接仅显示为

Void(0);
。还有其他方法可以访问 URL 吗?或者我以错误的方式处理这个问题?看起来有一些使用 RSelenium 的相关帖子,但我很好奇是否有更简单的方法。

网站截图

r web-scraping
1个回答
0
投票

这可能看起来有点烦人,但您可以为每个度量发送 API 请求并将它们连接在一起。

library(tidyverse)
library(httr2)

measures <- c("loca:allMin:rcp85", "loca:allMax:rcp85", "loca:wMean:rcp85", "loca:allMin:rcp45", 
"loca:allMax:rcp45", "loca:wMean:rcp45")
request_bodies <- str_replace('{"grid":"measures","sdate":"2006-01-01","edate":"2099-12-31","elems":[{"name":"maxt","interval":"yly","duration":"yly","reduce":"cnt_lt_32","area_reduce":"county_mean"}],"county":"01003"}', "measures", measures)

reqs <- map(
  request_bodies, 
  ~ request("https://grid2.rcc-acis.org/GridData") %>%
    req_headers(
        Accept = "*/*",
        `Accept-Language` = "en-US,en;q=0.9",
        Origin = "https://crt-climate-explorer.nemac.org",
    ) |>
    req_body_raw(.x, "application/json")
)
  
resps <- reqs %>%
  req_perform_sequential()
  
resps %>%
  map(resp_body_json) %>%
  map2(measures,
    ~ pluck(.x, "data") %>%
      tibble(body = .) %>%
      unnest_wider(body, names_sep = "_") %>%
      mutate(body_2 = unlist(body_2)) %>%
      set_names(c("Year", .y))
  ) %>%
  reduce(full_join, by = "Year")

#> # A tibble: 94 × 7
#>    Year  `loca:allMin:rcp85` `loca:allMax:rcp85` `loca:wMean:rcp85`
#>    <chr>               <int>               <dbl>              <dbl>
#>  1 2006                    0                1.33             0.0774
#>  2 2007                    0                1.98             0.112
#>  3 2008                    0                1.26             0.120
#>  4 2009                    0                1.83             0.268
#>  5 2010                    0                1.37             0.111
#>  6 2011                    0                2.32             0.218
#>  7 2012                    0                1.27             0.0884
#>  8 2013                    0                2.08             0.265
#>  9 2014                    0                1.05             0.0968
#> 10 2015                    0                2.98             0.226
© www.soinside.com 2019 - 2024. All rights reserved.