WEB

Skąd brać dane do projektów data science? Czyli webscraping.

Webscraping – co to takiego?

Jest to proces automatycznego pobierania stron internetowych i wyciągania z nich interesujących nas informacji. Ponieważ dzieje się to automatycznie zajmuje to oczywiście mniej czasu niż gdybyśmy to chcieli zrobić ręcznie.

Od czego zacząć?

Najważniejsze co musimy zrobić chcąc skorzystać z danych umieszczonych na jakiejś stronie to upewnienie się, że jej warunki użytkowania nam na to pozwalają.
Jeśli już mamy taką stronę, której zawartość możęmy wykorzystać musimy się zastanowić jakie dane są nam potrzebne. Nastepnie z pomocą przyjdzie nam opcja Inspect (Zbadaj) w przeglądarce. Pozwoli nam ona w wygodny sposób przejrzeć strukturę HTML.

Kiedy ustalimy strukturę stron, które nas interesują jesteśmy gotowi napisać automat. W Pythonie z pomocą przyjdą nam takie biblioteki jak:

URLOPEN

Jest to funkcja modułu urllib.request, który umożliwia pobieranie stron z danego URL. Korzystamy z niej w bardzo prosty sposób:

page = urlopen("Url którego zawartość chcemy pobrać).read()

W ten sposób w zmiennej page mamy zawartość danej strony.

BEAUTIFULSOUP4

Ta biblioteka ułatwia przechodzenie po strukturze HTML. Na przykład, by wybrać wszystkie punkty danej listy wywołamy coś takiego:

data = BeautifulSoup(html, "lxml")
listelements = data.find_all("li")

Gdy już będziemy mieli dane, to możemy użyć biblioteki pandas, o której już tutaj wspominałam. Pozwala ona analizować dane w bardzo wygodny sposób.

Mogą nam się również przydać wyrażenia regularne i tutaj z przyda nam się operator Re, który również znajdziemy w Pythonie.  Pozwala on między innymi na wyszukiwanie i dopasowywanie tekstów do wzorca.

Kiedy już zdobędziemy dane, wyciągniemy co trzeba, obrobimy by format nam odpowiadał możemy użyć klasy DictWriter aby zapisać je w formacie CSV albo modułu do Sqlite by zapisać dane w bazie.

4 myśli na temat “Skąd brać dane do projektów data science? Czyli webscraping.”

  1. Wykorzystanie BS jest fajnie ze względu na prostotę.

    Czy próbowałaś może korzystać kiedyś z frameworka scrapy? Daje spore możliwości jak np.
    – wprowadzenie opóźnienia żeby nie obciążać serwerów / nie zostać zablokowanym
    – zapis danych do csv, json, bazy danych,
    – usuwanie zduplikowanych url żeby nie powtarzać danych
    Itd.

  2. A co w przypadku, gdy html jest generowany dynamicznie przez javaScript? W .NET bardzo często się na to napotykałem i był z tym problem. Ściągałem kod js, zamiast gotowego html’a.

  3. @Grzesiek – Przyznam, że na stronach na których tego próbowałam – ale tylko eksperymentalnie, nie miałam z tym problemu. Może jednak są takie, które pewne rzeczy sprytnie blokują niestety. Dlatego też, tak jak wspomniałam, dobrze jest upewnić czy warunki użytkowania strony pozwalają na takie rzeczy.

  4. @Kedrzu – Nie próbowałam scrappy, ale sobie zapiszę. To na razie moje pierwsze wprawki. Dzięki!

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *