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§ion=&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!
Pěkný!
Myslím, že na cz internetu fandové pythonu ocení každý takový článek:-)
Dobry den,
jste si vedom toho, ze krast takto data z jinych obchodu je nelegalni?
Jiri Horky