You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将循环爬取的球队名单数据保存至CSV文件?

问题解决:保存循环中所有爬取的球队数据

你的问题出在每次循环都用df.to_csv('Players.csv')直接覆盖文件,所以最终只有最后一次循环的数据被保留。下面提供两种可行的解决方法:

方法一:先收集所有数据再统一保存

先初始化一个空的DataFrame,每次爬取到球队数据后,将其追加到这个空DataFrame中,循环结束后一次性导出到CSV:

import pandas as pd
import time

team = ['Toronto Maple Leafs', 'Montreal Canadiens', 'Boston Bruins', 'Chicago Blackhawks', 'Detroit Red Wings', 'New York Rangers']
code = ['TOR', 'MTL', 'BOS', 'CHI', 'DET', 'NYR']

# 初始化空DataFrame用于存储所有数据
all_players = pd.DataFrame()

for i in range(0, len(code)):
    codes = code[i]
    teams = team[i]
    df = pd.read_html(f'https://www.hockey-reference.com/teams/{codes}/#roster', match='Roster')
    df = df[0]
    df = df[['Player']]
    df = df.assign(Team=[teams]*len(df), Rating=['99']*len(df))
    print(df)
    time.sleep(5)
    # 将当前球队数据追加到总DataFrame
    all_players = pd.concat([all_players, df], ignore_index=True)

# 统一保存所有数据
all_players.to_csv('Players.csv', index=False)
print("Saved!")

方法二:使用追加模式写入CSV

每次写入时指定mode='a'(追加模式),同时控制表头只在第一次写入时添加:

import pandas as pd
import time

team = ['Toronto Maple Leafs', 'Montreal Canadiens', 'Boston Bruins', 'Chicago Blackhawks', 'Detroit Red Wings', 'New York Rangers']
code = ['TOR', 'MTL', 'BOS', 'CHI', 'DET', 'NYR']

for i in range(0, len(code)):
    codes = code[i]
    teams = team[i]
    df = pd.read_html(f'https://www.hockey-reference.com/teams/{codes}/#roster', match='Roster')
    df = df[0]
    df = df[['Player']]
    df = df.assign(Team=[teams]*len(df), Rating=['99']*len(df))
    print(df)
    time.sleep(5)
    # 第一次写入时添加表头,后续追加时不添加
    df.to_csv('Players.csv', mode='a', index=False, header=(i==0))

print("Saved!")

两种方法都能解决你的问题,方法一更适合数据量不大的场景,方便后续对所有数据做统一处理;方法二则适合边爬边存,节省内存。

内容的提问来源于stack exchange,提问作者ItzzSalmon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 19:20:14