使用 REQUESTS 从端点抓取 JSON
Scraping JSON from an endpoint with REQUESTS
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 的一部分了可以转移到 table(Excel 或 db table)。我的最终 objective 将是使这个过程自动化,所以脚本每天都会下载一些新的 JSONs(只需要增加 URL 中参数的数量),修改它们并将它们传输到现有 table/excel 递增。
您能告诉我如何执行这些步骤吗?我只想玩一些数据,这看起来是获取它们的最佳方式。
我是 Python 的新手,我只有一些编程基础,所以请原谅我的原始问题。我将不胜感激任何小建议。
您似乎需要添加几个 headers,然后您可以像往常一样访问 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)
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 的一部分了可以转移到 table(Excel 或 db table)。我的最终 objective 将是使这个过程自动化,所以脚本每天都会下载一些新的 JSONs(只需要增加 URL 中参数的数量),修改它们并将它们传输到现有 table/excel 递增。
您能告诉我如何执行这些步骤吗?我只想玩一些数据,这看起来是获取它们的最佳方式。 我是 Python 的新手,我只有一些编程基础,所以请原谅我的原始问题。我将不胜感激任何小建议。
您似乎需要添加几个 headers,然后您可以像往常一样访问 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)