如何在R中抓取一个实时java脚本网页?

时间:2016-01-28 10:36:50

标签: javascript r web-scraping css-selectors

我想从http://stats.statbroadcast.com/statmonitr/?id=107165开始玩游戏。该链接将带您进入“拆分框”选项卡。我有兴趣通过播放选项卡以及主页统计信息和访问者统计信息选项卡来搜索游戏。其中一个问题是无论你切换到哪个标签,网址都不会改变。如果使用选择器小工具,则所有选项卡的主要内容的css选择器也是相同的,即“#stats”。我是网络抓取的新手,大部分时间我都可以使用包rvest成功抓取一个html页面,但遗憾的是我不知道如何继续使用javascript。我听说过JSON,但我不确定如何解决所有具有相同网址的标签问题。

我的主要目标是在比赛开始时通过比赛,主场统计数据和访客统计选项卡进行比赛。

非常感谢任何帮助。如果我应该提供更多信息,请告诉我。

1 个答案:

答案 0 :(得分:2)

您可以使用RSelenuim执行此操作,如下所示:

require(RSelenium)
RSelenium::startServer()
remDr <- remoteDriver()
remDr$open()
remDr$navigate("http://stats.statbroadcast.com/statmonitr/?id=107165")

现在应该打开一个firefox窗口,您可以像平常一样浏览。 doc <- remDr$getPageSource()为您提供当前网页的源代码。您可以使用rvest来删除此代码,如下所示:

doc <- remDr$getPageSource()[[1]]
require(rvest)
current_doc <- read_html(doc)

如果您想自动化“浏览”,您可以例如。导航到“Play by Play” - 页面如下:

webElem <- remDr$findElement(using = "css selector", '#bb_b6')
remDr$mouseMoveToLocation(webElement = webElem)
remDr$click(1)

最后:关闭远程驱动程序并关闭selenium-server

#shutdown
remDr$close()
browseURL("http://localhost:4444/selenium-server/driver/?cmd=shutDownSeleniumServer")

有关详细信息,请参阅: https://cran.r-project.org/web/packages/RSelenium/vignettes/RSelenium-basics.html

修改 执行current_doc时,doc <- remDr$getPageSource()[[1]]会将网站设为原型。这不是一个实时的。这是一张照片。

如果你想刮“期间I”,请按以下步骤操作: 首先导航到“Play by Play”(如上所示) - Sys.sleep(3)直到加载网站 - 然后导航到“Period I”,就像导航到“Play by Play”一样,只需使用另一个css选择器。

如果您到达“期间I”网页,请查看您的远程驱动程序(也就是您控制的浏览器窗口)。

到达后执行doc <- remDr$getPageSource()[[1]]并分析内容。