Python新手求助:如何将Futbin抓取的数据完整导出至CSV
解决CSV导出问题的方案
嘿,我来帮你搞定这个CSV导出的问题!你现在的代码只把最后一条日期写进了CSV,而且完全没包含球员名字和价格,这就是为啥数据不全。咱们来修改一下,把所有你控制台能看到的数据都完整导出:
首先,你需要做这几件事:
- 先写入CSV的表头,让数据结构更清晰
- 在遍历每个球员价格的循环里,把球员名、日期、价格这三组数据逐行写入CSV
- 打开文件时加上
newline='',避免Windows系统下CSV出现多余空行
修改后的完整代码如下:
import requests import csv from datetime import datetime player_ids = { 'Maguire OTW': 50534911, 'Pulisic OTW' : 50559444, } # 打开CSV文件,准备写入(utf-8编码避免乱码,newline避免空行) with open('yesterdayok.csv', 'w', newline='', encoding='utf-8') as csv_file: csv_writer = csv.writer(csv_file) # 先写入表头,让数据更易读 csv_writer.writerow(['Player Name', 'Date', 'Price']) # 遍历每个球员 for name, player_id in player_ids.items(): # 注意把原链接里的&改成&,避免请求出错 r = requests.get(f'https://www.futbin.com/20/playerGraph?type=yesterday&year=20&player={player_id}') data = r.json() print() print(name) # 遍历该球员的所有价格数据 for price_entry in data['ps']: # 处理日期和价格 date = datetime.utcfromtimestamp(price_entry[0] / 1000).strftime('%Y-%m-%d') price = price_entry[1] print(date, price) # 把当前行的球员名、日期、价格写入CSV csv_writer.writerow([name, date, price])
关键修改点说明:
- 把
with open块移到最外层,整个过程只打开一次文件,避免重复IO操作 - 添加了表头
['Player Name', 'Date', 'Price'],让CSV的内容一目了然 - 在遍历每个价格的循环里调用
csv_writer.writerow([name, date, price]),这样控制台打印的每一条数据都会被写入CSV - 把原请求链接里的
&改成了&,这是HTML转义字符,直接用会导致请求参数错误 - 变量名
id改成了player_id,因为id是Python内置函数,尽量不要用作自定义变量名 - 给
open函数加上了encoding='utf-8',避免特殊字符出现乱码问题
这样修改后,你打开生成的CSV文件,就能看到所有球员的完整日期和价格数据啦!
内容的提问来源于stack exchange,提问作者David Marty
相关产品推荐
相关产品推荐

