使用R爬取FBRef英超球员标准数据表格遇xml_missing错误求助
解决FBRef英超数据爬取的
xml_missing错误 问题根源
你碰到的xml_missing错误,本质是html_node没找到指定的DOM元素,核心原因是:
- FBRef会拦截R程序默认的爬虫请求(
rvest::read_html的请求头标识是R),导致返回的HTML内容不完整,目标表格节点根本不存在。 - 虽然你调整了选择器,但请求被拦截的前提下,任何选择器都找不到对应元素。
修正方案
1. 模拟浏览器请求绕过拦截
用httr包添加浏览器标识的请求头,让网站认为是正常用户访问:
library(rvest) library(httr) # 构造浏览器请求头 browser_headers <- add_headers( "User-Agent" = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" ) # 发送请求并解析HTML player_url <- "https://fbref.com/en/comps/9/2022-2023/stats/2022-2023-Premier-League-Stats" response <- GET(player_url, browser_headers) player_html <- content(response, "html") # 提取目标表格 player_log <- player_html %>% html_node('#div_stats_standard') %>% html_table(fill = TRUE)
2. 备选选择器(如果上述仍有问题)
直接定位表格元素(FBRef标准数据表格的class为stats_table):
player_log <- player_html %>% html_node('table.stats_table') %>% html_table(fill = TRUE)
3. 清理多层表头
FBRef表格有双层表头,爬取后可以整理成清晰的列名:
# 合并双层表头 colnames(player_log) <- paste(player_log[1, ], player_log[2, ], sep = "_") # 移除表头行 player_log <- player_log[-c(1,2), ]
内容的提问来源于stack exchange,提问作者user12025050
相关产品推荐
相关产品推荐

