V tejto lekcii to chceme urobiť. Zistíme, ako je možné extrahovať hodnoty rôznych značiek HTML, a tiež prepíšeme predvolenú funkčnosť tohto modulu, aby sme pridali vlastnú logiku. Urobíme to pomocou HTMLParser trieda v Pythone v html.parser modul. Pozrime sa na kód v akcii.
Pri pohľade na triedu HTMLParser
Na analýzu textu HTML v Pythone môžeme použiť HTMLParser trieda v html.parser modul. Pozrime sa na definíciu triedy pre HTMLParser trieda:
trieda html.parser.HTMLParser (*, convert_charrefs = True)The convert_charrefs pole, ak je nastavené na True, prevedie všetky odkazy na znaky na ich ekvivalenty Unicode. Len scenár / štýl prvky sa nekonvertujú. Teraz sa pokúsime porozumieť každej funkcii tejto triedy, aby sme lepšie pochopili, čo ktorá funkcia robí.
- handle_startendtag Toto je prvá funkcia, ktorá sa spustí, keď sa reťazec HTML odovzdá inštancii triedy. Keď sem text dorazí, ovládací prvok sa odovzdá ďalším funkciám v triede, ktorá sa zúži na ďalšie značky v reťazci. To je zrejmé aj z definície tejto funkcie: def handle_startendtag (self, tag, attrs):
ja.handle_starttag (značka, attrs)
ja.handle_endtag (značka) - handle_starttag: Táto metóda spravuje začiatočnú značku pre dáta, ktoré prijíma. Jeho definícia je uvedená nižšie: def handle_starttag (self, tag, attrs):
prejsť - handle_endtag: Táto metóda spravuje koncovú značku pre prijaté údaje: def handle_endtag (self, tag):
prejsť - handle_charref: Táto metóda spravuje odkazy na znaky v dátach, ktoré prijíma. Jeho definícia je uvedená nižšie: def handle_charref (self, name):
prejsť - handle_entityref: Táto funkcia spracováva odkazy na entity v HTML, ktoré jej bolo odovzdané: def handle_entityref (self, name):
prejsť - handle_data: Toto je funkcia, pri ktorej sa skutočne pracuje na extrakcii hodnôt zo značiek HTML a odovzdaní údajov týkajúcich sa každej značky. Jeho definícia je uvedená nižšie: def handle_data (self, data):
prejsť - handle_comment: Pomocou tejto funkcie môžeme tiež získať komentáre pripojené k zdroju HTML: def handle_comment (self, data):
prejsť - handle_pi: Pretože HTML môže mať aj pokyny na spracovanie, toto je funkcia, kde tieto Definícia je uvedená nižšie: def handle_pi (self, data):
prejsť - handle_decl: Táto metóda spracováva vyhlásenia v kóde HTML, jej definícia je uvedená ako: def handle_decl (self, decl):
prejsť
Podtrieda triedy HTMLParser
V tejto časti podrobíme podkategóriu triede HTMLParser a pozrieme sa na niektoré funkcie, ktoré sa volajú, keď sa údaje HTML odovzdávajú inštancii triedy. Poďme napísať jednoduchý skript, ktorý toto všetko urobí:
z html.import analyzátora HTMLParsertrieda LinuxHTMLParser (HTMLParser):
def handle_starttag (self, tag, attrs):
print ("Bola zistená začiatočná značka:", značka)
def handle_endtag (self, tag):
print ("Koncová značka bola zistená:", značka)
def handle_data (self, data):
tlač ("Nájdené údaje:", údaje)
parser = LinuxHTMLParser ()
parser.krmivo („
„
Modul na analýzu HTML v jazyku Python
")
S týmto príkazom sa dostaneme späť:
Podtrieda Python HTMLParser
Funkcie HTMLParser
V tejto časti budeme pracovať s rôznymi funkciami triedy HTMLParser a pozrieme sa na funkčnosť každej z nich:
z html.import analyzátora HTMLParserz html.entity import name2codepoint
trieda LinuxHint_Parse (HTMLParser):
def handle_starttag (self, tag, attrs):
print ("Start tag:", tag)
pre attr v attrs:
print ("attr:", attr)
def handle_endtag (self, tag):
print ("Koncová značka:", značka)
def handle_data (self, data):
tlačiť („Údaje:“, údaje)
def handle_comment (self, data):
print ("Komentár:", údaje)
def handle_entityref (self, meno):
c = chr (name2codepoint [meno])
tlač ("Menovaný ent:", c)
def handle_charref (self, meno):
ak meno.startswith ('x'):
c = chr (int (názov [1:], 16))
inak:
c = chr (int (meno))
print ("Num ent:", c)
def handle_decl (self, data):
tlačiť („Odchýlka:“, údaje)
parser = LinuxHint_Parse ()
Pri rôznych hovoroch poďme do tejto inštancie vložiť samostatné údaje HTML a uvidíme, aký výstup tieto volania generujú. Začneme jednoduchým DOCTYPE reťazec:
parser.krmivo (' ')S touto výzvou sa vraciame:
DOCTYPE reťazec
Poďme teraz vyskúšať značku obrázka a zistiť, aké údaje extrahuje:
parser.krmivo ('")S touto výzvou sa vraciame:
Značka obrázka HTMLParser
Ďalej vyskúšame, ako sa značka skriptu chová s funkciami Pythonu:
parser.krmivo ('")parser.krmivo ('")
parser.feed ('# python color: green')
S touto výzvou sa vraciame:
Značka skriptu v htmlparser
Nakoniec pošleme komentáre aj do sekcie HTMLParser:
parser.krmivo ('„„")
S touto výzvou sa vraciame:
Analýza komentárov
Záver
V tejto lekcii sme sa pozreli na to, ako môžeme analyzovať HTML pomocou vlastnej triedy HTMLParser v Pythone bez akejkoľvek inej knižnice. Môžeme ľahko upraviť kód tak, aby sme zmenili zdroj údajov HTML na klienta HTTP.
Prečítajte si viac príspevkov založených na Pythone tu.