Код: Выделить всё
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import NoSuchElementException, TimeoutException
import pandas as pd
class PlayerPerGameStats():
def __init__(self, player_name):
self.player_name = player_name.lower()
self.options = Options()
#No popup window when called
self.options.add_argument("--headless=new")
#No image loading for performance
self.options.add_experimental_option(
"prefs", {
"profile.managed_default_content_settings.images" : 2,
}
)
self.browser = webdriver.Chrome(options=self.options)
self.url = f"https://www.basketball-reference.com/players/{self.player_name[0]}/{self.player_name}01.html"
self.browser.get(self.url)
#Add wait for page load
WebDriverWait(self.browser, 10).until(
EC.presence_of_element_located((By.ID, 'per_game_stats'))
)
def get_player_row_stats(self) -> list:
try:
table = self.browser.find_element(By.ID, 'per_game_stats')
rows = table.find_elements(By.XPATH, './tbody')
stat_rows = [row.text for row in rows[0].find_elements(By.XPATH, './tr')]
#List split to get each stat as it's own index
player_data = [y for x in stat_rows for y in x.split(' ')]
print(player_data)
return player_data
except Exception as e:
print(f"Error extracting row stats: {e}")
return None
#To run it
stats = PlayerPerGameStats("lillada")
player_stats = stats.get_player_row_stats()
Фрагмент справочного DOM по баскетболу
Некоторые варианты xpath, которые я пробовал, включают:
Код: Выделить всё
stat_rows = [row.text for row in rows[0].find_elements(By.XPATH, './tr[position() < last()]')]
Код: Выделить всё
stat_rows = [row.text for row in rows[0].find_elements(By.XPATH, './tr[not(contains(@data-stat, 'awards'))]')]
Спасибо, что нашли время прочитать это. Если потребуется какая-либо дополнительная информация или код, я буду более чем рад предоставить — эта проблема не дает мне покоя уже несколько недель, и я просто хочу выяснить, как ее решить.
Подробнее здесь: https://stackoverflow.com/questions/792 ... t-the-last