Python - triviální HTML parser: Porovnání verzí
mBez shrnutí editace |
m triviální HTML parser |
||
Řádek 1: | Řádek 1: | ||
Program definuje triviální uživatelskou třídu Parser, načte ze zadaného URL HTML stránku a vypíše na standardní výstup preformátovaný text dané stránky, tj. text uzavřený ve značce/značkách <tt><pre></tt> | Program definuje triviální uživatelskou třídu Parser, načte ze zadaného URL HTML stránku a vypíše na standardní výstup preformátovaný text dané stránky, tj. text uzavřený ve značce/značkách <tt><pre></tt> | ||
'''Poznámka:''' jde o příklad parseru řízeného událostmi, tj. parseru ve kterém definujeme ''call-back funkce'' pro zpracování událostí (v tomto případě HTML značek, resp. značky PRE). | |||
<pre> | <pre> |
Verze z 30. 5. 2007, 14:21
Program definuje triviální uživatelskou třídu Parser, načte ze zadaného URL HTML stránku a vypíše na standardní výstup preformátovaný text dané stránky, tj. text uzavřený ve značce/značkách <pre>
Poznámka: jde o příklad parseru řízeného událostmi, tj. parseru ve kterém definujeme call-back funkce pro zpracování událostí (v tomto případě HTML značek, resp. značky PRE).
#!/usr/bin/python # coding=utf-8 import sgmllib class Parser(sgmllib.SGMLParser): "Triviální HTML parser, vypiše obsah značky/značek <pre>" # podle http://www.boddie.org.uk/python/HTML.html def parse(self, s): "Zpracuje zadaný řetězec 's'." self.feed(s) self.close() def __init__(self, verbose=0): "Inicializace objektu, 'verbose' se předává rodičovské třídě" sgmllib.SGMLParser.__init__(self, verbose) self.inside_pre = 0 def handle_data(self, data): "Tisk textu ve značce PRE " if self.inside_pre: print data, def start_pre(self, data): "Zpracovaní otevirací značky PRE " self.inside_pre = 1 def end_pre(self): "Zpracovaní koncové značky /PRE " self.inside_pre = 0 import urllib usock = urllib.urlopen('http://gama.fsv.cvut.cz/wiki/index.php?title=Python_-_trivi%C3%A1ln%C3%AD_HTML_parser') page = usock.read() usock.close() parser = Parser() parser.parse(page)