Posts tagged with “PYTHON

07. 08. 2011

pyquery

Co používáte na takovýto domácí scrapovaní (nebo screapování)? Jasně, každej zná lxml nebo BeautifulSoup. BeautifulSoup je vůbec super, pokud potřebujete třeba ještě opravit zacukanej dokument, vyhodit nějaký nepřístojný tagy, převézt entity apod. Pak je tady další klasika — Mechanize — ten je ale už spíš na emulaci browseru a hraní si s formulářema. Na stejnou notu je strašně funky Twill. Na něco se daji použít i XPath selektory ve Scrapy, ale to už je zase tahání kanónu na vrabce.

Jestli se nepletu, tak už jsem asi všechno podstatný vystřílel. Tedy až na mojeho miláčka posledních měsíců — pyquery. Nerad bych přepisoval (dobrou) dokumentaci, takže se omezim jen na pár špíčků, který mě fakt rajcujou.

CSS(3) selektory

Kromě šikovnejch :first, :last *, *:checked nebo :selected a dalších můžete používat CSS3 selektory, jak jste zvyklý z JQuery:

>>> from pyquery import PyQuery as pq
>>> doc = pq(url='http://tailf.starenka.net')
>>> doc.find('input[type=password]')
[<input#password>]
>>> doc('div[id^=nav]')
[<div#navigation>]
>>> doc.find('div[id*=a]')
[<div#container>, <div#header>, <div#navigation>]
>>> doc('ul').not_('.dummy')
[<ul#login-shortcuts>]
>>> doc('ul[class!=dummy]')
[<ul#login-shortcuts>]
>>> doc('div > span:last')[0].text_content()
'\n        \n    '
>>> doc.find('div + div')
[<div#navigation>, <div>, <div#content>, <div.entry-content>, <div#footer>]
>>> doc.find('link:first').attr('href')
'/static/starenka/css/starenka.css'

Funkcionální pičovinky

>>> doc('link').eq(2).map(lambda i, el: pq(el).attr('href'))
['/feeds/rss/blog/']
>>> doc('link').map(lambda i, el: 'http://tailf.starenka.net%s'%pq(el).attr('href'))
['http://tailf.starenka.net/static/starenka/css/starenka.css', 
'http://tailf.starenka.net/static/starenka/css/jquery.lightbox-0.5.css', 
'http://tailf.starenka.net/static/starenka/img/favicon.ico',
'http://tailf.starenka.net/feeds/rss/blog/',
'http://tailf.starenka.net/feeds/rss/comments/',
'http://tailf.starenka.nethttp://tailf.starenka.net/openidserver/',
'http://tailf.starenka.nethttp://tailf.starenka.net/openidserver/']
>>> doc('link').filter(lambda el: 'http://tailf.starenka.net' in pq(this).attr('href'))
[<link>, <link>]

Jasně, tohle všechno JE v JQuery a knihovna se jmenuje pyquery, takže by jeden čekal, že to v ní bude taky, ale to nic neubírá na faktu, že je to fakt bájo.

no comments yet
07. 08. 2011

Jenkins, Django, virtualenv, hg

Nedávno jsem rozcházel testovací stroj pro Django projekty postavenej na Jenkinsu a jelikož informace o tomhle setupu jsou tak nějak polovičatý a navíc porozházený po internetech, rozhod’ jsem se to malinko rozepsat. Jenkins můžete s minimálním úsilím zaměnit za Hudson a Mercurial za git, Bazaar, SVN či kýhošlaka. Debian samozřejmě taky nehraje zásadní roli.

no comments yet