Wpis z mikrobloga

Hej, Mirki!

Chciałbym napisać skrypt, który pobiera z tej strony:
http://www.90minut.pl/liga/0/liga9938.html

wyniki oraz drużyny, które ze sobą grały(z podziałem gospodarz, gość, wynik).

Dla jednej kolejki udało mi się to zrobić, jednak dla wszystkich kolejek jednocześnie nie umiem uzyskać samego tekstu.

Taki kod udało mi się napisać:
https://pastebin.com/nbyL1Gk9

Moglibyście mi pomóc rozwiązać ten problem?

#pyhon #programowanie #webscraping
  • 9
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@NastyChoco: jak dla mnie działa prawie OK dla wszystkich rozegranych kolejek. Gorzej z nierozegranymi, bo szukasz znaczników których w dalszych tabelach nie ma. Interesują Cię nierozegrane mecze w ogóle?
  • Odpowiedz
@kao3991: Interesują mnie tylko rozegrane mecze, chciałbym to wrzucić do jakiejś tabelki, tak żeby np. była kolumna gospodarz, gość, wynik. Do tego nie wiem jak usunąć znacznik **, bo przy find_all nie działa .text, a jak używam samego find to nie wypisuje mi wszystkich kolejek, tylko jedną bez wyników.**
  • Odpowiedz
@NastyChoco na Twoim miejscu bym zrobił tak w takim razie: 1. zrobił sobie klasę Match na mecze
(3 pola - gospodarze, goście, wynik), 2. w pętli w linii 17 zamiast wpisywać wszystkie w tablicę, to budował obiekt tej klasy na podstawie danych (czyli gos[0] do pola gospodarze, gos[2] do goście, gos[1] do wyniku), potem taki obiekt dodawał do tablicy.
Od biedy zamiast obiektu i klasy możesz się posłużyć dictionary, ale lepsze
  • Odpowiedz
@kao3991: Nie do końca ogarniam klasy i obiekty przez co chyba średnio zrozumiałem. Mam zrobić klasę, w której będą po prostu 3 zmienne(gospodarz, gość, wynik) - do tych zmiennych mam dopisać jakieś znacznik ze strony?
Bo nie bardzo wiem jak to wszystko połączyć.
  • Odpowiedz
@NastyChoco: OK, na początek łatwiej będzie na słowniku, olej te klasy :)
Masz w ostatniej pętli (18 linia) tablicę gos = ona zawiera wszystkie znaczniki które udało się znaleźć w tabeli, bez podziału na konkretne mecze. Najpierw zamień to tak, żebyś był w stanie w jednym "obrocie" pętli obrabiać tylko jeden mecz. Czyli nie szukaj w tabeli od razu , a najpierw znajdź | (bo jeden tr = jeden mecz, albo inne info które musisz pomijać). Po drugie zrób sobie tablicę ma mecze w której będziesz miał jeden wpis = jeden mecz - logiczne że tak najwygodniej będzie.
I teraz, w pętli która obrabia mecze możesz mieć po prostu instrukcję na przykład taką matches.append({
'guest': tr[0],
'host': tr[2],
'result'
  • Odpowiedz
Zmieniłem pętle, która szuka **na taką, która szuka |:

kolejki = []
for kolejka in wszystkie_kolejki:
kolejki.append((kolejka.find('tr').text))

i
  • Odpowiedz
@NastyChoco: do dupy zaimplementowałeś, to i jest do dupy :) musisz przeiterować się po wszystkich | z każdej tabeli. No i nie wiem czy OK dla Ciebie jest wyciąganie całego .text z |, możesz z każdego | wyszukać tylko i przypisać sobie do słownika odpowiednio.
  • Odpowiedz
@kao3991: Chyba nie czaje jak przeiterować po wszystkich |.
Całe | się przyda później na pewno, bo tak naprawdę interesuje mnie nie tylko sam wynik, ale też reszta informacji.
  • Odpowiedz