【发布时间】:2017-06-25 07:27:32
【问题描述】:
我正在尝试使用此网页http://volcano.si.edu/search_eruption.cfm 来抓取数据。有两个下拉框要求过滤数据。我不需要过滤数据,因此我将这些数据留空,然后单击“Search Eruptions”继续到下一页。
不过,我注意到的是,与它应该具有的总列数(总共 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")
在我的浏览器中使用检查器,我可以看到两个过滤器是“eruption_category”和“country”,因为我不需要任何过滤数据,所以两者都是空白的。
最后,上面的代码似乎可以让我进入只有 5 列的表格的页面。但是,我仍然无法在下面的代码中使用 rvest 来抓取该表(使用 SelectorGadget 只抓取一列)。最后,这部分并不重要,因为正如我上面所说,我需要所有 24 列,而不仅仅是这 5 列。但是,如果你发现我在下面所做的任何错误,我将不胜感激.
Eruptions <- mydata %>%
read_html() %>%
html_nodes(".td8") %>%
html_text()
Eruptions
感谢您提供的任何帮助。
【问题讨论】:
-
看起来页面使用了 JavaScript 来呈现页面。最简单和最快的方法可能是下载 Excel 文件并进行处理。数据看起来是相对静态的,因此偶尔下载应该不是问题。
-
谢谢@Dave2e。不幸的是,我确实需要在 R 中这样做。而且,正如你所说,它主要是静态的,但仍然足够频繁地更新。