tak*_*kje 5 r web-scraping rvest
我正在尝试抓取这个网站。不幸的是,我想使用 rvest 抓取的数据隐藏在按钮(加号)后面。
我试着用 rvest 包来做,我使用以下代码:
library(rvest)
url <- 'https://transparency.entsoe.eu/generation/r2/actualGenerationPerGenerationUnit/show?name=&defaultValue=true&viewType=TABLE&areaType=BZN&atch=false&dateTime.dateTime=17.03.2017+00:00|UTC|DAYTIMERANGE&dateTime.endDateTime=17.03.2017+00:00|UTC|DAYTIMERANGE&area.values=CTY|10YBE----------2!BZN|10YBE----------2&productionType.values=B02&productionType.values=B03&productionType.values=B04&productionType.values=B05&productionType.values=B06&productionType.values=B07&productionType.values=B08&productionType.values=B09&productionType.values=B10&productionType.values=B11&productionType.values=B12&productionType.values=B13&productionType.values=B14&productionType.values=B15&productionType.values=B16&productionType.values=B17&productionType.values=B18&productionType.values=B19&productionType.values=B20&dateTime.timezone=UTC&dateTime.timezone_input=UTC&dv-datatable_length=100'
htmlpage <- html_session(url) %>%
read_html() %>%
html_nodes(".dv-value-cell") %>>%
html_table()
Run Code Online (Sandbox Code Playgroud)
“.dv-value-cell”是使用 SelectorGadget 从网站中提取的(在rvest 的一个小插曲中)。
但是,在我可以使用此代码之前,我仍然需要打开加号菜单。单击按钮之前,此子表中的数据不存在。因此,上面的代码将返回一个空值。
我使用了这个问题中描述的 Chrome 网络开发工具来监控当我点击按钮时会发生什么。根据该信息,我看到有对以下网址的请求(缩短为仅突出显示与原始网址的区别):
https://transparency.entsoe.eu/...&dateTime.timezone_input=UTC&dv-datatable-detail_22WAMERCO000010Y_22WAMERCO000008L_length=10&dv-datatable_length=50&detailId=22WAMERCO000010Y_22WAMERCO000008L
Run Code Online (Sandbox Code Playgroud)
如您所见,这是原始 url,但还有一个小的额外请求。但是,当我在浏览器中尝试此 url 时,它没有显示所需的结果。我一定错过了网站另外通过的东西。
根据 Chrome,此请求的结果正是我要查找的数据(右键单击 > 复制 > 复制结果)。所以应该有一种方法可以下载这个特定的数据。
我也发现了这个关于类似问题的问题,但不幸的是,该解决方案非常适合这种情况,并且没有给出一般性解释。
如何重现此浏览器请求,以便我收到相同的表?
如果您不抓取大量数据。我会建议你使用selenium
. 实际上,使用 Selenium 您可以单击按钮。您可以从使用 R 编程和 selenium 进行抓取开始。
您还可以使用 PhantomJS。它也类似于 selenium,但不需要浏览器。
我希望其中一位能有所帮助。