2016-07-01 17 views
-1

Ich versuche, den Tisch von einer Website (https://www.freedraftguide.com/fantasy-football/rankings/quarterbacks) zu kratzen und ich habe mehrere Ansätze ohne Erfolg versucht. Wenn ich den Code ausführen, bekomme ich folgende Fehlermeldung: XML content does not seem to be XMLScraping Website mit R: XML-Inhalt scheint nicht XML

library("XML") 
library("RCurl") 

readHTMLTable("https://www.freedraftguide.com/fantasy-football/rankings/quarterbacks") 

Keiner der Ansätze unter Verwendung von RCurl arbeitete entweder:

rts.url <- getURL("https://www.freedraftguide.com/fantasy-football/rankings/quarterbacks") 
xmlParse(rts.url) 
xmlInternalTreeParse(rts.url) 
readHTMLTable(rts.url) 

Kein Erfolg mit httr:

library("httr") 
GET("https://www.freedraftguide.com/fantasy-football/rankings/quarterbacks") 

Kein Erfolg mit rvest:

library("rvest") 
read_html("https://www.freedraftguide.com/fantasy-football/rankings/quarterbacks") 

Ich bin weniger vertraut mit RSelenium, aber hier ist mein Versuch, am Beispiel in der Dokumentation basiert:

library("RSelenium") 

startServer() 
remDr <- remoteDriver$new() 
remDr$open() 
remDr$navigate("https://www.freedraftguide.com/fantasy-football/rankings/quarterbacks") 

Error: Summary: UnknownError 
Detail: An unknown server-side error occurred while processing the command. 
class: org.openqa.selenium.UnsupportedCommandException 
+0

Die Daten werden mit jQuery geladen, also müssen Sie die Seite mit etwas laden, das sie ausführen kann, wie RSelenium. – alistaire

+0

Nur einen Versuch mit RSelenium hinzugefügt (weniger vertraut mit ihm, aber immer noch ein Fehler basierend auf dem Beispiel in der Dokumentation). Würde mich über jede Hilfe freuen, danke! – dadrivr

+0

Ich habe es geschafft, ein xml mit rvest :: html zu erhalten, obwohl es eine Warnung gibt, die besagt, dass rvest :: html veraltet ist ... Ich habe keinen Fehler mit xml2 :: read_html bekommen, obwohl ... – Choubi

Antwort

1

Für schwierige Tabellen wie diese, finde ich oft, dass von Firebug oder Developer Tools zu finden, XPath ist oft die hilfreichste Option.

library("RSelenium") 

startServer() 
remDr <- remoteDriver$new() 
remDr$open() 
remDr$navigate("https://www.freedraftguide.com/fantasy-football/rankings/quarterbacks") 
player_table <- remDr$findElement('xpath', '/html/body/div[2]/div[3]/table/tbody') 

print(player_table$getElementText()) 

players <- strsplit(player_table$getElementText()[[1]], "\n") 

final <- c() 
for(x in players[[1]]){ 
    temp <- unlist(strsplit(x, " ")) 
    final <- rbind(final, temp) 
} 

final <- data.frame(final) 

R> print(head(final)) 
    X1  X2    X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 
1 1. Aaron  Rodgers GNB 4 39 4391 0 2 311 54 27 
2 2.  Cam   Newton CAR 7 33 3982 0 9 651 130 27 
3 3. Andrew   Luck IND 10 36 4769 0 2 283 60 26 
4 4. Drew   Brees NOR 5 33 4925 0 1 41 26 22 
5 5.  Ben Roethlisberger PIT 8 35 4916 0 0 43 31 20 
6 6. Russell   Wilson SEA 5 34 4063 0 4 592 109 20 

Ich stelle fest, dass die for Schleife weniger als ideal ist, aber manchmal für Web-Seiten wie diese Schaben kann es die beste Option sein.