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

使用rvest爬取MLB Statcast Hitting表格时数据异常的问题

解决MLB Statcast Hitting表格爬取问题

问题分析

你两次尝试的问题根源:

  • 第一次用#statcastHitting定位的是包含多个表格的容器,html_table()会提取容器内所有表格,导致结果冗余。
  • 第二次用Selector Gadget生成的选择器错误定位了表头的零散元素,而非整个表格,所以得到空的tibble。

解决方案

方法一:静态爬取(优先尝试)

页面的目标表格属于静态渲染,只需精确定位表格元素即可:

library(rvest)
library(tidyverse)
library(janitor) # 可选,用于清理列名

url <- 'https://baseballsavant.mlb.com/league?season=2023#statcastHitting'

# 定位#statcastHitting容器内的目标表格,提取并整理
savant_teams <- url %>% 
  read_html() %>% 
  html_node('#statcastHitting table') %>%  # 精准定位表格元素
  html_table(header = TRUE) %>%  # 正确识别表头,排除跨列大标题
  clean_names() # 可选,将列名转为蛇形命名(如player_name)

# 查看结果
head(savant_teams)

方法二:动态渲染爬取(如果静态爬取失败)

若页面表格是JavaScript动态加载的,用RSelenium模拟浏览器加载页面:

library(RSelenium)
library(rvest)
library(tidyverse)
library(janitor)

# 启动Chrome浏览器驱动(需提前安装对应版本的ChromeDriver)
driver <- rsDriver(browser = "chrome", port = 4567L)
remDr <- driver[["client"]]

# 访问目标页面并等待加载完成
remDr$navigate('https://baseballsavant.mlb.com/league?season=2023#statcastHitting')
Sys.sleep(5) # 根据网络情况调整等待时间

# 获取页面源码并解析表格
page_source <- remDr$getPageSource()[[1]]
savant_teams <- page_source %>% 
  read_html() %>% 
  html_node('#statcastHitting table') %>% 
  html_table(header = TRUE) %>% 
  clean_names()

# 关闭浏览器
remDr$close()
driver$server$stop()

# 查看结果
head(savant_teams)

关键说明

  • #statcastHitting table直接定位目标容器内的表格,避免提取无关内容。
  • html_table(header = TRUE)会自动识别第一行作为表头,忽略顶部的跨列大标题,符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 15:46:18