Wpis z mikrobloga

Jak scrapować whoscored.com? Chciałbym pobrać sobie np. listę wszystkich podań i ich współrzędnych z danego meczu (pic related - kropki). Jak się za to zabrać? Dane z innych stron często są łatwo w jsonie lub źródle strony, a tu nie. Wszędzie w internecie czytam że scrapowanie tego jest trudne, a potem widzę jak prawie każdy na tt to robi, ale nie chce ujawniać kodu.

link do przykładowego meczu: https://www.whoscored.com/Matches/1464189/Live/France-Ligue-1-2020-2021-Marseille-Lyon

#python
#scraping
Pobierz tyrytyty - Jak scrapować whoscored.com? Chciałbym pobrać sobie np. listę wszystkich p...
źródło: comment_1614591345zOYaHmtoFElLrcoEQPU9ny.jpg
  • 27
@tyrytyty: no ale co już masz zrobione? Jakimś selenium wyciagasz te dane czy coś? Nikt Ci tu gotowego rozwiązania nie da. Whoscored nie ma otwartego api to musisz to reverse engineerowac samemu.
@Zendemion: no, taka zaleta wypoku nad elektrodą ( ͡° ͜ʖ ͡°) ale musiał zaznaczyć wyższość, nie wytrzymałby janusz nosacz jakby nie zaakcentował że ON UMI a ja NIE UMIĘ i jak śmiem śmieć o coś zapytać xD
@tyrytyty: jest trudne bo whoscored się dobrze zabezpiecza. Pierwsze co to musisz pewnie móc wykonać js'a, czyli użyć pewnie jakiegoś selenium albo headless drivera i nie sprawdzałem jak działa ws, ale pp53 Ci napisał, że zwracany jest obiekt z info meczowymi więc z tego będziesz musiał wyciągnąć info jak już uda Ci się je w ogóle dostać.
@tyrytyty: Jakiej odpowiedzi oczekujesz?
Scrapowanie meczu z whoscored:
1) Przeanalizuj obiekt meczu który podesłałem, sprawdź czy zawiera wszystkie informacje, czy może jest to tylko część.
2) Przeanalizuj kilka obiektów z innych meczy, tak żeby mieć pewność, że rozumiesz jak ten obiekt jest zbudoway
3) zakładam, że obiekt meczu zawiera wszystkie potrzebne dane Gdy będziesz mieć pewność, że wiesz gdzie znajdują się dane i jaki mają format, pobierz źródło strony i wytnij
@Ark00: czyli większość pracy to będzie takie skonfigurowanie selenium by działało, niż samo pobranie danych bo jak zauwazono wyżej to już siedzi w kodzie, yes?

jak googlowałem to ludzie chcieli pojedynczo selenium każdy event wyciągać XD dałbym sobie jaja uciąć że jak sprawdzałem źródło strony wcześniej to te dane nie były zapisane prosto w kodzie
Co do 1) i 2), nie wiem jak się zabezpiecza whoscored, ale mogą "szyfrować" swoje dane poprzez zastosowanie dynamicznego oznaczania eventów. Tzn. w meczu A event 64 oznacza strzelenie bramki, ale w meczu B będzie to faul. Jeżeli coś takiego robią, to gdzieś na stronie musi być konfiguracja tych mapowań.

Po co Ci selenium? Ściąganie strony i wyciąganie obiektu to 5-10 linijek w pythonie. Zapniesz selenium, 3 dni będziesz się uczył jak
czyli większość pracy to będzie takie skonfigurowanie selenium by działało, niż samo pobranie danych bo jak zauwazono wyżej to już siedzi w kodzie, yes?


@tyrytyty: żeby Ci to wyświetlić w przeglądarce to musi jakieś dane pobrać, nie sprawdzałem dokładnie czy po wejściu w podsumowanie meczu pobiera Ci wszystko, czy dodatkowe staty są pobierane po kliknięciu w zawodnika czy jakieś statystyki meczowe, jeśli to drugie to musisz wywołać jeszcze zdarzenia kliknięcia tych
Po co Ci selenium?


@pp53: bo musisz udawać przeglądarkę, inaczej whoscored zwróci Ci gówno. Jak użyjesz requests to gówno dostaniesz z whoscored bo wykrywa, że to crawler, a nawet jak ustawisz user-agenta i inne dane to nie obsłużysz jsa
@Ark00: Co za problem ustawić nagłówki w dowolnej innej metodzie pobierania strony?
Po co wykonywać jakiegoś JSa?

@tyrytyty: Kod do pobierania tego obiektu z whoscored, bez selenium, 7 linijek w pythonie:

import urllib2
import re
response = urllib2.urlopen("https://www.whoscored.com/Matches/1464189/Live/France-Ligue-1-2020-2021-Marseille-Lyon")
page_source = response.read()
pattern = re.compile("var matchCentreData = ((.|\n)*)var matchCentre")
match = pattern.search(page_source)
print match.group(1)
@pp53: yo, wrócę na chatę to zweryfikuję to, bo nie chce mi się wierzyć, że whoscored w taki prosty sposób da Ci dostęp do swoich danych ( ͡° ͜ʖ ͡°)