如何用Pandas从多赛季英超网页构建带来源的球队战绩表
多赛季英超特定球队数据提取实现方案
核心思路
把需要爬取的赛季链接整理成列表,循环处理每个链接:提取对应赛季的目标球队数据,添加来源链接列,最后将所有赛季的数据合并成一个表格。
完整实现代码
import requests import pandas as pd # 1. 定义要爬取的多赛季链接列表 season_urls = [ 'https://www.skysports.com/premier-league-table', # 当前赛季 'https://www.skysports.com/premier-league-table/2021' # 21/22赛季 ] # 2. 初始化空DataFrame存储最终结果 final_df = pd.DataFrame() # 3. 循环处理每个赛季链接 target_team = "Liverpool" # 可替换为其他目标球队 for url in season_urls: try: # 请求网页内容 html = requests.get(url).content # 解析网页中的表格,取最后一个表格(SkySports的积分榜通常位于最后) df_list = pd.read_html(html) df = df_list[-1] # 筛选目标球队的数据,忽略大小写避免匹配失败 team_data = df[df["Team"].str.contains(target_team, case=False)] # 添加来源链接列 team_data['Link'] = url # 将当前赛季数据追加到总表格 final_df = pd.concat([final_df, team_data], ignore_index=True) except Exception as e: print(f"处理链接 {url} 时出错: {str(e)}") # 4. 输出最终结果 print(final_df) # 可选:保存为本地CSV文件 # final_df.to_csv('liverpool_season_data.csv', index=False)
关键说明
- 链接扩展:直接在
season_urls列表中添加更多赛季链接即可,SkySports的赛季链接格式通常为https://www.skysports.com/premier-league-table/赛季年份(例如20/21赛季对应/2020) - 球队匹配优化:使用
case=False忽略大小写,避免网页中球队名称大小写不一致导致的筛选遗漏 - 异常处理:加入
try-except块,防止单个链接处理失败导致整个程序中断 - 数据合并:通过
pd.concat合并多赛季数据,ignore_index=True重置索引,避免出现重复索引问题
输出示例
# Team Pl W ... A GD Pts Last 6 Link 0 10 Liverpool 8 2 ... 12 8 10 NaN https://www.skysports.com/premier-league-table 1 2 Liverpool 38 28 ... 12 68 92 NaN https://www.skysports.com/premier-league-table/2021
内容的提问来源于stack exchange,提问作者TestUser
相关产品推荐
相关产品推荐

