2017-08-30 2 views
1

J'essaie de gratter Hockey Reference pour un projet Data Science 101. Je rencontre des problèmes avec une table particulière. La page Web est: https://www.hockey-reference.com/boxscores/201611090BUF.html. La table désirée est sous le "rapport de statistiques avancé (toutes les situations)". J'ai essayé le code suivant:Utilisation de rvest pour gratter les données HTML

url="https://www.hockey-reference.com/boxscores/201611090BUF.html" 
ret <- url %>% 
    read_html()%>% 
    html_nodes(xpath='//*[contains(concat(" ", @class, " "), concat(" ", "right", " "))]') %>% 
    html_text() 

Ce code racler toutes les données des tableaux ci-dessus, mais arrête avant la table avancée. J'ai aussi essayé d'obtenir plus granulaire avec:

url="https://www.hockey-reference.com/boxscores/201611090BUF.html" 
ret <- url %>% 
    read_html()%>% 
    html_nodes(xpath='//*[(@id = "OTT_adv")]//*[contains(concat(" ", @class, " "), concat(" ", "right", " "))]') %>% 
    html_text() 

qui produit un « caractère (0) » messsage. Toute aide serait appréciée ... si ce n'est pas déjà clair, je suis assez nouveau à R. Merci!

Répondre

2

Les informations que vous essayez de saisir sont masquées en tant que commentaire sur la page Web. Voici une solution qui a besoin d'un peu de travail pour nettoyer vos résultats finaux:

library(rvest) 
url="https://www.hockey-reference.com/boxscores/201611090BUF.html" 

page<-read_html(url) # parse html 

commentedNodes<-page %>%     
    html_nodes('div.section_wrapper') %>% # select node with comment 
    html_nodes(xpath = 'comment()') # select comments within node 

#there are multiple (3) nodes containing comments 
#chose the 2 via trail and error 
output<-commentedNodes[2] %>% 
    html_text() %>%    # return contents as text 
    read_html() %>%    # parse text as html 
    html_nodes('table') %>%  # select table node 
    html_table()    # parse table and return data.frame 

sortie sera une liste de 2 éléments, un pour chaque table. Les noms des joueurs et les statistiques sont répétés plusieurs fois de chaque option disponible, ainsi vous devrez nettoyer ces données pour votre but final.