R语言爬取FBref英超球员标准统计表 无法获取目标表问题咨询
爬取结果异常的核心原因
- FBref站点会拦截无常规浏览器请求标识的自动化脚本请求,
xml2::read_html()默认的请求头会被识别为非真人流量,返回的页面往往缺失目标统计模块 - 全量抓取页面所有
<table>节点,会得到混合了侧边导航、广告占位、弹窗组件的表格列表,无法直接定位到目标的英超球员标准统计表 - 目标表格采用双层嵌套表头结构,且每隔固定行数会插入重复的表头行做视觉分割,直接解析会出现列名错位、空值填充、数据混排的问题
- URL中附带的
#stats_standard::1属于前端页面滚动锚点,不参与服务端的页面返回逻辑,对DOM元素定位没有实际帮助,无法提升爬取准确率
全R环境自动爬取实现方案(无需手动下载CSV)
整个流程可完全在R环境内完成,不需要打开浏览器手动复制、下载文件:
- 配置带模拟浏览器标识的请求头,绕过基础反爬校验
- 通过CSS选择器精准定位目标表格节点,替代全量抓取所有table的逻辑
- 清洗解析后的表格,剔除重复插入的分割表头行、空值占位
可直接运行的代码如下:
# 加载所需依赖 library(rvest) library(xml2) library(dplyr) library(httr) # 配置模拟Chrome浏览器的请求标识,匹配常规真人访问的请求特征 browser_header <- list( `User-Agent` = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36" ) # 读取目标页面,附加自定义请求头 page_content <- read_html( "https://fbref.com/en/comps/9/stats/Premier-League-Stats", httr_options = config(httpheader = browser_header) ) # 精准定位ID为stats_standard的球员标准统计表 raw_table <- page_content %>% html_element(css = "table#stats_standard") %>% html_table(fill = TRUE) # 清洗表格数据 clean_player_stats <- raw_table %>% filter( Player != "Player", # 剔除每隔固定行插入的重复表头分割行 !is.na(Player) # 剔除表尾的空值占位行 )
说明:页面自带的可复制到剪贴板的表格专属链接,同样可以通过上述带请求头的逻辑直接请求获取,全程不需要手动触发浏览器交互。
内容的提问来源于stack exchange,提问作者AW27
相关产品推荐
相关产品推荐

