使用 rvest 抓取 HTML 数据

问题描述 投票:0回答:1

我正在尝试为数据科学 101 项目抓取曲棍球参考资料。我遇到了特定表的问题。网页是:https://www.hockey-reference.com/boxscores/201611090BUF.html。所需的表格位于“高级统计报告(所有情况)”下。我尝试过以下代码:

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

此代码从上面的表中抓取所有数据,但在高级表之前停止。我也尝试过更细化:

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()

产生“字符(0)”消息。任何和所有的帮助将不胜感激..如果还不清楚,我对 R 还很陌生。谢谢!

html r rvest
1个回答
4
投票

您试图获取的信息隐藏为网页上的评论。 这是一个需要一些工作来清理最终结果的解决方案:

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 trial and error
output<-commentedNodes[2] %>%
  html_text() %>%             # return contents as text
  read_html() %>%             # parse text as html
  html_elements('table') %>%     # select table node
  html_table()                # parse table and return data.frame                # parse table and return data.frame

输出将是一个包含 2 个元素的列表,每个元素对应一个表。 每个可用选项的玩家姓名和统计数据都会重复多次,因此您需要清理这些数据以达到最终目的。

© www.soinside.com 2019 - 2024. All rights reserved.