1)我想使用python从端点抓取JSON文件 - (例如:http://stats.nba.com/stats/boxscoreplayertrackv2/?GameID=0021700300)。我已经为Python安装了REQUESTS,并尝试将页面下载到这样的变量:
import requests
r = requests.get('http://stats.nba.com/stats/boxscoreplayertrackv2/?
GameID=0021700300')
我在一些常规网页上尝试了这个功能,但是对于这个端点,它不起作用。当我发送请求时,Python shell基本上停止工作,我必须重新启动它。我相信这必须有一个非常原始的解决方案。
请问,我该如何下载?
2)在此之后,我想采用html / JSON并删除一些开头的代码和一些结尾的代码,这样它将只保留一块json,这可能会转移到一个表(Excel或db表)。我的最终目标是自动化这个过程,所以脚本每天都会下载一些新的JSON(只需要增加URL中参数的数量),修改它们并逐步将它们转移到现有的table / excel。
请您指点一下如何执行这些步骤?我只想玩一些数据,这看起来是获得它们的最佳方式。 我是Python的新手,我在编程方面只有一些基础,所以请原谅我的原始问题。我会很感激任何建议。
答案 0 :(得分:1)
看起来您需要添加几个标题,然后您可以像通常那样访问json。
import requests
import json
headers={'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0', 'Accept': 'application/json; charset=utf-8'}
r = requests.get('https://stats.nba.com/stats/boxscoreplayertrackv2/?GameID=0021700300', headers=headers)
j =r.json()
for row in j['resultSets']:
print (row['name'])
for rowSet in row['rowSet']:
print (rowSet)
输出:
PlayerStats
['0021700300', 1610612764, 'WAS', 'Washington', 203490, 'Otto Porter Jr.', 'F', '', '32:05', 4.22, 2.25, 5, 11, 16, 48, 0, 0, 28, 0, 2, 4, 0.5, 6, 14, 0.428, 0.444, 0, 0, 0.0]
['0021700300', 1610612764, 'WAS', 'Washington', 202693, 'Markieff Morris', 'F', '', '20:39', 3.81, 1.31, 3, 4, 7, 30, 0, 0, 19, 1, 1, 2, 0.5, 0, 4, 0.0, 0.167, 2, 4, 0.5]
...
['0021700300', 1610612750, 'MIN', 'Minnesota', 201952, 'Jeff Teague', '', 'DNP - Injury/Illness ', '0:00', 0.0, 0.0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0, 0, 0, 0.0, 0.0, 0, 0, 0.0]
TeamStats
['0021700300', 1610612764, 'Wizards', 'WAS', 'Washington', '240:00', 16.74, 29, 60, 89, 399, 4, 0, 287, 23, 14, 31, 0.452, 22, 52, 0.422, 0.434, 12, 21, 0.57]
['0021700300', 1610612750, 'Timberwolves', 'MIN', 'Minnesota', '240:00', 16.58, 30, 53, 83, 407, 1, 1, 296, 27, 18, 37, 0.485, 17, 48, 0.353, 0.412, 12, 18, 0.667]
或写入csv(对于Excel):
import requests
import json
import csv
headers={'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0', 'Accept': 'application/json; charset=utf-8'}
r = requests.get('https://stats.nba.com/stats/boxscoreplayertrackv2/?GameID=0021700300', headers=headers)
j =r.json()
with open( "test.csv", 'w' ) as out_file:
csv_w = csv.writer( out_file )
for row in j['resultSets']:
csv_w.writerow ([row['name']])
for rowSet in row['rowSet']:
csv_w.writerow (rowSet)