示例#1
0
def get_stats(name, stat_type='PER_GAME', season=0, playoffs=False, career=False):
    try:
        suffix1 = get_player_suffix(name, False).replace('/', '%2F')
        for i in range(1, 6):
            suffix = suffix1[:-6] + str(i) + ".html"
            selector = stat_type.lower()
            if playoffs:
                selector = 'playoffs_'+selector
            r = get(f'https://widgets.sports-reference.com/wg.fcgi?css=1&site=bbr&url={suffix}&div=div_{selector}')
            if r.status_code==200:
                soup = BeautifulSoup(r.content, 'html.parser')
                table = soup.find('table')
                df = pd.read_html(str(table))[0]
                df.rename(columns={'Season': 'SEASON', 'Age': 'AGE',
                          'Tm': 'TEAM', 'Lg': 'LEAGUE', 'Pos': 'POS'}, inplace=True)
                career_index = df[df['SEASON']=='Career'].index[0]
                if career:
                    df = df.iloc[career_index+2:, :]
                else:
                    df = df.iloc[:career_index, :]

                df = df.reset_index().dropna(axis=1).drop('index', axis=1)
                if season and season >= 1949 and season <= int(date.today().year):
                    season1 = str(season - 1) + "-" + str(season)[2:]
                    if len(df.loc[df['SEASON']==season1].head(1)) != 0:
                        return df.loc[df['SEASON']==season1].head(1).reset_index(drop=True)

                else:
                    return df

    except:
        suffix1 = get_player_suffix(name, True).replace('/', '%2F')
        for i in range(1, 6):
            suffix = suffix1[:-6] + str(i) + ".html"
            selector = stat_type.lower()
            if playoffs:
                selector = 'playoffs_'+selector
            r = get(f'https://widgets.sports-reference.com/wg.fcgi?css=1&site=bbr&url={suffix}&div=div_{selector}')
            if r.status_code==200:
                soup = BeautifulSoup(r.content, 'html.parser')
                table = soup.find('table')
                df = pd.read_html(str(table))[0]
                df.rename(columns={'Season': 'SEASON', 'Age': 'AGE',
                          'Tm': 'TEAM', 'Lg': 'LEAGUE', 'Pos': 'POS'}, inplace=True)
                career_index = df[df['SEASON']=='Career'].index[0]
                if career:
                    df = df.iloc[career_index+2:, :]
                else:
                    df = df.iloc[:career_index, :]

                df = df.reset_index().dropna(axis=1).drop('index', axis=1)
                if season and season >= 1949 and season <= int(date.today().year):
                    season1 = str(season - 1) + "-" + str(season)[2:]
                    if len(df.loc[df['SEASON']==season1].head(1)) != 0:
                        return df.loc[df['SEASON']==season1].head(1).reset_index(drop=True)

                else:
                    return df
            
    return df
示例#2
0
def get_stats(name, stat_type='PER_GAME', playoffs=False, career=False):
    suffix = get_player_suffix(name).replace('/', '%2F')
    selector = stat_type.lower()
    if playoffs:
        selector = 'playoffs_' + selector
    r = get(
        f'https://widgets.sports-reference.com/wg.fcgi?css=1&site=bbr&url={suffix}&div=div_{selector}'
    )
    if r.status_code == 200:
        soup = BeautifulSoup(r.content, 'html.parser')
        table = soup.find('table')
        df = pd.read_html(str(table))[0]
        df.rename(columns={
            'Season': 'SEASON',
            'Age': 'AGE',
            'Tm': 'TEAM',
            'Lg': 'LEAGUE',
            'Pos': 'POS'
        },
                  inplace=True)
        if 'FG.1' in df.columns:
            df.rename(columns={'FG.1': 'FG%'}, inplace=True)
        if 'eFG' in df.columns:
            df.rename(columns={'eFG': 'eFG%'}, inplace=True)
        if 'FT.1' in df.columns:
            df.rename(columns={'FT.1': 'FT%'}, inplace=True)

        career_index = df[df['SEASON'] == 'Career'].index[0]
        if career:
            df = df.iloc[career_index + 2:, :]
        else:
            df = df.iloc[:career_index, :]

        df = df.reset_index().drop('index', axis=1)
        return df
示例#3
0
def get_game_logs(name, start_date, end_date, playoffs=False):
    suffix = get_player_suffix(name).replace('/', '%2F').replace('.html', '')
    start_date_str = start_date
    end_date_str = end_date
    start_date = pd.to_datetime(start_date)
    end_date = pd.to_datetime(end_date)
    years = list(range(start_date.year, end_date.year+2))
    if playoffs:
        selector = 'div_pgl_basic_playoffs'
    else:
        selector = 'div_pgl_basic'
    final_df = None
    for year in years:
        r = get(f'https://widgets.sports-reference.com/wg.fcgi?css=1&site=bbr&url={suffix}%2Fgamelog%2F{year}&div={selector}')
        if r.status_code==200:
            soup = BeautifulSoup(r.content, 'html.parser')
            table = soup.find('table')
            df = pd.read_html(str(table))[0]
            df.rename(columns = {'Date': 'DATE', 'Age': 'AGE', 'Tm': 'TEAM', 'Unnamed: 5': 'HOME/AWAY', 'Opp': 'OPPONENT',
                    'Unnamed: 7': 'RESULT', 'GmSc': 'GAME_SCORE'}, inplace=True)
            df['HOME/AWAY'] = df['HOME/AWAY'].apply(lambda x: 'AWAY' if x=='@' else 'HOME')
            df = df[df['Rk']!='Rk']
            df = df.drop(['Rk', 'G'], axis=1)
            df = df.loc[(df['DATE'] >= start_date_str) & (df['DATE'] <= end_date_str)]
            active_df = pd.DataFrame(columns = list(df.columns))
            for index, row in df.iterrows():
                if len(row['GS'])>1:
                    continue
                active_df = active_df.append(row)
            if final_df is None:
                final_df = pd.DataFrame(columns=list(active_df.columns))
            final_df = final_df.append(active_df)
    return final_df
示例#4
0
def get_stats(name, stat_type='PER_GAME', playoffs=False, career=False):
    #credit: https://github.com/vishaalagartha/basketball_reference_scraper
    try:
        from utils import get_player_suffix
    except:
        from basketball_reference_scraper.utils import get_player_suffix
    suffix = get_player_suffix(name).replace('/', '%2F')
    selector = stat_type.lower()
    if playoffs:
        selector = 'playoffs_'+selector
    r = get(f'https://widgets.sports-reference.com/wg.fcgi?css=1&site=bbr&url={suffix}&div=div_{selector}')
    if r.status_code==200:
        soup = BeautifulSoup(r.content, 'html.parser')
        table = soup.find('table')
        df = pd.read_html(str(table))[0]
        df.rename(columns={'Season': 'SEASON', 'Age': 'AGE',
                  'Tm': 'TEAM', 'Lg': 'LEAGUE', 'Pos': 'POS'}, inplace=True)
        career_index = df[df['SEASON']=='Career'].index[0]
        if career:
            df = df.iloc[career_index+2:, :]
        else:
            df = df.iloc[:career_index, :]

        df = df.reset_index().dropna(axis=1).drop('index', axis=1)
        return df
示例#5
0
def get_game_logs(name, start_date, end_date, playoffs=False, num_games = None):
    """
    Will get the raw gamelogs for a given player in the given date ranges

    Args:
        name (str): Name of player whose games you want
        start_date (str): Inclusive start date of game logs in format 'YYYY-MM-DD'
        end_date (str): Inclusive end date of game logs in format 'YYYY-MM-DD'
        playoffs (bool): Whetehr or not to include playoff games

    Returns:
        returns a dataframe with a record of games between the dates, including categories ['Rk', 'G', 'DATE', 'AGE', 'TEAM', 'HOME/AWAY', 'OPPONENT', 'RESULT', 'GS', 'MP', 'FG', 'FGA', 'FG%', '3P', '3PA', '3P%', 'FT', 'FTA', 'FT%', 'ORB', 'DRB', 'TRB', 'AST', 'STL', 'BLK', 'TOV', 'PF', 'PTS', 'GAME_SCORE', '+/-']
   """
    suffix = utils.get_player_suffix(name).replace('/', '%2F').replace('.html', '')
    start_date_str = start_date
    end_date_str = end_date
    start_date = pd.to_datetime(start_date)
    end_date = pd.to_datetime(end_date)
    years = list(range(start_date.year, end_date.year+2))
    if playoffs:
        selector = 'div_pgl_basic_playoffs'
    else:
        selector = 'div_pgl_basic'
    final_df = None
    for year in years:
        url = f'https://widgets.sports-reference.com/wg.fcgi?css=1&site=bbr&url={suffix}%2Fgamelog%2F{year}&div={selector}'
        r = get(url)
        if r.status_code==200:
            soup = BeautifulSoup(r.content, 'html.parser')
            table = soup.find('table')
            try:
                df = pd.read_html(str(table))[0]
            except ValueError as e:
                continue
            df.rename(columns = {'Date': 'DATE', 'Age': 'AGE', 'Tm': 'TEAM', 'Unnamed: 5': 'HOME/AWAY', 'Opp': 'OPPONENT','Unnamed: 7': 'RESULT', 'GmSc': 'GAME_SCORE'}, inplace=True)
            df['HOME/AWAY'] = df['HOME/AWAY'].apply(lambda x: 'AWAY' if x=='@' else 'HOME')
            df = df[df['Rk']!='Rk']
            try:
                df = df.drop(['Unnamed: 30'], axis=1)
            except Exception as e:
                pass
            df = df.loc[(df['DATE'] >= start_date_str) & (df['DATE'] <= end_date_str)]
            active_df = pd.DataFrame(columns = list(df.columns))
            for index, row in df.iterrows():
                if len(row['GS'])>1:
                    empty_game = pd.DataFrame([[row['Rk'], row['G'], row['DATE'], row['AGE'], row['TEAM'], row['HOME/AWAY'], row['OPPONENT'], row['RESULT'], 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])
                    empty_game.columns = list(df.columns)
                    active_df = active_df.append(empty_game)
                    continue
                active_df = active_df.append(row)
            if final_df is None:
                final_df = pd.DataFrame(columns=list(active_df.columns))
            final_df = final_df.append(active_df)
    if num_games != None:
        final_df = final_df[(final_df['Rk'].astype(int) <= num_games)]
    return final_df
def get_game_logs(_name, year, playoffs=False, ask_matches=True):
    name = lookup(_name, ask_matches)
    suffix = get_player_suffix(name).replace('/', '%2F').replace('.html', '')
    if playoffs:
        selector = 'div_pgl_basic_playoffs'
    else:
        selector = 'div_pgl_basic'
    r = get(f'https://widgets.sports-reference.com/wg.fcgi?css=1&site=bbr&url={suffix}%2Fgamelog%2F{year}%2F&div={selector}')
    if r.status_code==200:
        soup = BeautifulSoup(r.content, 'html.parser')
        table = soup.find('table')
        if table:
            df = pd.read_html(str(table))[0]
            df.rename(columns = {'Date': 'DATE', 'Age': 'AGE', 'Tm': 'TEAM', 'Unnamed: 5': 'HOME/AWAY', 'Opp': 'OPPONENT',
                'Unnamed: 7': 'RESULT', 'GmSc': 'GAME_SCORE'}, inplace=True)
            df['HOME/AWAY'] = df['HOME/AWAY'].apply(lambda x: 'AWAY' if x=='@' else 'HOME')
            df = df[df['Rk']!='Rk']
            df = df.drop(['Rk', 'G'], axis=1)
            df['DATE'] = pd.to_datetime(df['DATE'])
            df = df[df['GS'] == '1'].reset_index(drop=True)          
    return df
示例#7
0
def get_player_headshot(name):
    suffix = get_player_suffix(name)
    jpg = suffix.split('/')[-1].replace('html', 'jpg')
    url = 'https://d2cwpp38twqe55.cloudfront.net/req/202006192/images/players/' + jpg
    return url