Python抓取NBA跟踪驱动器数据
我对Python相当陌生。我正试图通过 我使用ChromeDevTools查找API URL。然后,我使用requests包获取JSON字符串 原始代码: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
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',
,才能再次工作。非常感谢!这很有效,我已经在我的项目上完成了很多工作。我感谢你的帮助