
Zadanie napisania pierwszego „naszego” parsera padło na mnie. Nie będę ukrywał, że z początku uznałem to za pewne wyzwanie. Na szczęście dość szybko znalazłem to czego szukałem – czyli BeautifulSoup. Nazwa dość dziwna, ale o tym później. Wystarczyło kilka chwil (czytaj: wieczorów, gdy choć jeden domownik już śpi
), żeby przy jej użyciu, prosto i przyjemnie uzyskać to czego się chce. Nie będę tu pisał manual’a, ale pokusiłem się o prosty przykład. Załóżmy, że interesuje nas, kto komentował nasze wpisy ma blogu. Voilà:
#-*- coding: UTF-8 -*-
from BeautifulSoup import BeautifulSoup
import urllib
url = "http://blog.profitto.pl/2008/11/wybor-technologii"
soup = BeautifulSoup(urllib.urlopen(url).read())
authors = set() # unikalność
for comment in soup('div',{'class':'cmtinfo'}):
authors.add(comment.cite.string)
print ', '.join(authors)
Jeśli jeszcze nie czujesz bluesa, to dodam, że BS poradzi sobie z popsutymi znacznikami i konwersją kodowania. Poza tym mamy do dyspozycji całą moc pythona
– biblioteki bardzo ułatwiają szybkie rozwiązywanie problemów z przymusem zalogowania się na stronę:
#-*- coding: UTF-8 -*-
# używamy słownika do wypełnienia formularza
from BeautifulSoup import BeautifulSoup
import urllib
url = "http://poczta.profitto.pl"
params = urllib.urlencode( { 'login':'profitto',
'password':'żyrafyWchodząNaSzafy',
'hiddenField': 'hidden' } )
soup = BeautifulSoup(urllib.urlopen(url,params).read())
print soup.prettify()
używania tylko najwłaściwszej przeglądarki:
#-*- coding: UTF-8 -*-
from BeautifulSoup import BeautifulSoup
import urllib2
url = "http://www.useragent.org/"
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor())
opener.addheaders=[ ( 'user-agent','NCSA_Mosaic/2.0' ) ]
soup = BeautifulSoup(opener.open(url))
print soup.prettify()
Na koniec dwa słowa o nazwie biblioteki. Brzmi dość dziwnie, ale jakoś przed zabraniem się za pisanie tego tekstu nie wnikałem skąd się wzięła. Nie powiem, że mnie nie natchnęła (fragment kodu: soup = kitchen.getSoup(url)
). Nie trzeba wiele, by odkryć (mam nadzieje, że nie tylko ja musiałem to odkrywać) – ta nazwa zainspirowana jest utworem Lewis’a Carroll’a Alicja w Krainie Czarów. A dokładnie jest to podmiot liryczny jednej z piosenek - Soup Of The Evening. Zupa na wieczór – niekoniecznie jeden.

Leave a Reply