Skip to content

Instantly share code, notes, and snippets.

@timmyshen
Forked from tonyromarock/NBA_stats_mining.py
Created December 27, 2015 16:30
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save timmyshen/32d682c7b8aef014c256 to your computer and use it in GitHub Desktop.
Save timmyshen/32d682c7b8aef014c256 to your computer and use it in GitHub Desktop.
Scrapping NBA player stats from stats.nba.com
import requests
import csv
import sys
# get me all active players
url_allPlayers = ("http://stats.nba.com/stats/commonallplayers?IsOnlyCurrentSeason"
"=0&LeagueID=00&Season=2015-16")
#request url and parse the JSON
response = requests.get(url_allPlayers)
response.raise_for_status()
players = response.json()['resultSets'][0]['rowSet']
# use roster status flag to check if player is still actively playing
active_players = [players[i] for i in range(0,len(players)) if players[i][2]==1 ]
ids = [active_players[i][0] for i in range(0,len(active_players))]
print("Number of Active Players: " + str(len(ids)))
name_height_pos = []
for i in ids:
url_onePlayer=("http://stats.nba.com/stats/commonplayerinfo?"
"LeagueID=00&PlayerID=" + str(i) + "&SeasonType=Regular+Season")
#request url and parse the JSON
response = requests.get(url_onePlayer)
response.raise_for_status()
one_player = response.json()['resultSets'][0]['rowSet']
stats_player = response.json()['resultSets'][1]['rowSet']
try:
points = stats_player[0][3]
assists = stats_player[0][4]
rebounds = stats_player[0][5]
PIE = stats_player[0][6]
# handle the case, where player is active, but didn't play
# in any game so far in this season (-1 just a place holder value)
except IndexError:
points = -1
assists = -1
rebounds = -1
PIE = -1
name_height_pos.append([one_player[0][1] + " " + one_player[0][2],
one_player[0][10],
one_player[0][14],
one_player[0][18],
"http://i.cdn.turner.com/nba/nba/.element/img/2.0/sect/statscube/players/large/"+one_player[0][1].lower()+"_"+ one_player[0][2].lower() +".png",
points,
assists,
rebounds,
PIE])
#convert from inches to cm
for i in range(0,len(name_height_pos)):
feet = name_height_pos[i][1][0]
inches = name_height_pos[i][1][2:]
result = (float(feet) * 12 + float(inches)) * 2.54;
name_height_pos[i][1] = result
answer = input("Save as player.csv -- y/n\t")
if answer[0] == "n":
sys.exit()
elif answer[0] != "y":
sys.exit()
else:
with open("player.csv", "w") as csvfile:
writer = csv.writer(csvfile, delimiter=",", lineterminator="\n")
writer.writerow(["Name","Height","Pos","Team","img_Link","PTS","AST","REB","PIE"])
for row in name_height_pos:
writer.writerow(row)
print("Saved as \'player.csv\'")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment