Warning: Use of undefined constant ddsg_language - assumed 'ddsg_language' (this will throw an Error in a future version of PHP) in /var/www/kiwwisk.cz/htdocs/wp-content/plugins/dd-sitemap-gen/dd-sitemap-gen.php on line 44
Říjen, 2008 | Kiwwisk na internetu Kiwwisk na internetu

Archive for Říjen, 2008

Říj 05

Beautiful Soup – překrásná polívka v Python-u

Pro svůj nejnovější projekt Katalog Prádla jsem potřeboval jednoduchou věc: posbírat data ze stránek 3 internetových obchodů (1, 2, 3) a převést je do mé databázi. Řeknete si, jednoduchá věc ale ono to má své háčky (to, že spomínané obchody provozujou provizní systém ale ne XML feed pro své partnery je na jinou debatu).

Takže, jaký nástroj použít? Potřebuji:

  • parsovat nevalidní HTML
  • převést kódováni z Windows CP-1250 na UTF-8 (ano, i také šílenosti se dějí v roku 2008)
  • použít XML-RPC API WordPress-u k naplnění databáze

Zde budu hovořit jen o prvním bodě, parsování HTML stránek (zbylé dvě obsahuje Python v sobě).

K tomuto účelu se dá použít i standardní knihovna Pythonu, ale ta má „trošku“ neohrabaný interfejs. Trošku Googlení a natrefil jsem na zaujímavý projekt: Beatiful Soup. Základní 3 vlastnosti, kterými se pyší :

  • „Sežere“ i nevalidní (X)HTML, příklad: <b><i>Hello World</b></i>
  • Naprosto geniální interface (ne nepodobný JQuery)
  • Automaticky konvertuje příchozí text do UTF-8

Nyní nemusím myslet a programovat hodiny ako vydolovat cenné informace ze stránek, všechno je záležitostí pár řádků, viz příklad:

import urllib2
from BeautifulSoup import BeautifulSoup

slovo = "seznam"
stream = urllib2.urlopen('http://www.firmy.cz/statsScreen?serverId=seznam.search&section=&collocation=%s' % slovo)
soup = BeautifulSoup( stream.read() )
stream.close()

denna_navstevnost = int( soup.findAll('div', 'average')[0].findAll('p')[0].findAll('strong')[1].contents[0].replace(' ', '') )
print "Denna navstevnost slova %s je %i" % ( slovo, denna_navstevnost )

Tento příklad se připojí na známou stránku seznamu, výslednou HTML(nemusí být validní) stánku předhodí Beatiful Soup. Krkolomný výraz najde všechny DIV s class ‚average‘, vybere první, v tomto DIVe najde všechny P, vybere první a tak dále až se dostaneme k požadované informaci a tou je denní návštěvnost daného slova. (Určitě se dá daný výraz napsat hezčeji, je to jenom pro příklad). Každopádně, plnou a vyčerpávající dokumentaci naleznete na stránce ku knihovně.

Přeji chutnou polívku!

2
comments