使用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
相关产品推荐
相关产品推荐

