Python抓取NBA跟踪驱动器数据

Python抓取NBA跟踪驱动器数据,python,web-scraping,get,google-chrome-devtools,Python,Web Scraping,Get,Google Chrome Devtools,我对Python相当陌生。我正试图通过 我使用ChromeDevTools查找API URL。然后,我使用requests包获取JSON字符串 原始代码: import requests headers = {"User-Agent": "Mozilla/5.0..."} url = " https://stats.nba.com/stats/leaguedashptstats?College=&Conference=&Country=&DateFrom=&Dat

我对Python相当陌生。我正试图通过

我使用ChromeDevTools查找API URL。然后,我使用requests包获取JSON字符串

原始代码:

import requests
headers = {"User-Agent": "Mozilla/5.0..."}
url = " https://stats.nba.com/stats/leaguedashptstats?College=&Conference=&Country=&DateFrom=&DateTo=&Division=&DraftPick=&DraftYear=&GameScope=&Height=&LastNGames=0&LeagueID=00&Location=&Month=0&OpponentTeamID=0&Outcome=&PORound=0&PerMode=PerGame&PlayerExperience=&PlayerOrTeam=Player&PlayerPosition=&PtMeasureType=Drives&Season=2019-20&SeasonSegment=&SeasonType=Regular+Season&StarterBench=&TeamID=0&VsConference=&VsDivision=&Weight="
r = requests.get(url, headers = headers)
d = r.json()
然而,这不再有效。出于某种原因,对下面URL链接的请求在NBA服务器上超时。所以我需要找到一种新的方法来获取这些信息

<>

我在浏览ChromeDevTools时发现所需的JSON字符串存储在网络XHR响应选项卡中。有没有什么方法可以将其应用到python中。见下图


我用其他标题测试了url(我在这个请求的
DevTool
中看到过),似乎需要标题
Referer
才能正常工作

编辑2020.08.15:

import requests
headers = {"User-Agent": "Mozilla/5.0..."}
url = " https://stats.nba.com/stats/leaguedashptstats?College=&Conference=&Country=&DateFrom=&DateTo=&Division=&DraftPick=&DraftYear=&GameScope=&Height=&LastNGames=0&LeagueID=00&Location=&Month=0&OpponentTeamID=0&Outcome=&PORound=0&PerMode=PerGame&PlayerExperience=&PlayerOrTeam=Player&PlayerPosition=&PtMeasureType=Drives&Season=2019-20&SeasonSegment=&SeasonType=Regular+Season&StarterBench=&TeamID=0&VsConference=&VsDivision=&Weight="
r = requests.get(url, headers = headers)
d = r.json()
我不得不添加新的标题来阅读它

'x-nba-stats-origin': 'stats',
'x-nba-stats-token': 'true',


顺便说一句:相同,但使用参数作为字典,因此更容易设置不同的值

import requests

headers = {
    'User-Agent': 'Mozilla/5.0',
    #'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0',
    'Referer': 'https://stats.nba.com/players/drives/',
    #'Accept': 'application/json, text/plain, */*',

    'x-nba-stats-origin': 'stats',
    'x-nba-stats-token': 'true',
}

url = 'https://stats.nba.com/stats/leaguedashptstats'

params = {
    'College': '',
    'Conference': '',
    'Country': '',
    'DateFrom': '',
    'DateTo': '',
    'Division': '',
    'DraftPick': '',
    'DraftYear': '',
    'GameScope': '',
    'Height': '',
    'LastNGames': '0',
    'LeagueID': '00',
    'Location': '',
    'Month': '0',
    'OpponentTeamID': '0',
    'Outcome': '',
    'PORound': '0',
    'PerMode': 'PerGame',
    'PlayerExperience': '',
    'PlayerOrTeam': 'Player',
    'PlayerPosition': '',
    'PtMeasureType': 'Drives',
    'Season': '2019-20',
    'SeasonSegment': '',
    'SeasonType': 'Regular Season',
    'StarterBench': '',
    'TeamID': '0',
    'VsConference': '',
    'VsDivision': '',
    'Weight': '',
}

r = requests.get(url, headers=headers, params=params)
#print(r.request.url)
data = r.json()

print(data)

我用其他标题测试了url(我在这个请求的
DevTool
中看到了这一点),似乎需要标题
Referer
才能正常工作

编辑2020.08.15:

import requests
headers = {"User-Agent": "Mozilla/5.0..."}
url = " https://stats.nba.com/stats/leaguedashptstats?College=&Conference=&Country=&DateFrom=&DateTo=&Division=&DraftPick=&DraftYear=&GameScope=&Height=&LastNGames=0&LeagueID=00&Location=&Month=0&OpponentTeamID=0&Outcome=&PORound=0&PerMode=PerGame&PlayerExperience=&PlayerOrTeam=Player&PlayerPosition=&PtMeasureType=Drives&Season=2019-20&SeasonSegment=&SeasonType=Regular+Season&StarterBench=&TeamID=0&VsConference=&VsDivision=&Weight="
r = requests.get(url, headers = headers)
d = r.json()
我不得不添加新的标题来阅读它

'x-nba-stats-origin': 'stats',
'x-nba-stats-token': 'true',


顺便说一句:相同,但使用参数作为字典,因此更容易设置不同的值

import requests

headers = {
    'User-Agent': 'Mozilla/5.0',
    #'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0',
    'Referer': 'https://stats.nba.com/players/drives/',
    #'Accept': 'application/json, text/plain, */*',

    'x-nba-stats-origin': 'stats',
    'x-nba-stats-token': 'true',
}

url = 'https://stats.nba.com/stats/leaguedashptstats'

params = {
    'College': '',
    'Conference': '',
    'Country': '',
    'DateFrom': '',
    'DateTo': '',
    'Division': '',
    'DraftPick': '',
    'DraftYear': '',
    'GameScope': '',
    'Height': '',
    'LastNGames': '0',
    'LeagueID': '00',
    'Location': '',
    'Month': '0',
    'OpponentTeamID': '0',
    'Outcome': '',
    'PORound': '0',
    'PerMode': 'PerGame',
    'PlayerExperience': '',
    'PlayerOrTeam': 'Player',
    'PlayerPosition': '',
    'PtMeasureType': 'Drives',
    'Season': '2019-20',
    'SeasonSegment': '',
    'SeasonType': 'Regular Season',
    'StarterBench': '',
    'TeamID': '0',
    'VsConference': '',
    'VsDivision': '',
    'Weight': '',
}

r = requests.get(url, headers=headers, params=params)
#print(r.request.url)
data = r.json()

print(data)

网络XHR响应选项卡
显示从浏览器发送到服务器的请求的结果-它们不会保留请求,您也无法获取请求。最好使用真实标题
用户代理
和web浏览器使用的其他标题。还可以使用
requests.Session
保存服务器使用的所有cookie。主pge可能需要使用
requests.get()
才能从服务器获取Cookie。
Network XHR Response tab
显示从浏览器发送到服务器的请求的结果-它们不会保留请求,您也无法获取。最好使用真实标题
用户代理
和web浏览器使用的其他标题。还可以使用
requests.Session
保存服务器使用的所有cookie。主pge可能需要使用
requests.get()
才能从服务器获取Cookie。我尝试了这个方法,但没有成功。即使使用这个精确的参数,我仍然无法从API获得响应code@JSONK. 首先,您应该显示
r.text
,以查看从服务器获得的内容。也许你会收到机器人和垃圾邮件的警告。这个问题已经问了将近一年了,网页可以更改所有链接或添加新的方法来获取数据。@JSONK-我检查了代码和网页,我必须添加标题
'x-nba-stats-origin':'stats','x-nba-stats-token':'true',
,才能再次工作。非常感谢!这很有效,我已经在我的项目上完成了很多工作。我很感激你的帮助,我试过了,但是没有运气。即使使用这个精确的参数,我仍然无法从API获得响应code@JSONK. 首先,您应该显示
r.text
,以查看从服务器获得的内容。也许你会收到机器人和垃圾邮件的警告。这个问题已经问了将近一年了,网页可以更改所有链接或添加新的方法来获取数据。@JSONK-我检查了代码和网页,我必须添加标题
'x-nba-stats-origin':'stats','x-nba-stats-token':'true',
,才能再次工作。非常感谢!这很有效,我已经在我的项目上完成了很多工作。我感谢你的帮助