使用 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)