Ebben a leckében ezt kívánjuk megtenni. Megtudjuk, hogyan lehet kinyerni a különböző HTML-címkék értékeit, és felülbíráljuk a modul alapértelmezett funkcionalitását, hogy hozzáadjunk néhány saját logikát. Ezt a HTMLParser osztály Pythonban html.elemző modul. Lássuk a kódot működés közben.
HTMLParser osztályt nézve
A HTML szöveg elemzéséhez a Pythonban használhatjuk HTMLParser osztályban html.elemző modul. Nézzük meg az osztály dfinícióját a HTMLParser osztály:
osztály html.elemző.HTMLParser (*, convert_charrefs = Igaz)A convert_charrefs mezőben, ha True értékre állítja, akkor az összes karakter hivatkozás az Unicode ekvivalensé lesz konvertálva. Csak a szkript / stílus az elemek nem konvertálódnak. Most megpróbáljuk megérteni ennek az osztálynak az egyes funkcióit, hogy jobban megértsük az egyes funkciók működését.
- handle_startendtag Ez az első függvény, amely akkor aktiválódik, amikor a HTML karakterláncot átadják az osztálypéldánynak. Amint a szöveg ideér, a vezérlő az osztály többi funkciójához kerül, amely leszűkíti a karakterlánc többi címkéjét. Ez a függvény definíciójában is egyértelmű: def hand_startendtag (self, tag, attrs):
maga.handle_starttag (tag, attrs)
maga.handle_endtag (tag) - handle_starttag: Ez a módszer kezeli a kapott cím kezdőcímkéjét. Meghatározása az alábbiakban látható: def hand_starttag (self, tag, attrs):
passz - hand_endtag: Ez a módszer kezeli a kapott címke címkéjét: def hand_endtag (self, tag):
passz - handle_charref: Ez a módszer kezeli a kapott karakterek hivatkozásait. Meghatározása az alábbiakban látható: def hand_charref (saját, név):
passz - handle_entityref: Ez a függvény kezeli az entitás hivatkozásokat a neki átadott HTML-ben: def hand_entityref (saját, név):
passz - hand_data: Ez az a funkció, ahol valós munkát végeznek az értékek kibontására a HTML-címkékből, és továbbítják az egyes címkékhez kapcsolódó adatokat. Meghatározása az alábbiakban látható: def hand_data (én, adatok):
passz - kezelni_megjegyzés: Ennek a funkciónak a segítségével megjegyzéseket is kaphatunk egy HTML forráshoz: def hand_comment (én, adatok):
passz - handle_pi: Mivel a HTML-nek lehetnek feldolgozási utasításai is, ez az a funkció, ahol ezek a definíciói az alábbiak szerint definiálódnak: def hand_pi (self, data):
passz - hand_decl: Ez a módszer kezeli a HTML-ben szereplő deklarációkat, definíciója a következő: def hand_decl (self, decl):
passz
A HTMLParser osztály alosztálya
Ebben a szakaszban osztályozzuk a HTMLParser osztályt, és megnézzük azokat a funkciókat, amelyeket a HTML-adatok osztálypéldányhoz továbbításakor hívnak meg. Írjunk egy egyszerű szkriptet, amely mindezt megteszi:
html-ből.értelmező HTMLParser importálásaosztályú LinuxHTMLParser (HTMLParser):
def hand_starttag (self, tag, attrs):
print ("Start tag felmerült:", címke)
def hand_endtag (self, tag):
print ("Végcímke felmerült:", címke)
def hand_data (én, adatok):
nyomtatás ("Data found:", data)
parser = LinuxHTMLParser ()
elemző.feed ("
"
Python HTML elemzési modul
')
Íme, amit ezzel a paranccsal kapunk vissza:
Python HTMLParser alosztály
HTMLParser funkciók
Ebben a szakaszban a HTMLParser osztály különféle funkcióival fogunk foglalkozni, és ezek mindegyikét megvizsgáljuk:
html-ből.értelmező HTMLParser importálásahtml-ből.az entitások importálják a name2kódpontot
osztály LinuxHint_Parse (HTMLParser):
def hand_starttag (self, tag, attrs):
nyomtatás ("Start tag:", címke)
a vonzódásokhoz:
nyomtatás ("attr:", attr)
def hand_endtag (self, tag):
print ("Végcímke:", címke)
def hand_data (én, adatok):
nyomtatás ("Data:", adatok)
def hand_comment (én, adatok):
nyomtatás ("Megjegyzés:", adatok)
def hand_entityref (saját, név):
c = chr (név2kódpont [név])
nyomtatás ("Named ent:", c)
def hand_charref (saját, név):
ha név.startswith ('x'):
c = chr (int (név [1:], 16))
más:
c = chr (int (név))
nyomtatás ("Szám:", c)
def hand_decl (saját, adatok):
nyomtatás ("Decl:", adatok)
parser = LinuxHint_Parse ()
Különböző hívásokkal tápláljunk külön HTML-adatokat erre a példányra, és nézzük meg, hogy ezek a hívások milyen kimenetet generálnak. Kezdjük egy egyszerűvel DOCTYPE húr:
elemző.feed (' ')Itt állunk vissza ezzel a felhívással:
DOCTYPE karakterlánc
Próbálja ki most egy képcímkét, és nézze meg, milyen adatokat von ki:
elemző.feed ('')Itt állunk vissza ezzel a felhívással:
HTMLParser képcímke
Ezután próbáljuk meg, hogyan viselkedik a szkriptcímke a Python-függvényekkel:
elemző.feed ('')elemző.feed ('')
elemző.hírcsatorna ('# python color: green')
Itt állunk vissza ezzel a felhívással:
Szkriptcímke htmlparser-ben
Végül megjegyzéseket adunk át a HTMLParser szakasznak is:
elemző.feed ('""')
Itt állunk vissza ezzel a felhívással:
A megjegyzések elemzése
Következtetés
Ebben a leckében megvizsgáltuk, hogyan lehet elemezni a HTML-t a Python saját HTMLParser osztályának használatával, minden más könyvtár nélkül. Könnyen módosíthatjuk a kódot, hogy a HTML adatok forrását HTTP klienssé változtassuk.
További Python alapú bejegyzéseket itt olvashat.