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

使用read_html抓取Fangraphs表格:如何定位目标元素?

解决Fangraphs数据抓取中定位目标表格的问题

问题原因

Fangraphs页面包含多个表格(包括下拉菜单中的隐藏表格),直接使用html_nodes("table")会返回所有表格,指定固定序号极易出错,且部分隐藏表格仅含表头无数据。

可靠定位方案

以下几种方式可精准定位主数据表格:

1. 基于表头文本+非隐藏属性的XPath定位

通过筛选包含目标表头(如Name)且未被隐藏的表格,避免抓取到下拉菜单中的空表:

library(rvest)

url <- "https://www.fangraphs.com/leaders/major-league?pos=all&stats=pit&lg=all&season=2024&season1=2024&ind=0&qual=1&pageitems=2000000000&v_cr=202301&type=c%2C7%2C31%2C13%2C16%2C24%2C19%2C15%2C212&month=0"
page <- read_html(url)

# 定位包含Name表头且非隐藏的主表
target_table <- html_node(page, xpath = "//table[not(contains(@style, 'display:none')) and .//th[text()='Name']]")
player_stats <- html_table(target_table)

print(player_stats)

2. 基于父容器的定位

主数据表格通常包裹在特定的容器中(如table-wrapper类的div),通过父容器筛选更稳定:

target_table <- html_node(page, xpath = "//div[contains(@class, 'table-wrapper')]/table")
player_stats <- html_table(target_table)

3. 基于表格Class的CSS选择器

Fangraphs使用RadGrid组件,主表通常带有rgMasterTable类,直接通过CSS选择器定位:

target_table <- html_node(page, css = "table.rgMasterTable")
player_stats <- html_table(target_table)

注意事项

  • 避免使用固定表格序号,页面结构更新时序号会变化,导致抓取失效。
  • 当前URL返回的是静态HTML表格,上述方法可直接生效;若后续页面改为动态加载,可能需要结合RSelenium或playwright等工具模拟浏览器渲染。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 14:18:12