本文目录导读:

看一支球队(或两队)的拦截(Interceptions)和抢断(Tackles)数据,尤其是在开源项目中,通常有几种不同的场景,你得先确认你想看的是比赛实况数据还是赛后统计数据。
以下分场景给你提供思路和具体方法:
看“赛后统计数据”(最常用)
如果你想看两队整场比赛下来,谁的抢断多、谁的拦截多,这属于统计数据。
首选开源库:soccerdata (Python)
这是目前最流行的足球数据爬取/解析开源库,你可以用它对接 Understat、FBref、ESPN、WhoScored 等数据源。
- 推荐数据源:FBref(由体育数据公司 StatsBomb 提供底层数据,是开源社区公认的免费且最详细的数据源)。
- 代码示例(获取英超某场比赛两队数据):
import soccerdata as sd # 1. 设置数据源和联赛(以FBref为例) fbref = sd.FBref(leagues="ENG-Premier League", seasons=2023) # 2. 获取赛程,找到你想看的那场比赛(例如曼城 vs 阿森纳) schedule = fbref.read_schedule() match = schedule[schedule['home_team'] == 'Manchester City'] # 筛选 # 3. 读取该场比赛的“球队”防守统计 # 注意:FBref的统计数据里,Tackles(抢断)和Interceptions(拦截)是分开的 team_stats = fbref.read_team_match_stats(stat_type='defense') # 读取防守数据 # 4. 过滤出这场比赛的两队,看数据 print(team_stats.loc[['Manchester City', 'Arsenal']][['Tackles', 'Interceptions']])
直接抓取开源API
- API-Football(RapidAPI上的免费层):虽然不是严格意义上的“开源代码”,但它的免费接口广泛用于开源爬虫项目,你调用
/fixtures/statistics接口,传入fixture=xxx,返回的数据里会包含Tackles和Interceptions两个字段。
看“事件流数据”(更高级)
如果你想看某个时间点、某个球员在什么位置完成了抢断或拦截(比如防守反击的关键拦截),你需要事件数据。
最有名的开源数据集:StatsBomb 免费公开数据
- 这是体育数据公司 StatsBomb 提供给社区的免费数据仓库(Github 上有完整的
statsbombpy包)。 - 关键点:StatsBomb 的数据模型里,“拦截”和“抢断”是通过事件类型和子类型区分的,你需要看事件类型是否为
Interception或Duel(且Duel类型下包含Tackle)。 - 代码示例:
from statsbombpy import sb
# 1. 获取一场比赛的事件(例如2020欧洲杯某场)
events = sb.events(match_id=123456) # 替换成你的比赛ID
# 2. 筛选拦截事件
interceptions = events[events['type'] == 'Interception'] # 拦截
# 3. 筛选抢断事件(抢断通常发生在Duel(对抗)事件中)
tackles = events[(events['type'] == 'Duel') & (events['duel_type'] == 'Tackle')]
# 4. 按队伍分组计数
print("拦截统计:")
print(interceptions.groupby('team')['id'].count())
print("抢断统计:")
print(tackles.groupby('team')['id'].count())
看“可视化/看板”(非代码)
如果你不想写代码,只是想看“开源项目呈现的图表”,比如看 Grafana 或 Streamlit 搭建的开源看板:
- 寻找现成的开源看板模板:在 GitHub 上搜索
football analytics dashboard或soccer dashboard streamlit。 - 看数据来源:这些看板通常会内置这个功能,你只需要在界面上选择哪一场比赛,看板会自动从底层数据库(通常是爬取的 FBref 数据)调取Tackles和Interceptions并以柱状图或雷达图展示。
附:拦截”与“抢断”的定义澄清(重要!)
看开源数据时,千万别混淆这两个概念,中英文翻译常出错:
- 抢断 (Tackles):指防守球员在对方控球时,直接伸脚将球破坏或夺走(通常发生在身体接触/对抗中),在 API-Football 中它就写作
Tackles,在 FBref 中位于Defensive Actions里。 - 拦截 (Interceptions):指防守球员读懂传球路线,在球传到对方脚下之前,率先将球截停/断掉,数据源通常写作
Interceptions或Int。
开源数据避坑指南:
- FBref 的数据非常清晰,直接两个列名:
Tackles、Interceptions。 - StatsBomb 的抢断叫
Duel(对抗)且子类型为Tackle,拦截直接叫Interception。 - 如果你发现 WhoScored 的数据,两个数字可能会比 FBref 略高,因为他们把“试图抢断但没干净的铲球”也算作成功,不同开源项目的统计口径不同,对比时务必锁定同一数据源。
总结你的操作路径:
如果不想研究代码,最快的方法是去 FBref 官网搜这场比赛,页面里叫 Tackles 和 Interceptions 的列就是,如果你想把这些数据弄进自己的开源项目,那就用 Python 装一个 soccerdata,一行代码就能拉下来。