Python web scraping – czyli wyciągamy dane ze strony www

lxmlTym 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:

  1. adres strony z której pobierzemy treść horoskopu
  2. ś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. 🙂

 

 

Facebooktwittergoogle_plusredditpinterestlinkedinmail

Dodaj komentarz