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

使用R爬取2022赛季Norfolk Tides棒球数据遇问题求协助

问题排查与解决方案

问题原因

你的代码核心问题是选择器定位错误:.scrolling-table是包裹表格的<div>容器,而非表格本身。直接对div调用html_table()会导致解析异常,仅返回列名和空行。另外,页面表格存在合并单元格(比如月份分组行),默认的html_table()参数无法处理这类结构。

解决方案一:修正选择器并处理合并单元格

使用更精确的选择器定位表格,同时开启fill=TRUE参数填充合并单元格的缺失值:

library(rvest)
library(dplyr)

url = "https://www.baseballamerica.com/teams/3181/norfolk-tides/schedule/?year=2022"

# 修正选择器,定位到div内部的table元素
data <- url %>% 
  read_html() %>%
  html_element(".scrolling-table table") %>% 
  html_table(fill = TRUE)  # fill=TRUE处理合并单元格

# 过滤掉空行(比如月份标题行)
clean_data <- data %>% filter(!is.na(Date) & Date != "Date")
head(clean_data)

解决方案二:手动提取列信息(更灵活)

如果html_table()仍有解析问题,可以手动定位每一列的元素,提取文本后合并为数据框,html_text2()能自动清理换行和多余空格:

library(rvest)
library(dplyr)

url = "https://www.baseballamerica.com/teams/3181/norfolk-tides/schedule/?year=2022"
page <- read_html(url)

# 提取各列数据
dates <- page %>% html_elements(".scrolling-table table tbody tr td:nth-child(1)") %>% html_text2()
times <- page %>% html_elements(".scrolling-table table tbody tr td:nth-child(2)") %>% html_text2()
opponents <- page %>% html_elements(".scrolling-table table tbody tr td:nth-child(3)") %>% html_text2()
scores <- page %>% html_elements(".scrolling-table table tbody tr td:nth-child(4)") %>% html_text2()
locations <- page %>% html_elements(".scrolling-table table tbody tr td:nth-child(5)") %>% html_text2()

# 合并为数据框并过滤无效行
schedule_df <- data.frame(
  Date = dates,
  Time = times,
  Opponent = opponents,
  Score = scores,
  Location = locations
) %>% filter(Date != "Date")  # 移除表头重复行

head(schedule_df)

额外说明

如果上述方法仍返回空数据,说明页面内容是JavaScript动态加载的,此时需要用RSelenium或playwright模拟浏览器渲染页面后再抓取。不过测试该URL时,静态源码已包含完整赛程,所以前两种方法即可解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 00:53:00