Извлечение определенного элемента таблицы с помощью веб-драйвера selenium

#python-3.x #selenium-webdriver #data-extraction

#python-3.x #selenium-webdriver #извлечение данных

Вопрос:

Здравствуйте, я пытаюсь извлечь некоторые элементы с этого веб-сайта:https://www.oddsportal.com/basketball/italy/lega-a-super-cup/sassari-brindisi-rTJFaIyk /

Я хочу, чтобы у команды дома и на выезде были самые высокие коэффициенты. Эти данные расположены в конце таблицы и являются: 1.31 и 4.57

Вот мой скрипт :

 #!/usr/bin/python3
# -*- coding: utf­-8 ­-*-

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from concurrent.futures import ThreadPoolExecutor

options = Options()
options.headless = True
options.add_argument("window-size=1400,800")
options.add_argument("--no-sandbox")
options.add_argument("--disable-gpu")
options.add_argument("start-maximized")
options.add_argument("enable-automation")
options.add_argument("--disable-infobars")
options.add_argument("--disable-dev-shm-usage")

driver = webdriver.Chrome(options=options)

driver.get("https://www.oddsportal.com/basketball/italy/lega-a-super-cup/sassari-brindisi-rTJFaIyk/")

home_average_odds = [my_elem.text for my_elem in WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.XPATH, '//*[@class="highest"]/td[contains(@class, "right")]')))]

for i in home_average_odds:
    print(i)

driver.close()
driver.quit()        
  

Проблема в том, что у меня нет хорошего результата, вот результат :

 1.31
4.30
 100.4%
  

Ответ №1:

Каков «хороший результат»?

Вы можете получить средние значения, потянув таблицу с помощью pandas и просто потянув эту строку:

 from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from concurrent.futures import ThreadPoolExecutor

import pandas as pd

options = Options()
options.headless = True
options.add_argument("window-size=1400,800")
options.add_argument("--no-sandbox")
options.add_argument("--disable-gpu")
options.add_argument("start-maximized")
options.add_argument("enable-automation")
options.add_argument("--disable-infobars")
options.add_argument("--disable-dev-shm-usage")

driver = webdriver.Chrome(options=options)

driver.get("https://www.oddsportal.com/basketball/italy/lega-a-super-cup/sassari-brindisi-rTJFaIyk/")
html = driver.page_source

df = pd.read_html(html)[0]

avg = df[df['Bookmakers'] == 'Average']
print (avg)
  

Вывод:

 print (avg)
   Bookmakers     1     2 Payout Unnamed: 4
49    Average  -408   291  94.4%        NaN
  

Вывод соответствует таблице

введите описание изображения здесь

Комментарии:

1. Спасибо за ваше возвращение. Но у меня точно такая же проблема. Это не те же самые элементы. На веб-странице для строки «Среднее» мы имеем: 1,24 3,92 94,1%, но на выходе вашего способа мы получаем 1,24 3,91 94,4%

2. Та же проблема с последней строкой «Самой высокой» на веб-странице, у нас есть 1,31 4,57 101,8, тогда как на выходе с использованием вашего метода мы получаем 1,31 4,3 100,4

3. В моем случае для последней строки «Наивысший» «хороший результат» будет 1,31 4,57 101,8%

4. Я смотрю на веб-страницу и выходные данные, и они точно такие же. Вам нужно более четко объяснить, в чем проблема. Перейдите к своему сообщению и более четко объясните проблему.

5. Извините, это была личная ошибка. Я запустил свой скрипт, войдя в систему вопреки вам. Итак, в моем случае у меня было больше доступных букмекеров, так что это было не совсем одинаковое значение для среднего и наивысшего.