如何使用带有R(rvest)的selectorgadget webscrape .dpbox表?

时间:2017-09-02 15:48:09

标签: html css r web-scraping rvest

我一直在尝试使用R中的selectorgadget从特定网站上抓取数据。例如,我之前成功地从http://www.dotabuff.com/heroes/abaddon/matchups进行了网页编辑。通常,我只需使用selectorgadget Chrome扩展程序点击我想要的表格,然后将CSS选择结果放入代码中,如下所示。

urlx <- "http://www.dotabuff.com/heroes/abaddon/matchups"
rawData <- html_text(html_nodes(read_html(urlx),"td:nth-child(4) , td:nth-child(3), .cell-xlarge"))

在这种情况下,html_nodes函数确实返回了一大堆节点(340)

{xml_nodeset (340)}

然而,当我尝试使用selectorgadget关闭http://www.dotapicker.com/heroes/Abaddon时,结果是这段代码:

urlx <- "http://www.dotapicker.com/heroes/abaddon"
rawData <- html_text(html_nodes(read_html(urlx),".ng-scope:nth-child(1) .ng-scope .ng-binding"))

不幸的是,在调用html_nodes函数后实际上没有节点出现,我得到了结果

{xml_nodeset (0)}

我觉得这与桌子在下拉框中的嵌套有关(与以前相比,桌子本身就在网页上),但我不知道如何绕过它。

谢谢你,我感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

似乎这个页面使用XHR动态加载一些数据。在Chrome中,您可以通过检查然后选择网络标签来检查。如果这样做,您将看到有许多json文件正在加载。您可以直接刮取这些json文件,然后解析它们以提取所需的信息。这是一个简单的例子:

library(httr)
library(jsonlite)

heroinfo_json <- GET("http://www.dotapicker.com/assets/json/data/heroinfo.json")
heroinfo_flat <- fromJSON(content(heroinfo_json, type = "text"))
#> No encoding supplied: defaulting to UTF-8.

winrates_json <- GET("http://www.dotapicker.com/assets/dynamic/winrates10d.json")
winrates_flat <- fromJSON(content(winrates_json, type = "text"))
#> No encoding supplied: defaulting to UTF-8.