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

使用rvest爬取FBREF英超防守数据时返回空列表求助

解决FBREF英超球员防守数据爬取问题

问题原因分析

FBREF页面中球队统计表格是默认优先加载的静态内容,球员防守数据表格虽为静态渲染,但需精准定位其容器元素才能与球队表格区分,同时部分情况下网站会拦截无浏览器标识的请求,导致无法获取目标表格。

解决方案

1. 精准定位表格并模拟浏览器请求

球员防守数据表格被包裹在div#div_stats_defense容器内,结合模拟浏览器请求避免拦截:

library(rvest)
library(dplyr)

# 目标URL
url <- "https://fbref.com/en/comps/9/defense/Premier-League-Stats"

# 模拟浏览器请求读取页面
page <- read_html(url, user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36")

# 获取球员防守数据表格
def_stats_list <- page %>% 
  html_nodes("div#div_stats_defense table") %>% 
  html_table(header = TRUE, fill = TRUE)

# 转换为数据框(列表第一个元素即为目标表格)
def_stats_df <- def_stats_list[[1]]

2. 清洗多级表头(可选)

FBREF表格存在多级表头,可通过以下代码合并并整理:

# 合并多级表头
names(def_stats_df) <- paste(def_stats_df[1, ], def_stats_df[2, ], sep = "_")
def_stats_df <- def_stats_df[-c(1,2), ]

# 转换数据类型(按需调整列范围)
def_stats_df <- def_stats_df %>% 
  mutate(across(-c(Player, Squad, Nation, Pos, Age), as.numeric))

常见排查点

  • 若仍返回空列表:更换user_agent字符串(可使用任意主流浏览器的UA标识),或检查网络连接;
  • 表格数据截断:确保html_table参数fill = TRUE已开启,避免因单元格缺失导致数据丢失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 19:02:21