用Python查看一场比赛的进球总数
要获取一场比赛的进球总数,需要先明确数据来源,以下是几种常见场景的实现方案:

已有比赛数据(本地/数据库)
如果数据结构类似如下,直接求和即可:
import pandas as pd
# 假设这是从某个数据源拿到的比赛事件表
events = pd.DataFrame({
'match_id': [1, 1, 1, 1],
'team': ['主队', '客队', '主队', '客队'],
'event_type': ['进球', '进球', '黄牌', '进球'],
'minute': [23, 45, 60, 88],
})
def total_goals(df, match_id):
goals = df[(df['match_id'] == match_id) & (df['event_type'] == '进球')]
return len(goals)
print(f"本场进球总数: {total_goals(events, 1)}") # 输出 3
从足球数据API获取(推荐)
常用免费/付费API:
| 数据源 | 说明 |
|---|---|
| Football-Data.org | 免费额度,覆盖主流联赛 |
| API-Football | 数据全,有免费层 |
| SportsMonks / Sportradar | 商业级 |
以 Football-Data.org 为例:
import requests
API_KEY = "你的API_KEY"
headers = {"X-Auth-Token": API_KEY}
# 1. 获取某场比赛详情(示例 match id)
url = "https://api.football-data.org/v4/matches/123456"
resp = requests.get(url, headers=headers).json()
# 2. 进球数 = 主队比分 + 客队比分
home = resp['score']['fullTime']['home']
away = resp['score']['fullTime']['away']
print(f"进球总数: {home + away} (比分 {home}-{away})")
以 API-Football 为例:
import requests
url = "https://v3.football.api-sports.io/fixtures?id=123456"
headers = {"x-apisports-key": "你的KEY"}
data = requests.get(url, headers=headers).json()
goals_home = data['response'][0]['goals']['home']
goals_away = data['response'][0]['goals']['away']
print(f"总进球: {goals_home + goals_away}")
从网页爬取(如懂球帝、直播吧)
一般需要解析页面中的比分或事件流,思路:
import requests
from bs4 import BeautifulSoup
# 仅为思路示例,具体选择器需按目标网站调整
html = requests.get("比赛页面URL", headers={"User-Agent": "..."}).text
soup = BeautifulSoup(html, "html.parser")
# 找到比分元素,"2 - 1"
score_text = soup.select_one(".score").get_text(strip=True) # "2-1"
home, away = map(int, score_text.replace(" ", "").split("-"))
print(f"总进球: {home + away}")
⚠️ 爬虫注意遵守 robots.txt 和网站条款,动态加载页面(JS渲染)建议用 Playwright/Selenium。
实时比赛(WebSocket / 事件推送)
实时场景一般订阅事件流,累加进球事件:
goal_count = 0
def on_event(event):
global goal_count
if event['type'] == 'GOAL' and not event.get('is_own_goal_cancelled'):
goal_count += 1
print(f"{event['minute']}' 进球!当前总进球: {goal_count}")
# 伪代码:把 on_event 注册到你的实时数据源回调
建议
- 只要总进球数 → 直接取比分相加最快
- 要分析进球时间/球队/球员 → 拉取事件列表(events)再过滤
type == 'goal' - 实时性要求高 → 用 WebSocket 事件流累加
如果你能告诉我具体数据来源(哪家API、网页、还是本地文件),我可以给出更贴合的完整代码。