2016-07-01 75 views
-1

我試圖從網站上刮掉表格(https://www.freedraftguide.com/fantasy-football/rankings/quarterbacks),我嘗試了幾種方法但沒有成功。當我運行下面的代碼,我收到以下錯誤:XML content does not seem to be XMLR:XML內容似乎不是XML的網頁颳去

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

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

下面使用RCurl的方法都沒有工作之一:

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

沒有成功與httr

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

rvest沒有成功:

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

我與RSelenium不太熟悉,但這裏是一個基於文檔中的例子我嘗試:

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

數據正在加載jQuery,因此您需要使用可以運行它的東西加載頁面,例如RSelenium。 – alistaire

+0

剛剛嘗試使用RSelenium(不太熟悉它,但仍然根據文檔中的示例獲取錯誤)。希望有任何幫助,謝謝! – dadrivr

+0

我設法得到一個xml與rvest :: html,即使它給出了一個警告,指出rvest :: html被棄用......我沒有得到xml2 :: read_html的錯誤,雖然... – Choubi

回答

1

對於棘手的表像這樣的,我經常發現,從螢火蟲或開發工具發現的XPath通常是最有用的選擇。

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 

我意識到for循環不太理想,但有時刮網頁像這樣它可以是最好的選擇。