Próbuję zeskrobać tę stronę internetową https://www.oddsportal.com/moving-margins Ale kodeks pracy, a czasami nie, a nawet jeśli praca nie zeskrobują wszystkich danych, których potrzebuję na mecz.

u = 'https://www.oddsportal.com/moving-margins/'
driver = webdriver.Chrome(executable_path=r"C:\chromedriver.exe")
driver.maximize_window()
driver.get(u)
#Use Explicit time wait for fast execution
WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.CSS_SELECTOR, "#moving_margins_content_overall")))
driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
table_data =  driver.find_elements_by_xpath("//div[@id='moving_margins_content_overall']//tr[@class='odd' or @class='dark']")
table =[]
# Creating a list of lists, where each list consist all data in each row either with class dark or odd

for data in table_data:
    row = []
    dark_row = data.find_elements_by_xpath((".//th//a"))
    for col in dark_row:
        row.append(col.text.replace("\n"," "))
    odd_row = data.find_elements_by_xpath((".//following-sibling::tr[@class='odd']//td"))
    for col in odd_row:
        row.append(col.text.replace("\n", " "))
    table.append(row)

Moim celem jest przechowywanie danych w pliku CSV z tymi kolumnami:

sport    country    competiton    handicap    match_date  match                  hdp_open  hdp_close  bookmaker
Tennis   Czech      Ostrava..     AH 0 Games  Today12:00  Karatsev A. - Otte O.  0.5       -1.5      Nordicbet   

0
max scender 6 wrzesień 2020, 12:30

1 odpowiedź

Najlepsza odpowiedź

Myślę, że problem w Case Code jest to, że strona ma w niektórych przypadkach pojedynczy "ciemny" wiersz dla wielu rzędów "kursów". Więc kiedy pętlasz elementy, tworzysz pojedynczy rekord dla tabeli, który faktycznie ma więcej rekordów.

Ten kod powinien pasować do potrzeb, ale pamiętaj, że nie jest optymalne, ponieważ nie dba o możliwe wyjątki, ale jest to punkt wyjścia:

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
import selenium.webdriver.support.expected_conditions as EC
from selenium.webdriver.common.by import By

u = 'https://www.oddsportal.com/moving-margins/'
driver = webdriver.Chrome(executable_path=r"chromedriver.exe")
driver.maximize_window()
driver.get(u)
#Use Explicit time wait for fast execution
WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.CSS_SELECTOR, "#moving_margins_content_overall")))
driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
tables =  driver.find_elements_by_xpath("//div[@id='moving_margins_content_overall']//table")
tableData =[]

for table in tables:
    trDark = table.find_element_by_xpath('.//tr[@class="dark"]')
    trOdds = table.find_elements_by_xpath('.//tr[@class="odd"]')

    row = [trDark.text.strip().replace("\n", " ")]
    for odd in trOdds:
        tds = [
            td.text.strip().replace("\n", " ") 
            for td in odd.find_elements_by_xpath('.//td')
        ]
        row = row + tds
    tableData.append(row)

print(tableData)
0
Mattia Galati 6 wrzesień 2020, 15:30