我正在使用R进行网页抓取。过去,我已经成功使用RCurl
和rvest
之类的包来抓取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,因此目前停留在这里。指导深表感谢。