gpt4 book ai didi

r - 使用 R 到 "click"网页上的下载文件按钮

转载 作者:行者123 更新时间:2023-12-04 12:28:46 28 4
gpt4 key购买 nike

我正在尝试使用此网页 http://volcano.si.edu/search_eruption.cfm抓取数据。有两个下拉框要求对数据进行过滤。我不需要过滤数据,所以我将这些数据留空,然后单击“搜索喷发”继续到下一页。
但是,我注意到的是,与它应该具有的列总数(总共 24 个)相比,结果表仅包含少量列(仅 5 个)。但是,如果您单击“将结果下载到 Excel”按钮并打开下载的文件,则所有 24 列都将存在。这就是我需要的。
所以,看起来这已经从抓取练习(使用 httr 和 rvest)变成了更困难的事情。但是,我对如何使用 R 实际“单击”“将结果下载到 Excel”按钮感到困惑。我的猜测是我将不得不使用 RSelenium,但这里是我的代码尝试将 httr 与 POST 一起使用,以防万一任何善良的人都可以找到的更简单的方法。我也试过使用 gdata、data.table、XML 等,但无济于事,这可能只是用户错误的结果。
此外,了解无法右键单击下载按钮以显示 URL 可能会有所帮助。

url <- "http://volcano.si.edu/database/search_eruption_results.cfm"

searchcriteria <- list(
eruption_category = "",
country = ""
)

mydata <- POST(url, body = "searchcriteria")
在我的浏览器中使用 Inspector,我能够看到两个过滤器是“eruption_category”和“country”,并且由于我不需要任何过滤数据,它们都将是空白的。
最后,上面的代码似乎会让我进入只有 5 列的表格的页面。但是,我仍然无法在下面的代码中使用 rvest 抓取这个表(使用 SelectorGadget 只抓取一列)。最后,这部分并不重要,因为正如我上面所说的,我需要所有 24 列,而不仅仅是这 5 列。但是,如果您发现我在下面所做的有任何错误,我将不胜感激.
Eruptions <- mydata %>%
read_html() %>%
html_nodes(".td8") %>%
html_text()
Eruptions
感谢您提供任何帮助。

最佳答案

只需模仿 POST它确实:

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

POST("http://volcano.si.edu/search_eruption_results.cfm",
body = list(bp = "", `eruption_category[]` = "", `country[]` = "", polygon = "", cp = "1"),
encode = "form") -> res

content(res, as="parsed") %>%
html_nodes("div.DivTableSearch") %>%
html_nodes("div.tr") %>%
map(html_children) %>%
map(html_text) %>%
map(as.list) %>%
map_df(setNames, c("volcano_name", "subregion", "eruption_type",
"start_date", "max_vei", "X1")) %>%
select(-X1)
## # A tibble: 750 × 5
## volcano_name subregion eruption_type start_date
## <chr> <chr> <chr> <chr>
## 1 Chirinkotan Kuril Islands Confirmed Eruption 2016 Nov 29
## 2 Zhupanovsky Kamchatka Peninsula Confirmed Eruption 2016 Nov 20
## 3 Kerinci Sumatra Confirmed Eruption 2016 Nov 15
## 4 Langila New Britain Confirmed Eruption 2016 Nov 3
## 5 Cleveland Aleutian Islands Confirmed Eruption 2016 Oct 24
## 6 Ebeko Kuril Islands Confirmed Eruption 2016 Oct 20
## 7 Ulawun New Britain Confirmed Eruption 2016 Oct 11
## 8 Karymsky Kamchatka Peninsula Confirmed Eruption 2016 Oct 5
## 9 Ubinas Peru Confirmed Eruption 2016 Oct 2
## 10 Rinjani Lesser Sunda Islands Confirmed Eruption 2016 Sep 27
## # ... with 740 more rows, and 1 more variables: max_vei <chr>

我认为可以推断出“Excel”部分,但如果不是:
POST("http://volcano.si.edu/search_eruption_excel.cfm", 
body = list(`eruption_category[]` = "",
`country[]` = ""),
encode = "form",
write_disk("eruptions.xls")) -> res

关于r - 使用 R 到 "click"网页上的下载文件按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42100244/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com