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

使用rvest抓取棒球参考页时缺失亚利桑那队投球表的问题

问题原因与解决方法

原因

你的脚本在处理注释内的表格时,对每个包含<table>的注释片段,仅提取了其中第一个表格(通过.[[1]])。但亚利桑那队的第二个投球表和其他表格处于同一个注释块中,因此被遗漏。

解决方法

修改注释片段的处理逻辑,提取每个注释块内的所有表格,并将嵌套的表格列表扁平化,确保所有表格都被收集:

library(magrittr)
library(rvest)
library(xml2)
library(stringi)
library(purrr) # 用于扁平化嵌套列表

urlbbref <- read_html("https://www.baseball-reference.com/boxes/ARI/ARI202311010.shtml")
# 提取页面标记中直接可见的表格
table_one <- xml_find_all(urlbbref, "//table") %>% html_table

# 提取注释内的表格
alt_tables <- xml2::xml_find_all(urlbbref,"//comment()") %>% {
  raw_parts <- as.character(.[grep("\\</?table", as.character(.))])
  strip_html <- stringi::stri_replace_all_regex(raw_parts, c("<!--","-->"),c("",""),
                                                vectorize_all = FALSE)
  # 修改:提取当前注释块内的所有表格,不再只取第一个
  lapply(grep("<table", strip_html, value = TRUE), function(i){
    rvest::html_table(xml_find_all(read_html(i), "//table"))
  }) %>% 
    # 扁平化嵌套列表,将所有表格合并到一维列表中
    purrr::flatten()
}

# 合并所有表格到一个列表
all_tables <- c(table_one, alt_tables)

修改后,你可以通过索引(比如all_tables[10])找到亚利桑那队的第二个投球表,也可以通过names(all_tables)查看表格名称,快速定位目标表格的索引。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 06:10:56