[Python] I wanted to get the number of playoff games of a list of 200 players from Basketball...

Discussão em 'Python' iniciado por Stack, Abril 22, 2025.

  1. Stack

    Stack Membro Participativo

    I want to get the number of playoff games played by a list of players. To do that I used Selenium and Beautiful Soup. The result is being saved in a csv file but the values for each of the player is coming as 0.

    Code I tried:

    # Load Excel
    df = pd.read_excel("nba.xlsx", sheet_name="Sheet9")
    players = df['Player'].str.replace("*", "", regex=False).str.strip()

    # Selenium setup
    chrome_options = Options()
    chrome_options.add_argument("--headless")
    chrome_options.add_argument("--disable-gpu")
    driver = webdriver.Chrome(options=chrome_options)

    def get_player_code(name):
    name = name.lower().replace(".", "")
    parts = name.split()
    last = parts[-1].replace("’", "").replace("'", "")
    first = parts[0].replace("’", "").replace("'", "")
    code = (last[:5] if len(last) >= 5 else last).ljust(5, 'x')
    code += (first[:2] if len(first) >= 2 else first).ljust(2, 'x')
    return code + "01"

    def get_playoff_games(player_name):
    player_code = get_player_code(player_name)
    url = f"https://www.basketball-reference.com/players/{player_code[0]}/{player_code}.html"
    print(f"Fetching playoff games for {player_name} -> {url}")

    try:
    driver.get(url)
    time.sleep(2)

    # Use BeautifulSoup to parse the *commented* tables
    soup = BeautifulSoup(driver.page_source, "html.parser")
    comments = soup.find_all(string=lambda text: isinstance(text, Comment))

    for comment in comments:
    if "id=\"totals\"" in comment:
    table_soup = BeautifulSoup(comment, "html.parser")
    foot = table_soup.find("tfoot")
    if foot:
    tds = foot.find_all("td")
    if len(tds) > 0:
    return int(tds[0].text) # First TD is Games (G)
    return 0
    except Exception as e:
    print(f"Error for {player_name}: {e}")
    return 0

    results = []
    for player in players:
    games = get_playoff_games(player)
    results.append({"Player": player, "Playoff Games": games})

    driver.quit()
    final_df = pd.DataFrame(results)
    final_df.to_csv("nba_playoff_games.csv", index=False)
    print("Saved as nba_playoff_games.csv")

    Continue reading...

Compartilhe esta Página