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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 12:30:00