【问题标题】:How to scrape a live java script webpage in R?如何在 R 中抓取实时 Java 脚本网页?
【发布时间】:2016-01-28 10:36:49
【问题描述】:

我想从http://stats.statbroadcast.com/statmonitr/?id=107165 中逐一搜索。该链接会将您带到“拆分框”选项卡。我有兴趣通过播放标签以及主场统计数据和访客统计标签来抓取比赛。问题之一是,无论您切换到哪个选项卡,url 都不会改变。如果您使用选择器小工具,则所有选项卡的主要内容的 css-selector 也是相同的,即“#stats”。我是网络抓取的新手,大多数时候我可以使用包rvest 成功抓取一个 html 页面,但不幸的是,我不知道应该如何继续使用 javascript。我听说过 JSON,但我不确定如何解决所有选项卡具有相同 url 的问题。

我的主要目标是能够在比赛直播时通过比赛、主场统计数据和访客统计数据标签来抓取比赛。

任何帮助将不胜感激。如果我应该提供更多信息,请告诉我。

【问题讨论】:

    标签: javascript r web-scraping css-selectors


    【解决方案1】:

    您可以使用RSelenuim 执行以下操作:

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

    现在应该会打开一个 Firefox 窗口,您可以在其中像平常一样浏览。 doc &lt;- 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 &lt;- remDr$getPageSource()[[1]] 时捕获网站原样。这不是实时的。这是一张1次的照片。

    如果要抓取“期间 I”,请执行以下操作: 第一次导航到“Play by Play”(如上所示)-Sys.sleep(3) 直到网站加载完毕-然后导航到“Period I”,就像使用另一个 css-selector 导航到“Play by Play”一样。

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

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

    【讨论】:

    • 非常感谢,效果很好。我确实有一个跟随问题。当我检查元素时,我可以很容易地看到选项卡“play by play”的css选择器,正如你所说的那样,它是#bb_b6,但这将引导我播放play play的“最近”选项卡。我想找到“PERIOD ONE”和“PERIOD TWO”的选择器。我试过这段代码。 current_doc &lt;- html_nodes(current_doc, "#stats &gt; div:nth-child(3) &gt; div.sbmodule.ui-widget &gt; div.ui-widget-header &gt; a:nth-child(2) &gt; span"),但这只是打印“PERIOD ONE”。再次感谢您的帮助。
    • webElem &lt;- remDr$findElement(using = "css selector", '#bb_b6') remDr$mouseMoveToLocation(webElement = webElem) remDr$click(1) doc &lt;- remDr$getPageSource()[[1]] require(rvest) current_doc &lt;- read_html(doc) current_doc &lt;- html_nodes(current_doc, "#stats &gt; div:nth-child(3) &gt; div.sbmodule.ui-widget &gt; div.ui-widget-header &gt; a:nth-child(2) &gt; span") playbyplay &lt;- html_text(current_doc) 我认为这可能会帮助您查看我使用的更多代码。
    • 查看我的编辑。 doc &lt;- remDr$getPageSource()[[1]] 不会创建实时源代码图片:它是您的浏览器源代码的快照
    猜你喜欢
    • 2011-07-17
    • 1970-01-01
    • 2011-08-15
    • 2019-04-29
    • 1970-01-01
    • 2020-12-11
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    相关资源
    最近更新 更多