如何精准抓取FBref英超联赛表格链接:解决重复与无关数据问题

大萱姑娘_3003

大萱姑娘_3003

2026-09-10

247人浏览

原创

如何精准抓取FBref英超联赛表格链接:解决重复与无关数据问题

本文详解使用selenium替代requests+beautifulsoup抓取fbref英超联赛页面时出现的链接重复、混入非英超球队等典型问题,提供可复用的css选择器方案与健壮代码实现。

本文详解使用selenium替代requests+beautifulsoup抓取fbref英超联赛页面时出现的链接重复、混入非英超球队等典型问题,提供可复用的css选择器方案与健壮代码实现。

FBref(https://www.php.cn/link/862fa6721efe7dbf1c49a905fbab240b DataTables或React组件)在浏览器中异步加载并注入DOM。因此,requests + BeautifulSoup仅能解析初始静态HTML,而该HTML中往往包含大量占位符、冗余导航链接(如全球各联赛、女足、青训队等),导致你观察到的两大问题:

重复链接:因表格被多次渲染(如分页、排序重绘、响应式切换),同一<a></a>标签可能被多次插入DOM;
无关球队:页面全局存在大量/squads/路径的链接(如切尔西女足、皇马、河床、浦和红钻等),它们并非来自当前英超表格,而是侧边栏、页脚或广告模块的遗留链接。

✅ 正确解法:用Selenium精准定位动态表格中的目标链接

Selenium模拟真实浏览器行为,等待JavaScript完全执行后提取最终渲染的DOM结构,并支持精确的CSS选择器定位。关键在于不遍历全页所有<a></a>标签,而是聚焦于联赛表格主体内的球队列单元格

以下为推荐实践代码(已适配2024/25赛季结构):

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 启用无头模式(后台运行,不弹窗)
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")

URL = "https://fbref.com/en/comps/9/Premier-League-Stats"

with webdriver.Chrome(options=chrome_options) as driver:
    driver.get(URL)
    wait = WebDriverWait(driver, 15)  # 最长等待15秒

    # 精准定位:英超表格中<tbody>内每一行的"team"列中的<a>标签
    # selector说明:
    #   #results2024-202591_overall → 表格ID(含赛季年份,可能随赛季更新,需检查)
    #   tbody tr → 表格主体行
    #   td[data-stat='team'] → 标记为team字段的单元格(FBref语义化属性)
    #   a → 该单元格内的链接
    selector = "#results2024-202591_overall tbody tr td[data-stat='team'] a"

    team_links = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, selector)))

    # 提取并去重(虽通常无需,但加一层保险)
    urls = list(set(a.get_attribute("href") for a in team_links if a.get_attribute("href")))
    urls.sort()  # 可选:按字母序排列便于验证

    print(f"成功提取 {len(urls)} 支英超球队链接:")
    for url in urls:
        print(url)<h3>? 关键技巧与注意事项</h3>
<ul>
<li>
<p><strong>动态ID识别</strong>:FBref表格ID形如 <code>#results2024-202591_overall</code>,其中<code>2024-2025</code>为赛季,<code>91</code>为联赛ID(英超固定为9)。建议首次运行时用浏览器开发者工具(F12 → Elements → 搜索 <code>stats_table</code>)确认当前ID,或改用更鲁棒的选择器:  </p>
<pre class="brush:php;toolbar:false;">table[id^="results"][id*="91"] tbody tr td[data-stat='team'] a

(匹配以results开头、含91的ID)

  • 避免XPath陷阱:虽然XPath也可用,但CSS选择器在Selenium中性能更优、可读性更强,且data-stat属性是FBref明确设计的语义化钩子,比依赖<td>位置(如<code>td[2])更稳定。

  • 反爬友好提示:FBref未设严格反爬机制,但仍建议添加合理延迟(如time.sleep(1))、设置User-Agent(通过chrome_options.add_argument("--user-agent=...")),并在生产环境加入异常处理与重试逻辑。

  • 扩展性建议:若需抓取多赛季或多个联赛,可封装为函数,传入comp_id(如9)和season(如2024-2025),动态构造URL与选择器。

  • 通过此方法,你将获得唯一、准确、上下文正确的20支英超球队官方统计页链接,彻底规避requests方案下无法绕过的HTML静态局限性。记住:对JS渲染站点,DOM定位优先于全文本匹配——这是高质量网络抓取的核心原则。

    PHP速学视频免费教程(入门到精通)
    PHP速学视频免费教程(入门到精通)

    PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

    下载

    相关标签:

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    相关专题

    更多
    免费爬虫工具有哪些
    免费爬虫工具有哪些

    免费爬虫工具有Scrapy、Beautiful Soup、ParseHub、Octoparse、Webocton Scriptly、RoboBrowser和Goutte。更多关于免费爬虫工具的问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

    2023.11.10

    3993

    9

    Python爬虫获取数据的方法
    Python爬虫获取数据的方法

    Python爬虫可以通过请求库发送HTTP请求、解析库解析HTML、正则表达式提取数据,或使用数据抓取框架来获取数据。更多关于Python爬虫相关知识。详情阅读本专题下面的文章。php中文网欢迎大家前来学习。

    2023.11.13

    653

    12

    Vibeknow在线使用入口合集
    Vibeknow在线使用入口合集

    本专题汇总了Vibeknow在线创作视频的官方入口及网页版使用教程,涵盖PPT、PDF、Word等文档一键转讲解视频的核心操作,并整理了免费版水印规则与手机端浏览器访问指南,助你快速将知识内容视频化。

    2026.09.21

    20

    20

    NumPy随机数文件读写与dtype数据类型
    NumPy随机数文件读写与dtype数据类型

    本专题整理 NumPy 随机数、文件读写与 dtype 数据类型相关教程,覆盖 Generator/random、随机数种子、正态分布采样、npy/npz/CSV/TXT 保存读取、loadtxt/savetxt、memmap、大文件处理、astype 类型转换、结构化 dtype、整数溢出和精度丢失等场景。

    2026.09.21

    0

    24

    NumPy矩阵运算与线性代数计算
    NumPy矩阵运算与线性代数计算

    本专题整理 NumPy 矩阵运算与线性代数计算相关教程,覆盖矩阵乘法、dot 与 @ 运算符、逆矩阵、行列式、特征值与特征向量、SVD、线性方程组、欧氏距离、矩阵分解和大规模矩阵性能优化等内容,帮助读者掌握 np.linalg 与矩阵计算实战。

    2026.09.21

    0

    20

    NumPy广播机制数学运算与统计分析
    NumPy广播机制数学运算与统计分析

    本专题整理 NumPy 广播机制、数组数学运算与统计分析相关教程,覆盖广播规则、维度对齐、矩阵与数组加减除法、向量化计算、均值方差、分位数、中位数、直方图和 unique 频次统计等场景,帮助读者掌握 ndarray 高效计算与统计处理方法。

    2026.09.21

    0

    17

    NumPy数组创建索引切片与数据选择
    NumPy数组创建索引切片与数据选择

    本专题整理 NumPy 数组创建、索引、切片与数据选择相关教程,覆盖 np.array、zeros/ones、多维数组形状、基础切片、花式索引、布尔索引、条件筛选、视图与副本等常用场景,帮助读者系统掌握 ndarray 数据构造与高效提取方法。

    2026.09.21

    0

    12

    Aionclaw智能助手介绍
    Aionclaw智能助手介绍

    本专题汇总了AionClaw(AI龙虾助手)的功能介绍与在线使用入口。AionClaw是杭州趣猿人工智能有限公司推出的桌面级AI智能体,能直接在电脑上读写文件、运行脚本、操作浏览器,自动交付Word、PPT、Excel等成品。

    2026.09.20

    40

    13

    AionClaw AI智能体与电脑自动化任务执行功能使用教程
    AionClaw AI智能体与电脑自动化任务执行功能使用教程

    AionClaw专题整理AI智能体与电脑自动化相关功能使用教程,涵盖安装部署、AI任务执行、Skills技能、文件处理、浏览器控制、电脑操作、持久记忆、聊天工具连接以及办公、编程和内容创作等功能,帮助用户快速掌握AionClaw的实际使用方法。

    2026.09.20

    0

    15

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    热门推荐
    /
    最新课程
    phpStudy极速入门视频教程
    phpStudy极速入门视频教程

    共6课时 | 54.6万人学习

    独孤九贱(4)_PHP视频教程
    独孤九贱(4)_PHP视频教程

    共89课时 | 133.1万人学习