Xpath — выберите все строки, кроме последнейPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Xpath — выберите все строки, кроме последней

Сообщение Anonymous »

Я создаю веб-скребок на Python и Selenium, который парсит справочный веб-сайт по баскетболу, и мне нужна тонкая настройка операторов Xpath, которые возвращают искомые данные. В настоящее время мне нужен оператор Xpath, который возвращает каждую строку, кроме последней, которая является строкой «награды», которая иногда содержит текст (если игрок выиграл какую-либо награду в этом году) или пустую, если он этого не сделал. Мой код работает нормально, и в основном выбирает то, что мне нужно, но каждый вариант оператора Xpath, который я пробовал, либо не возвращает действительный оператор Xpath, либо просто предоставляет мне все данные, включая последний ряд, который мне не нужен. Вот фрагмент моего рабочего кода вместе с кодом драйвера Selenium, который извлекает каждый элемент таблицы и возвращает его.

Код: Выделить всё

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")
stats()
А вот фрагмент DOM, с которым я работаю.
Фрагмент справочного 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Xpath — выберите все строки, кроме последней
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Xpath — выберите все строки, кроме последней
    Anonymous » » в форуме Python
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Xpath — выберите все столбцы, кроме последнего
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • При печати последней части моего списка он распечатывает последнюю букву вместо последней строки
    Anonymous » » в форуме Python
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • При печати последней части моего списка он распечатывает последнюю букву вместо последней строки
    Anonymous » » в форуме Python
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»