Tym razem pobawimy się fajnym narzędziem przydatnym do python web scrapingu. Jest to biblioteka lxml dzięki której możemy w bezpośredni sposób pozyskiwać interesujące nas dane ze strony. Biblioteka lxml jest narzędziem, które pozwala na parsowanie xml i html. Dzięki niemu możemy w łatwy sposób wyciągnąć konkretny element np. ze strony internetowej bez zbędnych znaczników itd.
Działanie tej biblioteki pokażę na przykładzie zadania dość prostego, polegającego na uzyskaniu dziennego horoskopu z portalu gazeta.pl. W efekcie skrypt pokaże aktualną datę i treść horoskopu.
Na początek trzeba zainstalować bibliotekę lxml. Instrukcja instalacji jest prosta i dobrze opisana na stronie lxml instalacja
Będą nam jeszcze potrzebne:
- adres strony z której pobierzemy treść horoskopu
- ścieżka do elementu (XPATH)
Zadanie pierwsze jest dość proste wchodzimy na stronę gazeta.pl odszukujemy dział horoskopy, wybieramy znak zodiaku i horoskop dzienny. Po wyświetleniu treści horoskopu mamy na pasku przeglądarki adres strony. Interesuje nas adres bez daty.
Ścieżkę do elementu (XPATH) pozyskujemy klikając prawym przyciskiem myszy na treści horoskopu (w przzeglądarce Chromium/Chrome Ctrl+Shift+I) wybieramy “Zbadaj element. W oknie które się pokaże podświetlony będzie znacznik <p></p> który zawiera treść która nas interesuje. Rozwijamy ten znacznik <p> i klikamy na treści horoskopu prawym przyciskiem myszy. Z menu wybieramy “kopiuj XPATH”. I po pracy 🙂 mając te dwie dane można przystąpić do tworzenia skryptu.
#!/usr/bin/env python from lxml import html from datetime import date import requests #pobieram dzisiejszą datę today = date.today() # format wyświetlanej daty data = today.strftime('%d-%m-%Y') #adres strony z horoskopem urlwyborcza = 'http://horoskopy.gazeta.pl/horoskopy-magia/bliznieta/dzienny/' #składam adres strony i daty w celu pobierania aktualnego horoskopu urlwyborcza += data #ścieżka do elementu XPATH xpathwyborcza = '//*[@id="holder_230"]/div/p[1]/text()' #pobiera stronę z horoskopem pagewyborcza = requests.get(urlwyborcza) #parsuje stronę tree= html.fromstring(pagewyborcza.text) # wyszukuje interesujący nas element textwyborcza = tree.xpath(xpathwyborcza) # wyświetla w yniki działania print(data) print (textwyborcza)
Jak zwykle komentarze w skrypcie wyjaśniają co się dzieje krok po kroku. Jak widać tego typu działania są banalnie proste z wykorzystaniem biblioteki lxml. Nie wątpliwie jest to potężne narzędzie i nie było tworzone z myślą o horoskopach, nie mniej ten prosty przykład obrazuje jak można rozpocząć zabawę z python web scraping’iem :-).
W ramach przypomnienia z poprzednich wpisów można się pobawić w usunięcie zbędnych znaków np. [] z wyników działania. 🙂