2016-04-03 5 views
0

Hallo auf dieser Webseite http://www.uefa.com/uefachampionsleague/season=2016/statistics/round=2000634/players/index.htmlFor-Schleife gehen nicht alle Iterationen, während entlang RSelenium verwendet

verwende ich versuchen, alle Spielernamen RSelenium klicken, die Links sind, kratzen einzelne Spieler mit einem anderen Spieler und weiter Webseiten zurück

# packages 
library(RSelenium) 
library(XML) 


# navigation to the site 
    remDr <- remoteDriver$new() 
    remDr$open() 
    remDr$navigate("http://www.uefa.com/uefachampionsleague/season=2016/statistics/round=2000634/players/index.html") 

# this will find all needed links 
    player<-remDr$findElements(using = 'xpath',value = "//span/a") 

# this confirms that there are 20 links 
    length(player) 


# this is loop which is supposed to click go to all 20 pages scrape some info and proceed 
for (i in 1:20) { 

    player<-remDr$findElements(using = 'xpath',value = "//span/a") 
    player[[i]]$clickElement() 
    Sys.sleep(5) 
    urlplayer<-remDr$getCurrentUrl() 
    urlplayer2<-htmlParse(urlplayer) 
    hraci<-xpathSApply(urlplayer2,path = "//ul[@class='innerText']/li",fun = xmlValue) 
    print(hraci) 
    remDr$goBack() 
} 

Ich führe diesen Code ein paar Mal, aber immer nach einigen Iterationen erhalten Sie den Fehler Error in player[[i]] : subscript out of bounds.

Wenn ich im letzten Versuch nach dem Wert des Iterators suche, war es 7, manchmal waren es 12 und andere Zahlen.

Ich habe keine Ahnung, warum ich diesen Fehler bekomme und könnte daher jemandes Hilfe schätzen!

Antwort

0

Ich schlage vor, einen anderen Ansatz, der nicht Selen benötigt:

library(XML) 
doc <- htmlParse("http://www.uefa.com/statistics/uefachampionsleague/season=2016/statistics/round=2000634/players/_loadRemaining.html", encoding = "UTF-8") 
n <- 3 
hrefs <- head(xpathSApply(doc, "//tr/td[1]/span/a", xmlGetAttr, "href"), n) 
players <- head(xpathSApply(doc, "//tr/td[1]/span/a", xmlValue), n) 
for (x in seq(hrefs)) 
    download.file(paste0("http://www.uefa.com", hrefs[x]), file.path(tempdir(), paste0(players[x], ".html"))) 

x <- 1 
readHTMLTable(file.path(tempdir(), paste0(players[x], ".html"))) 
+0

Eigentlich inzwischen heruntergeladen ich alle Webseiten usign XML aber meine Charaktere ging chaotisch. Ich sehe, dass Sie den Parameter encoding = "UTF-8" hinzugefügt haben. Ich habe versucht, Namen von Spielern von loadremaining.html zu bekommen und jetzt ist es korrekt. Vielen Dank dafür –