gpt4 book ai didi

python - 如何处理来自 NBA.com 的数据?

转载 作者:行者123 更新时间:2023-11-28 22:44:05 26 4
gpt4 key购买 nike

我找到了 Greg Reda 关于从 nba.com 中抓取 HTML 的博文:

http://www.gregreda.com/2015/02/15/web-scraping-finding-the-api/

我尝试使用他在那里编写的代码:

import requests
import json

url = 'http://stats.nba.com/stats/leaguedashteamshotlocations?Conference=&DateFr' + \
'om=&DateTo=&DistanceRange=By+Zone&Division=&GameScope=&GameSegment=&LastN' + \
'Games=0&LeagueID=00&Location=&MeasureType=Opponent&Month=0&OpponentTeamID' + \
'=0&Outcome=&PORound=0&PaceAdjust=N&PerMode=PerGame&Period=0&PlayerExperien' + \
'ce=&PlayerPosition=&PlusMinus=N&Rank=N&Season=2014-15&SeasonSegment=&Seas' + \
'onType=Regular+Season&ShotClockRange=&StarterBench=&TeamID=0&VsConference=&VsDivision='

response = requests.get(url)
response.raise_for_status()
shots = response.json()['resultSets']['rowSet']

avg_percentage = shots['OPP_FG_PCT']

print(avg_percentage)

但它返回:

Traceback (most recent call last):
File "C:\Python34\nba.py", line 91, in <module>
avg_percentage = shots['OPP_FG_PCT']
TypeError: list indices must be integers, not str

我只懂基本的 Python,所以我不知道如何从数据中获取整数列表。谁能解释一下?

最佳答案

显然,自 Greg Reda 撰写该帖子以来,数据结构已发生变化。在探索数据之前,我建议您通过酸洗将其保存到文件中。这样一来,您就不必在每次修改和重新运行脚本时一直访问 NBA 服务器并等待下载。

以下脚本检查腌制数据是否存在以避免不必要的下载:

import requests
import json

url = 'http://stats.nba.com/stats/leaguedashteamshotlocations?Conference=&DateFr' + \
'om=&DateTo=&DistanceRange=By+Zone&Division=&GameScope=&GameSegment=&LastN' + \
'Games=0&LeagueID=00&Location=&MeasureType=Opponent&Month=0&OpponentTeamID' + \
'=0&Outcome=&PORound=0&PaceAdjust=N&PerMode=PerGame&Period=0&PlayerExperien' + \
'ce=&PlayerPosition=&PlusMinus=N&Rank=N&Season=2014-15&SeasonSegment=&Seas' + \
'onType=Regular+Season&ShotClockRange=&StarterBench=&TeamID=0&VsConference=&VsDivision='
print(url)

import sys, os, pickle
file_name = 'result_sets.pickled'

if os.path.isfile(file_name):
result_sets = pickle.load(open(file_name, 'rb'))
else:
response = requests.get(url)
response.raise_for_status()
result_sets = response.json()['resultSets']
pickle.dump(result_sets, open(file_name, 'wb'))

print(result_sets.keys())
print(result_sets['headers'][1])
print(result_sets['rowSet'][0])
print(len(result_sets['rowSet']))

一旦您有了result_sets,您就可以检查数据了。如果你打印它,你会发现它是一本字典。您可以提取字典键:

print(result_sets.keys())

当前键是'headers''rowSet''name'。您可以检查 header :

print(result_sets['headers'])

我对这些统计数据的了解可能比您少。但是,通过查看数据,我已经能够弄清楚 result_sets['rowSet'] 包含 30 行,每行 23 个元素。这 23 列由 result_sets['headers'][1] 标识。试试这个:

print(result_sets['headers'][1])

这将显示 23 个列名称。现在看第一行团队数据:

print(result_sets['rowSet'][0])

现在您可以看到为亚特兰大老鹰队报告的 23 个值。您可以遍历 result_sets['rowSet'] 中的行以提取您感兴趣的任何值并计算汇总信息,例如总计和平均值。

关于python - 如何处理来自 NBA.com 的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30002888/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com