You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用rvest爬取Sports Reference大学篮球球员表格遇阻求助

解决rvest爬取Sports Reference大学篮球球员页面表格的问题

你的思路方向是对的——Sports Reference确实会把核心表格内容放在HTML注释里反爬,但细节处理上有几个坑导致代码失效,以下是修正后的完整方案,同时覆盖你需要的Advanced和Per 100 Poss两个表格:

修正后的代码

# 先安装并加载所需包(首次运行需安装)
install.packages(c("rvest", "dplyr", "janitor"))
library(rvest)
library(dplyr)
library(janitor)

# 目标页面URL
ad_url <- 'https://www.sports-reference.com/cbb/players/anthony-davis-5.html'

# 解析页面,提取包含表格的注释内容
page_content <- read_html(ad_url)
parsed_html <- page_content %>%
  # 只提取包含表格的注释,避免冗余内容干扰解析
  html_nodes(xpath = "//comment()[contains(., 'table')]") %>%
  html_text() %>%
  paste(collapse = "") %>%
  read_html()

# 提取Advanced表格
advanced_df <- parsed_html %>%
  html_node("#advanced") %>%
  html_table(header = TRUE, fill = TRUE) %>%
  # 清理列名并过滤无效行
  clean_names() %>%
  filter(!is.na(season))

# 提取Per 100 Poss表格(注意表格ID是per_poss)
per_100_poss_df <- parsed_html %>%
  html_node("#per_poss") %>%
  html_table(header = TRUE, fill = TRUE) %>%
  clean_names() %>%
  filter(!is.na(season))

关键修正点

  • 精准提取注释:原代码提取所有HTML注释,其中包含大量无关内容,可能导致解析失败。改用//comment()[contains(., 'table')]只抓取包含表格的注释,提升解析稳定性。
  • 表格ID对应:"Per 100 Poss"表格的HTML实际ID是#per_poss,不是直观的per_100_poss,这是容易踩的命名坑。
  • 表格清理:Sports Reference的表格默认有两行表头和底部汇总行,用clean_names()统一列名格式,filter(!is.na(season))过滤掉无效空行和汇总行。

内容的提问来源于stack exchange,提问作者Matt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 13:42:19