RSelenium:执行javascript生成表,然后抓取数据

时间:2018-08-19 23:36:36

标签: javascript rselenium

我正在使用R进行网页抓取。过去,我已经成功使用RCurlrvest之类的包来抓取HTML,但是我现在试图抓取的webpage则将数据(过去的彩票结果)隐藏在javascript后面。我发现this question很有帮助,但是我需要做的更加复杂。在浏览器中浏览乐透结果页面时,一(1)按所需的开始和结束日期(我有兴趣在2017年7月31日至今)进行过滤,然后(2)单击所需的乐透抽奖(其整数值为标识符,在JavaScript源代码中称为drawNumber的变量);然后该绘图的相关数据将显示为HTML。

我已使用以下代码成功导航到RSelenium中的网站:

library(RSelenium)
library(rvest)
shell('docker pull selenium/standalone-firefox:2.53.0')
shell('docker run -d -p 4445:4444 selenium/standalone-firefox:2.53.0')
remDr <- remoteDriver(remoteServerAddr = myIP, port = 4445L, browserName = "firefox")
remDr$open()
remDr$navigate("https://www.nationallottery.co.za/lotto-history")

(这里myIP代表我的虚拟机的IP地址)。

打开结果的HTML代码(在javascript脚本内)为: <input type="hidden" class="hiddenData" value="'+value.drawNumber+'" >

我认为我需要以下伪代码:

for (d in 1732:1841) { # range of drawNumber I am interested in
 Pull up HTML data table for draw d (using javascript)
 Extract relevant bits from the HTML
}

提取部分不会有问题,但是我不确定如何提取相关数据。我可以在page source中标识相关的脚本,并假定需要使用这些脚本或其中的一些脚本,然后使用executeScript函数(但使用drawNumber)运行它们输入为d的变量,然后输出随后加载的页面的HTML,以及抽奖d的乐透结果数据。由于不熟悉javascript,因此目前停留在这里。指导深表感谢。

0 个答案:

没有答案