【问题标题】:Scraping JSON from an endpoint with REQUESTS使用 REQUESTS 从端点抓取 JSON
【发布时间】:2017-12-08 23:21:12
【问题描述】:

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或分贝表)。我的最终目标是自动化这个过程,所以脚本每天都会下载一些新的 JSON(只需要增加 URL 中参数的数量),修改它们并逐步将它们转移到现有的 table/excel 中。

您能否指导我如何执行这些步骤?我只想玩一些数据,这看起来是获取它们的最佳方式。 我是 Python 新手,我只有一些编程基础,所以请原谅我的原始问题。我将不胜感激任何小建议。

【问题讨论】:

    标签: python json web-scraping python-requests endpoint


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 2021-07-28
      相关资源
      最近更新 更多