使用read_html抓取指定URL球员数据表时默认获取隐藏表的问题咨询
问题描述
尝试抓取Fangraphs平台的球员排行榜数据,但当前R代码返回的是隐藏的球队积分榜,而非目标球员统计数据。
原错误代码
url <- "https://www.fangraphs.com/leaders-legacy.aspx?pos=all&stats=bat&lg=all&qual=1&type=c,7,5,14,11,21,22,54,58&season=2024&month=1000&season1=2024&ind=0&team=0&rost=0&age=0&filter=&players=0&startdate=2024-03-18&enddate=2024-03-24&v_cr=legacy" l1 <- html_nodes(l1, 'table') daily <- html_table(l1, fill = TRUE)[[7]] tibble: 5 × 3X1 X2 X3l1 <- read_html(url)
当前错误输出
1 BAL CHW LAA
2 BOS CLE OAK
3 NYY DET SEA
4 TBR KCR TEX
5 TOR MIN HOU
期望输出示例
1 Mookie Betts LAD 6 9 2 1 0 0 0.3
2 Tyler Wade SDP 3 5 1 0 0 0 0.1
解决方案
1. 修正后的代码
library(rvest) library(tibble) url <- "https://www.fangraphs.com/leaders-legacy.aspx?pos=all&stats=bat&lg=all&qual=1&type=c,7,5,14,11,21,22,54,58&season=2024&month=1000&season1=2024&ind=0&team=0&rost=0&age=0&filter=&players=0&startdate=2024-03-18&enddate=2024-03-24&v_cr=legacy" # 先读取目标页面的HTML内容 l1 <- read_html(url) # 通过class精准定位球员排行榜表格 player_table <- html_nodes(l1, 'table.rgMasterTable') # 将HTML表格转换为数据框 daily <- html_table(player_table, fill = TRUE)[[1]] # 查看前几行结果 head(daily)
2. 关键修正点
- 代码顺序修正:原代码先调用
html_nodes再执行read_html,逻辑错误,需先读取页面再解析节点。 - 精准表格定位:使用
table.rgMasterTable作为CSS选择器,直接匹配球员统计数据所在的表格,避免误选隐藏的球队积分榜。 - 索引调整:目标表格是匹配结果的第1个元素,无需再用
[[7]]这种易出错的固定索引。
内容的提问来源于stack exchange,提问作者Aaron Wood
相关产品推荐
相关产品推荐

