2017-09-14 3 views
0

Je voudrais trouver le nom des différents tournois/ligues de hockey de ce page. Le problème est que je me retrouve avec près de 8000 éléments, dont je ne vois pas pourquoi.Rselenium renvoie beaucoup plus d'éléments que prévu

library(RSelenium) 
rs <- rsDriver() 
remote <- rs$client 

remote$navigate("http://www.oddsportal.com/results/#hockey") 
elems <- remote$findElements("css selector", "#archive-tables > table a") 
# tournaments <- unlist(sapply(elems, function(x) x$getElementText())) This takes very long time due to the number of elements 

Répondre

1

Il ya actuellement beaucoup d'éléments du type que vous avez choisi de rechercher! Une façon de le voir est --- mon outil préféré --- est d'installer SelectorGadgets (une extension Chrome), et essayez de cliquer sur l'élément que vous essayiez de gratter (ou mieux, tapez #archive -tables a).

Vous verrez que beaucoup d'autres hyperliens dans d'autres catégories, comme le football, le tennis, le basketball, etc, que le RSelenium n'a aucun moyen de distinguer en fonction de vos commandes, flambent en jaune.

La solution suivante est naïve mais rapide. J'aime rvest, parce que j'aime utiliser la tuyauterie et il est beaucoup plus intuitive me --- installer rvest paquet, puis

library(rvest) 
odds_portal <- read_html("http://www.oddsportal.com/results/#hockey") 
temp <- odds_portal %>% html_nodes("#archive-tables a") %>% html_text() 
a <- which(temp=="Hockey") 
b <- which(temp=="Handball") 
temp[a:(b-1)] 

Je pense que les 320 éléments résultants sont plus proches de ce que vous vouliez, bien que vous avoir à filtrer certains d'entre eux par exemple Asie. Faites-moi savoir si cela ne se passe pas bien.