2017-09-02 1 views
0

Ich habe versucht, Daten von einer bestimmten Website mit selectorgadget in R zu webscrape. Zum Beispiel habe ich erfolgreich von http://www.dotabuff.com/heroes/abaddon/matchups vorher webscrapped. Normalerweise klicke ich einfach mit der Chrome-Erweiterung selectorgadget auf die gewünschten Tabellen und lege das Ergebnis der CSS-Auswahl wie folgt in den Code ein.Wie webscrape ich .dpbox-Tabelle mit Selectorgadget mit R (RVest)?

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

In diesem Fall funktioniert die html_nodes Funktion eine ganze Reihe von Knoten zurückgeben (340)

{xml_nodeset (340)} 

aber wenn ich versuche, http://www.dotapicker.com/heroes/Abaddon mit selectorgadget webscrape ab, die dieser Code erweist :

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

Leider zeigen keine Knoten tatsächlich nach dem html_nodes up-Funktion aufgerufen wird, und ich bekomme das Ergebnis

Ich habe das Gefühl, dass dies etwas mit der Verschachtelung des Tisches in einer Drop-Down-Box zu tun hat (im Vergleich zu früher war die Tabelle direkt auf der Webseite), aber ich bin nicht sicher, wie ich das umgehen soll .

Vielen Dank und ich freue mich über jede Hilfe!

Antwort

0

Es scheint, als ob diese Seite dynamisch einige Daten mit XHR lädt. In Chrome können Sie dies überprüfen, indem Sie die Netzwerk-Registerkarte aufrufen. Wenn Sie dies tun, werden Sie feststellen, dass eine Reihe von JSON-Dateien geladen werden. Sie können diese JSON-Dateien direkt scrappen und dann analysieren, um die benötigten Informationen zu extrahieren. Hier ist ein kurzes Beispiel:

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.