Selles tunnis kavatseme seda teha. Saame teada, kuidas saab erinevate HTML-siltide väärtusi välja tõmmata, ja alistame ka selle mooduli vaikefunktsioonid, et lisada omaette loogikat. Teeme seda kasutades HTMLParser klassi Pythonis aastal HTML.parser moodul. Vaatame koodi toimimas.
Vaadates HTMLParseri klassi
HTML-i teksti sõelumiseks Pythonis saame seda kasutada HTMLParser klassi sisse HTML.parser moodul. Vaatame klassi dfinition for HTMLParser klass:
klassi html.parser.HTMLParser (*, convert_charrefs = True)The convert_charrefs Kui väärtuseks seatakse True, muudetakse kõik märgiviited nende Unicode'i ekvivalentideks. Ainult stsenaarium / stiil elemente ei teisendata. Nüüd proovime mõista ka selle klassi kõiki funktsioone, et paremini mõista, mida iga funktsioon teeb.
- hand_startendtag See on esimene funktsioon, mis käivitatakse, kui HTML-string edastatakse klassi eksemplarile. Kui tekst siia jõuab, edastatakse juhtelement klassi teistele funktsioonidele, mis kitsenevad stringi muude siltide jaoks. See on selge ka selle funktsiooni definitsioonis: def hand_startendtag (ise, silt, attrid):
ise.hand_starttag (silt, attrs)
ise.hand_endtag (silt) - handle_starttag: See meetod haldab vastuvõetud andmete algusmärgendit. Selle määratlus on järgmine: def hand_starttag (ise, silt, attrid):
üle andma - käepide_endtag: See meetod haldab vastuvõetud andmete lõpumärgendit: def handle_endtag (ise, silt):
üle andma - käepide_harju: See meetod haldab saadud andmete märgiviiteid. Selle määratlus on järgmine: def hand_charref (ise, nimi):
üle andma - hand_entityref: See funktsioon tegeleb talle edastatud HTML-is olevate üksuste viidetega: def hand_entityref (ise, nimi):
üle andma - käepide_andmed: See on funktsioon, kus HTML-siltidest väärtuste väljavõtmiseks tehakse reaalset tööd ja edastatakse iga märgendiga seotud andmed. Selle määratlus on järgmine: def hand_data (ise, andmed):
üle andma - käepide_kommentaar: Selle funktsiooni abil võime ka HTML-i allikale lisada kommentaare: def hand_comment (ise, andmed):
üle andma - käepide_pi: Kuna HTML-il võib olla ka töötlemisjuhiseid, on see funktsioon, kus need on määratletud järgmiselt: def hand_pi (ise, andmed):
üle andma - käepide_dekl: See meetod käsitleb HTML-i deklaratsioone, selle määratlus on järgmine: def hand_decl (self, decl):
üle andma
Klass HTMLParser alamklass
Selles jaotises liigitame klassi HTMLParser alamklassi ja vaatame mõningaid funktsioone, mida kutsutakse, kui HTML-andmed klassi eksemplarile edastatakse. Kirjutame lihtsa skripti, mis seda kõike teeb:
HTML-ist.parseri import HTMLParserklassi LinuxHTMLParser (HTMLParser):
def hand_starttag (ise, silt, attrid):
print ("Starditud märgend:", silt)
def hand_endtag (ise, silt):
print ("Lõpumärgend kohtus:", silt)
def hand_data (ise, andmed):
print ("Leitud andmed:", andmed)
parser = LinuxHTMLParser ()
parser.voog ("
"
Pythoni HTML-i sõelumismoodul
')
Selle käsuga saame tagasi:
Pythoni HTMLParseri alaklass
HTMLParseri funktsioonid
Selles jaotises töötame HTMLParseri klassi erinevate funktsioonidega ja uurime kõigi nende funktsionaalsust:
HTML-ist.parseri import HTMLParserHTML-ist.üksused impordivad nime2koodipunkt
klass LinuxHint_Parse (HTMLParser):
def hand_starttag (ise, silt, attrid):
print ("Alusta silti:", silt)
attride jaoks attrides:
print ("attr:", attr)
def hand_endtag (ise, silt):
print ("End tag:", silt)
def hand_data (ise, andmed):
print ("Andmed:", andmed)
def käsk_kommentaar (ise, andmed):
print ("Kommentaar:", andmed)
def hand_entityref (ise, nimi):
c = chr (nimi2koodipunkt [nimi])
print ("Nimega ent:", c)
def hand_charref (ise, nimi):
kui nimi.startswith ('x'):
c = chr (int (nimi [1:], 16))
muu:
c = chr (int (nimi))
print ("Num ent:", c)
def hand_decl (ise, andmed):
print ("Decl:", andmed)
parser = LinuxHint_Parse ()
Erinevate kõnede korral toogem sellesse eksemplari eraldi HTML-andmeid ja vaadake, millist väljundit need kõned genereerivad. Alustame lihtsast DOCTYPE string:
parser.feed (' ')Selle kõne abil saame tagasi:
DOCTYPE string
Proovime nüüd pildimärgendit ja vaatame, milliseid andmeid see eraldab:
parser.feed ('')Selle kõne abil saame tagasi:
HTMLParseri pildimärgend
Järgmisena proovime, kuidas skripti silt Pythoni funktsioonidega käitub:
parser.feed ('')parser.feed ('')
parser.voog ('# python color: green')
Selle kõne abil saame tagasi:
Skripti silt HTMLparseris
Lõpuks edastame kommentaarid ka jaotisele HTMLParser:
parser.feed ('""')
Selle kõne abil saame tagasi:
Kommentaaride sõelumine
Järeldus
Selles tunnis vaatasime, kuidas saaksime HTML-i sõeluda, kasutades Pythoni enda HTMLParseri klassi, ilma igasuguse muu teegita. Saame koodi hõlpsasti muuta, et muuta HTML-andmete allikas HTTP-kliendiks.
Loe rohkem Pythoni põhiseid postitusi siit.