2017-09-02 97 views
0

我一直在试图使用selectorgadget在R的特定网站的webscrape数据。例如,我成功地从http://www.dotabuff.com/heroes/abaddon/matchups webscraped之前。通常,我只需使用selectorgadget Chrome扩展单击我想要的表格,并将CSS选择结果放入代码中,如下所示。如何使用selector(Rvest)使用selectorgadget来webscrape .dpbox表?

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)} 

然而,当我尝试webscrape关闭http://www.dotapicker.com/heroes/Abaddon使用selectorgadget,这原来是这个代码:

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)} 

我觉得这与表格嵌套在下拉框中有关(与之前相比,表格在网页本身上是正确的),但我不确定如何绕过它。

谢谢,我感谢任何帮助!

回答

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.