Python i jQuery czyli pyquery
Kodowanie Python Techblog 04 maja 2009 o 15:51:57 | ☍ trackback
Ostatnio wpadł mi w ręce bardzo ciekawy moduł Pythona, który śmiało można określić jako jQuery po stronie serwera. Jeżeli potrzebowaliście kiedyś wyciągnąć jakieś dane z kodu HTML-a i denerwowała was zabawa z parsowaniem kodu za pomocą sgmllib czy innego tego typu wynalazku, to wasze cierpienia właśnie się skończyły.
Jak to działa?
Na początek pobierzemy zawartość jakieś strony, z której chcemy wyciągnąć dane. Ja posłużę się stroną antyweb.pl, ponieważ jest całkiem przystępnie zakodowana.
from pyquery import PyQuery as pq
import urllib
html = urllib.urlopen("http://antyweb.pl").read()
html = pq(html)
Teraz wystarczy już zadecydować co chcemy wyciągnąć i po prostu to zrobić :-) Np. informacje o autorze
print html("#f li.frt").text()
Wynik:
Witaj, nazywam sie Grzegorz Marczak i jestem autorem tego bloga. Piszę tutaj o serwisach spolecznosciowych, nowych technologiach i nowych trendach w internecie.
Wyciągnięcie wszystkich kategorii
for a in html("li.categories a"):
print a.text
Wynik:
antytydzień Biała flaga
Ciekawe strony
Świat
Miniblog
Mobilnie
Moje przemyślenia
Off topic
polska
Pytamy.pl
Startups
To mnie drażni.
Uncategorized
W trakcie tworzenia
wywiady
Wyszukanie najczęściej komentowanego wpisu ze strony głównej
max_comments = 0
title = ''
for a in html("ul.clnn li.l a"):
try:
# liczba komentarzy
comments = int(a.text.split(" ")[1])
if max_comments < comments:
max_comments = comments
# nazwa wpisu
title = a.values()[1].replace("Komentarze do wpisu ",'')
except:
pass
print "Najwiecej komentarzy: %s" % max_comments
print "Wpis: %s" % title
Wynik:
Najwiecej komentarzy: 32
Wpis: Interia mówi, tak kupujemy ruch (bo inni też tak robią)
Więcej
To oczywiście tylko mała próbka możliwości. pyquery pozwala również na manipulację stylami (addClass, toggleClass, removeClass, attr, css) czy samą strukturą danych (append, prepend, prependTo, insertAfter, remove, replaceWith itd.). Jeżeli posiadamy moduł WebOb możemy też zaprzęgnąć do pracy Ajax.
Po więcej informacji zapraszam na stronę projektu pyquery.