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")
player_stats = stats.get_player_row_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 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Xpath — выберите все строки, кроме последней
    Anonymous » » в форуме Python
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Xpath — выберите все строки, кроме последней
    Anonymous » » в форуме Python
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Как сделать так, чтобы все столбцы переключались на свертывание в DataTable, реагируя на щелчок, кроме последнего?
    Гость » » в форуме CSS
    0 Ответы
    21 Просмотры
    Последнее сообщение Гость
  • Pyspark: выберите все столбцы, кроме конкретных столбцов
    Anonymous » » в форуме Python
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous

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