program do przerzucania statystyk z flashscora do excela

program do przerzucania statystyk z flashscora do excela
BK
  • Rejestracja:4 miesiące
  • Ostatnio:4 dni
  • Postów:4
0

Cześć w programowaniu jestem laikiem kiedyś robiłem jakiś darmowy kurs C++ i to tyle może jakieś tam podstawy podstaw znam wiem jak to działa itp.
Chciałbym stworzyć program który będzie pobierał dane wartości ze strony flashscore i wrzucał je do mojego pliku w excelu w odpowiednie pola ,chciałbym aby działa tak że wprowadzam link danego meczu np.: https://www.flashscore.pl/mecz/tYWFHDyI/#/szczegoly-meczu i program wchodzi najpierw w tabela > U siebie> (znajduje po nazwie druzyne gospodarza i przenosi do excel nastepujace dane: ilosc meczy, pkt rzucone, pkt stracone) potem wchodzi w tabela > na wyjeździe (znajduje po nazwe druzyne gosci i wprowadza te same dane do excela ) jako że sie nie znam na programowaniu to napisałem na chatgpt o jakis zarys kodu i wywalił coś takiego:

Kopiuj
import requests
from bs4 import BeautifulSoup
import pandas as pd

# Funkcja pobierająca dane z tabeli dla danej drużyny
def get_team_stats(url, team_name, section_class):
    response = requests.get(url)
    response.raise_for_status()  # Upewnij się, że żądanie się powiodło
    soup = BeautifulSoup(response.content, 'html.parser')
    
    # Znajdź odpowiednią sekcję (np. "U siebie" lub "Na wyjeździe")
    table_section = soup.find('div', {'class': section_class})  # Dopasowanie klasy sekcji
    
    if not table_section:
        raise ValueError(f"Sekcja '{section_class}' nie została znaleziona na stronie.")
    
    # Znajdź wiersz dla drużyny
    team_row = None
    for row in table_section.find_all('tr'):
        if team_name in row.text:
            team_row = row
            break
    
    if not team_row:
        raise ValueError(f"Drużyna '{team_name}' nie została znaleziona w sekcji '{section_class}'.")
    
    # Pobierz dane statystyczne
    stats = team_row.find_all('td')
    matches = int(stats[1].text.strip())
    points_scored = int(stats[2].text.strip())
    points_conceded = int(stats[3].text.strip())
    
    return matches, points_scored, points_conceded

# Funkcja główna
def process_game(url, excel_file):
    response = requests.get(url)
    response.raise_for_status()
    soup = BeautifulSoup(response.content, 'html.parser')
    
    # Znajdź drużyny gospodarzy i gości
    home_team_element = soup.find('a', {'class': 'participant__participantName participant__overflow'})  # Dopasuj klasę
    if not home_team_element:
        raise ValueError("Nie znaleziono drużyny gospodarzy.")
    home_team = home_team_element.text.strip()
    
    away_team_element = soup.find('a', {'class': 'participant__participantName'})  # Dopasuj klasę
    if not away_team_element:
        raise ValueError("Nie znaleziono drużyny gości.")
    away_team = away_team_element.text.strip()
    
    # Pobierz dane statystyczne
    home_stats = get_team_stats(url, home_team, 'u-siebie')  # Dopasuj nazwę sekcji
    away_stats = get_team_stats(url, away_team, 'na-wyjezdzie')  # Dopasuj nazwę sekcji
    
    # Wprowadź dane do pliku Excel
    df = pd.read_excel(excel_file)
    
    # Przypisanie danych do odpowiednich kolumn
    df.loc[0, 'Drużyna'] = home_team
    df.loc[0, 'Mecze'] = home_stats[0]
    df.loc[0, 'Punkty rzucone'] = home_stats[1]
    df.loc[0, 'Punkty stracone'] = home_stats[2]
    
    df.loc[1, 'Drużyna'] = away_team
    df.loc[1, 'Mecze'] = away_stats[0]
    df.loc[1, 'Punkty rzucone'] = away_stats[1]
    df.loc[1, 'Punkty stracone'] = away_stats[2]
    
    # Zapis do pliku Excel
    df.to_excel(excel_file, index=False)
    print("Dane zostały zapisane do pliku Excel.")

# Przykład użycia
url = "https://www.flashscore.pl/mecz/tYWFHDyI/#/szczegoly-meczu"
excel_file = "statystyki.xlsx"
process_game(url, excel_file)

Nawet nie znając sie na tym myśle że jest tu dużo do zmiany bład już wywala w linijce znajdz druzyne gospodarzy : home_team_element = soup.find('a', {'class': 'participant__participantName participant__overflow'}) czyli ta formuła jest błędna na początek jaką formuła musze ją zastapić aby dobrze dobrze znajdwywała nazwe drużyn dodam że w kodzie strony wyglada to tak : a href="/druzyna/bilbao/GWZ15Sne/" class="participant__participantName participant__overflow " target="_blank">Bilbao</a>
Gdzie nazwa drużyny kryje się po target="_blank"> (czyli bilbao)

edytowany 2x, ostatnio: cerrato
lion137
  • Rejestracja:około 8 lat
  • Ostatnio:około 4 godziny
  • Postów:4935
0

Weź kod strony, odszukaj ten element i przeanalizuj/wrzuć w chata.


Konrado777
  • Rejestracja:ponad 2 lata
  • Ostatnio:3 miesiące
  • Postów:75
0

Z FlashemScore nie przejdzie. Tam obiekty są tworzone dynamicznie i nie przejdzie parsowanie.

KE
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 7 godzin
  • Postów:681
0

jako że sie nie znam na programowaniu to napisałem na chatgpt

No to zapytaj czata dalej przecież xD

A tak na serio - tak jak @Konrado777 pisze - dane prawie na pewno nie są zawarte w HTML-u zwracanym przez serwer, a już w ogóle na pewno nie, jeśli się zmieniają na żywo. Potrzebujesz narzędzia do automatyzacji przeglądarki - czyli Selenium, Selenide, Playwright, Nightwatch - jest tego sporo.

lion137
  • Rejestracja:około 8 lat
  • Ostatnio:około 4 godziny
  • Postów:4935
0

@Konrado777: a to gorzej, tak jak pisze @kelog , albo są też gotowe rozwiązania, ale to juz za $$$


edytowany 1x, ostatnio: lion137
BK
  • Rejestracja:4 miesiące
  • Ostatnio:4 dni
  • Postów:4
0
kelog napisał(a):

jako że sie nie znam na programowaniu to napisałem na chatgpt

No to zapytaj czata dalej przecież xD

A tak na serio - tak jak @Konrado777 pisze - dane prawie na pewno nie są zawarte w HTML-u zwracanym przez serwer, a już w ogóle na pewno nie, jeśli się zmieniają na żywo. Potrzebujesz narzędzia do automatyzacji przeglądarki - czyli Selenium, Selenide, Playwright, Nightwatch - jest tego sporo.

Pytalem chata dalej podawalem mu też classy nadrzędne ze źródła ale nic nie pomogło w źródle strony jest podana tekstowo nazwa drużyny tak samo jak pkt. czy mimo to muszę użyć narzędzi o których piszecie ?

1programmer
  • Rejestracja:prawie 5 lat
  • Ostatnio:2 dni
  • Lokalizacja:Wrocław
  • Postów:520
0

Jeśli chcesz wchodzić w różne zakładki ze statystykami, to będziesz potrzebował Selenium na przykład. Dodatkowo flashscore pewnie nie wysya całego kontentu statycznie. BeautifulSoup wysyła zapytanie i pobiera źródło strony, więc nie nadaje się do stron mocno dociągających dane z backendu. Można w Seleniunm uruchamiać też JSa, więc można natywnie spróbować.

Ogólnie moim zdaniem na 99% AI ci tego nie ogarnie. AI nie zna kontekstu, tego czy są tworzone dynamicznie elementy itd.


Programować muszę, bo się uduszę
BK
  • Rejestracja:4 miesiące
  • Ostatnio:4 dni
  • Postów:4
0

Dzięki za wszystkie odpowiedzi udało mi się zrobić ten program tyle że sciaga dane z livescore

BK
  • Rejestracja:4 miesiące
  • Ostatnio:4 dni
  • Postów:4
0

Witam ponownie 😀
programik trochę rozwinąłem teraz pobiera mi kursy meczu z sofascore i dane z livescore potem w excelu porównuje je z kursami wykreowanymi w poissonie ale mniejsza o to ,chcialbym np. aby program pobierał dane tylko z sofascore ponieważ statystyki które mnie interesują też są na tej stronie niestety ta strona ma bardziej skomplikowany html ponieważ każda drużyna w tabeli jest w podobnej classie i cięzko nie wiem jak można to zrobic koduje cały czas oczywiscie z pomoca AI , program zapisuje nazwe druzyny gospodarza i goscia potem przechodzi na zakladke HOME i ma za zadanie odszukac najpierw nazwe druzyny w tabeli a nastepnie pobrac dane z pierwszych napotkanych class pobrac ilosc meczy i ilosc bramek straconych i strzelonych dla drużyny doszedłem do momentu gdzie program raz odpowiednio pobrał mi dane dla jednego meczu tylko że mimo że wcześniej przeszedł do zakladki HOME I AWAY to pobrał dane z głownej tabeli , pewnie chodzi o to że program znajduję te dane w kodzie szybciej i wyrzuca je
tak obecnie wyglada ta funkcja :

Kopiuj
# ✅ Pobranie statystyk drużyn
    statystyki_druzyn = None
    try:
        # Wejście do zakładki "Home"
        home_tab = WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable((By.XPATH, "//div[@data-tabid='2' and contains(text(),'Home')]"))
        )
        home_tab.click()
        print("✅ Kliknięto zakładkę 'Home'.")

        # Zlokalizowanie drużyny gospodarza w tabeli
        tabela_druzyn = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.XPATH, "//div[@class='Box Flex ifLtqA jCkSpU']"))
        )
        gospodarz_tabela = driver.find_elements(By.XPATH,
                                                f"//div[@class='Text fsoviT' and contains(text(), '{gospodarze}')]")

        if gospodarz_tabela:
            # Zlokalizowanie statystyk drużyny gospodarza
            liczba_meczow_gospodarza = gospodarz_tabela[0].find_element(By.XPATH,
                                                                        "./following::div[contains(@class, 'Box Flex ifLtqA jCkSpU')][1]").text
            bilans_bramek_gospodarza = gospodarz_tabela[0].find_element(By.XPATH,
                                                                        "./following::div[contains(@class, 'Box Flex gFOll jCkSpU')][1]").text
            print(f"📊 Statystyki gospodarza: Mecze: {liczba_meczow_gospodarza} | Bramki: {bilans_bramek_gospodarza}")
        else:
            print(f"❌ Nie znaleziono statystyk gospodarza {gospodarze}")

        # Wejście do zakładki "Away"
        away_tab = WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable((By.XPATH, "//div[@data-tabid='3' and contains(text(),'Away')]"))
        )
        away_tab.click()
        print("✅ Kliknięto zakładkę 'Away'.")

        # Zlokalizowanie drużyny gościa w tabeli
        goscie_tabela = driver.find_elements(By.XPATH,
                                             f"//div[@class='Text fsoviT' and contains(text(), '{goscie}')]")

        if goscie_tabela:
            # Zlokalizowanie statystyk drużyny gościa
            liczba_meczow_goscia = goscie_tabela[0].find_element(By.XPATH,
                                                                 "./following::div[contains(@class, 'Box Flex ifLtqA jCkSpU')][1]").text
            bilans_bramek_goscia = goscie_tabela[0].find_element(By.XPATH,
                                                                 "./following::div[contains(@class, 'Box Flex gFOll jCkSpU')][1]").text
            print(f"📊 Statystyki gościa: Mecze: {liczba_meczow_goscia} | Bramki: {bilans_bramek_goscia}")
        else:
            print(f"❌ Nie znaleziono statystyk gościa {goscie}")

        # Przypisanie statystyk do słownika
        statystyki_druzyn = {
            "Gospodarz_mecze": liczba_meczow_gospodarza,
            "Gospodarz_bramki": bilans_bramek_gospodarza,
            "Gość_mecze": liczba_meczow_goscia,
            "Gość_bramki": bilans_bramek_goscia
        }

    except Exception as e:
        print(f"❌ Błąd przy pobieraniu statystyk drużyn: {e}")

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.