V této lekci to chceme udělat. Zjistíme, jak lze extrahovat hodnoty různých značek HTML, a také přepsat výchozí funkce tohoto modulu, abychom přidali vlastní logiku. Uděláme to pomocí HTMLParser třída v Pythonu v html.analyzátor modul. Podívejme se na kód v akci.
Při pohledu na třídu HTMLParser
K analýze textu HTML v Pythonu můžeme použít HTMLParser třída v html.analyzátor modul. Pojďme se podívat na definici třídy pro HTMLParser třída:
třída html.analyzátor.HTMLParser (*, convert_charrefs = True)The convert_charrefs Pokud je nastaveno na True, všechny odkazy na znaky budou převedeny na jejich ekvivalenty Unicode. Pouze scénář / styl prvky nejsou převedeny. Nyní se pokusíme porozumět každé funkci pro tuto třídu a také lépe porozumět tomu, co každá funkce dělá.
- handle_startendtag Toto je první funkce, která se aktivuje při předání řetězce HTML instanci třídy. Jakmile text dosáhne sem, ovládací prvek se předá dalším funkcím ve třídě, která se zúží na další značky v řetězci. To je také jasné v definici této funkce: def handle_startendtag (self, tag, attrs):
já.handle_starttag (značka, attrs)
já.handle_endtag (značka) - handle_starttag: Tato metoda spravuje počáteční značku pro data, která přijímá. Jeho definice je uvedena níže: def handle_starttag (self, tag, attrs):
složit - handle_endtag: Tato metoda spravuje koncovou značku pro data, která přijímá: def handle_endtag (self, tag):
složit - handle_charref: Tato metoda spravuje odkazy na znaky v datech, která přijímá. Jeho definice je uvedena níže: def handle_charref (self, name):
složit - handle_entityref: Tato funkce zpracovává odkazy na entity v předaném HTML: def handle_entityref (self, name):
složit - handle_data: Toto je funkce, kde se skutečně pracuje na extrakci hodnot ze značek HTML a předávají se data související s každou značkou. Jeho definice je uvedena níže: def handle_data (self, data):
složit - handle_comment: Pomocí této funkce můžeme také získat komentáře připojené ke zdroji HTML: def handle_comment (self, data):
složit - handle_pi: Protože HTML může mít také instrukce pro zpracování, jedná se o funkci, kde tyto Jeho definice je uvedena níže: def handle_pi (self, data):
složit - handle_decl: Tato metoda zpracovává deklarace v HTML, její definice je poskytována jako: def handle_decl (self, decl):
složit
Podtřída třídy HTMLParser
V této části provedeme podkategorii třídy HTMLParser a podíváme se na některé funkce, které jsou volány při předávání dat HTML instanci třídy. Pojďme napsat jednoduchý skript, který toto všechno provede:
z html.import analyzátoru HTMLParsertřída LinuxHTMLParser (HTMLParser):
def handle_starttag (self, tag, attrs):
print ("Start tag stretl:", tag)
def handle_endtag (self, tag):
print ("Koncová značka narazena:", značka)
def handle_data (self, data):
tisk ("Data nalezena:", data)
parser = LinuxHTMLParser ()
analyzátor.krmit("
''
Modul pro analýzu HTML v Pythonu
')
S tímto příkazem se vrátíme:
Python HTMLParser podtřída
Funkce HTMLParser
V této části budeme pracovat s různými funkcemi třídy HTMLParser a podíváme se na funkčnost každé z nich:
z html.import analyzátoru HTMLParserz html.entity import name2codepoint
třída LinuxHint_Parse (HTMLParser):
def handle_starttag (self, tag, attrs):
print ("Start tag:", tag)
pro attr v attrs:
print ("attr:", attr)
def handle_endtag (self, tag):
print ("End tag:", tag)
def handle_data (self, data):
tisk ("Data:", data)
def handle_comment (self, data):
tisk ("Komentář:", data)
def handle_entityref (self, name):
c = chr (name2codepoint [jméno])
tisk ("Pojmenovaný ent:", c)
def handle_charref (self, name):
pokud jméno.začíná s ('x'):
c = chr (int (název [1:], 16))
jiný:
c = chr (int (jméno))
print ("Num ent:", c)
def handle_decl (self, data):
print ("Decl:", data)
analyzátor = LinuxHint_Parse ()
S různými hovory, pojďme krmit samostatná data HTML do této instance a uvidíme, jaký výstup tato volání generují. Začneme jednoduchým DOCTYPE tětiva:
analyzátor.krmit(' ')Tady je to, co jsme dostali zpět s tímto hovorem:
Řetězec DOCTYPE
Zkusme nyní značku obrázku a uvidíme, jaká data extrahuje:
analyzátor.krmit('')Tady je to, co jsme dostali zpět s tímto hovorem:
Značka obrázku HTMLParser
Dále zkusme, jak se značka skriptu chová s funkcemi Pythonu:
analyzátor.krmit('')analyzátor.krmit('')
analyzátor.feed ('# python color: green')
Tady je to, co jsme dostali zpět s tímto hovorem:
Značka skriptu v htmlparser
Nakonec také předáme komentáře do sekce HTMLParser:
analyzátor.krmit('''''')
Tady je to, co jsme dostali zpět s tímto hovorem:
Analýza komentářů
Závěr
V této lekci jsme se podívali na to, jak můžeme analyzovat HTML pomocí vlastní třídy HTMLParser v Pythonu bez jakékoli jiné knihovny. Můžeme snadno upravit kód a změnit zdroj dat HTML na klienta HTTP.
Přečtěte si více příspěvků založených na Pythonu zde.