使用R语言rvest包爬取冰球参考网站球队统计表格求助
如何用rvest提取Hockey Reference上的Team Statistics表格数据?
我正在尝试从Hockey Reference的球队页面提取「Team Statistics」表格的数据。我之前试过XML包,现在用rvest包,已经用以下代码定位到了表格节点:
library(rvest) url <- html("https://www.hockey-reference.com/teams/CGY/2010.html") url %>% html_node(xpath = "//*[@id='team_stats']")
执行后得到了单个节点:{xml_node} <table class="sortable stats_tab...,但我不知道接下来怎么把这个节点转换成可用的表格数据框,希望能得到后续的方法指导。
嗨,很高兴你已经成功定位到目标表格节点了!接下来的步骤其实很简单,rvest自带的工具就能帮你快速把HTML表格转成R里能用的数据框,具体操作看下面:
1. 用html_table()直接提取数据
你只需要在已定位的节点后面链式调用html_table()函数,它会自动解析表格结构并转换成数据框。另外提一句,现在rvest更推荐用read_html()来读取网页,比旧版的html()兼容性更好,修改后的完整代码如下:
library(rvest) # 读取目标网页 url <- read_html("https://www.hockey-reference.com/teams/CGY/2010.html") # 定位表格并提取为数据框 team_stats_df <- url %>% html_node(xpath = "//*[@id='team_stats']") %>% html_table(header = TRUE)
header = TRUE参数会让表格的第一行自动成为数据框的列名,刚好符合这个页面表格的结构。
2. 清理可能的表头问题
Hockey Reference的表格偶尔会有合并表头的情况,提取后可能出现列名重复或者格式混乱的问题,你可以简单处理一下:
- 如果列名有重复,用
make.unique()自动生成唯一列名:
colnames(team_stats_df) <- make.unique(colnames(team_stats_df))
- 也可以手动修改列名让数据更直观:
colnames(team_stats_df) <- c("统计项", "球队数据", "联盟平均值")
3. 验证提取结果
最后用head(team_stats_df)查看前几行数据,确认所有统计项和对应数值都正确提取就大功告成啦!
内容的提问来源于stack exchange,提问作者Conner M.
相关产品推荐
相关产品推荐

