Python - triviální HTML parser: Porovnání verzí

Z GeoWikiCZ
m (triviální HTML parser)
mBez shrnutí editace
 
(Nejsou zobrazeny 2 mezilehlé verze od stejného uživatele.)
Řádek 3: Řádek 3:
'''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).
'''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>
<source lang=python>
#!/usr/bin/python     
#!/usr/bin/python     
# coding=utf-8
# coding=utf-8
Řádek 44: Řádek 44:
import urllib
import urllib


usock  = urllib.urlopen('http://gama.fsv.cvut.cz/wiki/index.php?title=Python_-_trivi%C3%A1ln%C3%AD_HTML_parser')
usock  = urllib.urlopen('http://geo.fsv.cvut.cz/gwiki/Python_-_trivi%C3%A1ln%C3%AD_HTML_parser')


page = usock.read()
page = usock.read()
Řádek 51: Řádek 51:
parser = Parser()
parser = Parser()
parser.parse(page)
parser.parse(page)
</pre>
</source>
 
{{Python}}

Aktuální verze z 3. 4. 2012, 10:06

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://geo.fsv.cvut.cz/gwiki/Python_-_trivi%C3%A1ln%C3%AD_HTML_parser')

page = usock.read()
usock.close()

parser = Parser()
parser.parse(page)