V tej lekciji bomo to storili. Ugotovili bomo, kako je mogoče izvleči vrednosti različnih oznak HTML, in tudi preglasiti privzeto funkcionalnost tega modula, da dodamo nekaj lastne logike. To bomo storili z uporabo HTMLParser razred v Pythonu v html.razčlenjevalnik modul. Poglejmo kodo v akciji.
Če pogledamo razred HTMLParser
Za razčlenitev besedila HTML v Pythonu lahko uporabimo HTMLParser razred v html.razčlenjevalnik modul. Oglejmo si definicijo razreda za HTMLParser razred:
razred html.razčlenjevalnik.HTMLParser (*, convert_charrefs = True)The convert_charrefs Če je nastavljeno na True, bodo vsi sklici na znake pretvorjeni v ustreznike Unicode. Samo skript / slog elementi se ne pretvorijo. Zdaj bomo poskušali razumeti vsako funkcijo za ta razred, da bomo bolje razumeli, kaj vsaka funkcija počne.
- handle_startendtag To je prva funkcija, ki se sproži, ko se niz HTML prenese v primerek razreda. Ko besedilo pride sem, se kontrolnik prenese na druge funkcije v razredu, ki se zožijo na druge oznake v nizu. To je jasno tudi v definiciji te funkcije: def handle_startendtag (self, tag, attrs):
sebe.handle_starttag (tag, attrs)
sebe.handle_endtag (tag) - handle_starttag: Ta metoda upravlja začetno oznako za podatke, ki jih prejme. Njegova definicija je prikazana spodaj: def handle_starttag (self, tag, attrs):
podajo - handle_endtag: Ta metoda upravlja končno oznako za podatke, ki jih prejme: def handle_endtag (self, tag):
podajo - handle_charref: Ta metoda upravlja sklice na znake v prejetih podatkih. Njegova definicija je prikazana spodaj: def handle_charref (self, name):
podajo - handle_entityref: Ta funkcija obravnava sklice na entitete v HTML-ju, ki ji je bil poslan: def handle_entityref (self, name):
podajo - podatek_podatkov: To je funkcija, pri kateri se resnično dela za pridobivanje vrednosti iz oznak HTML in se ji posredujejo podatki, povezani z vsako oznako. Njegova definicija je prikazana spodaj: def handle_data (self, data):
podajo - handle_comment: S to funkcijo lahko dobimo tudi komentarje, priložene izvoru HTML: def handle_comment (self, data):
podajo - handle_pi: Ker ima HTML lahko tudi navodila za obdelavo, je ta funkcija njegova funkcija, kot je prikazano spodaj: def handle_pi (self, data):
podajo - ročaj_decl: Ta metoda obravnava deklaracije v HTML-ju, njena definicija je na voljo kot: def handle_decl (self, decl):
podajo
Podrazred razreda HTMLParser
V tem razdelku bomo podrazredili razred HTMLParser in si ogledali nekatere funkcije, ki se pokličejo, ko se podatki HTML posredujejo primerku razreda. Napišimo preprost skript, ki naredi vse to:
iz html.razčlenjevalnik uvoz HTMLParserrazred LinuxHTMLParser (HTMLParser):
def handle_starttag (self, tag, attrs):
print ("Naletela je na začetno oznako:", oznaka)
def handle_endtag (self, tag):
print ("Našla se je končna oznaka:", oznaka)
def handle_data (self, data):
print ("Podatki najdeni:", podatki)
razčlenjevalnik = LinuxHTMLParser ()
razčlenjevalnik.vir ("
"
Python HTML razčlenjevalni modul
')
Tukaj dobimo s tem ukazom:
Podrazred Python HTMLParser
Funkcije HTMLParser
V tem razdelku bomo delali z različnimi funkcijami razreda HTMLParser in si ogledali funkcionalnost vsake od teh:
iz html.razčlenjevalnik uvoz HTMLParseriz html.entitete uvozi name2codepoint
razred LinuxHint_Parse (HTMLParser):
def handle_starttag (self, tag, attrs):
print ("Start tag:", tag)
za attr v attrs:
tiskanje ("attr:", attr)
def handle_endtag (self, tag):
print ("Končna oznaka:", oznaka)
def handle_data (self, data):
print ("Podatki:", podatki)
def handle_comment (self, data):
print ("Komentar:", podatki)
def handle_entityref (self, name):
c = chr (name2codepoint [ime])
print ("Poimenovano ent:", c)
def handle_charref (jaz, ime):
če ime.začne s ('x'):
c = chr (int (ime [1:], 16))
sicer:
c = chr (int (ime))
print ("Število:", c)
def handle_decl (self, data):
tiskanje ("Decl:", podatki)
razčlenjevalnik = LinuxHint_Parse ()
Z različnimi klici naj temu primerku pošljemo ločene podatke HTML in si ogledamo, kakšen izhod ustvarijo ti klici. Začeli bomo s preprostim DOKTIP vrvica:
razčlenjevalnik.krma (' ')S tem klicem dobimo naslednje:
Niz DOCTYPE
Poskusimo zdaj s slikovno oznako in si oglejmo, katere podatke izvleče:
razčlenjevalnik.krma ('')S tem klicem dobimo naslednje:
Oznaka slike HTMLParser
Nato poskusimo, kako se skriptna oznaka obnaša s funkcijami Python:
razčlenjevalnik.krma ('')razčlenjevalnik.krma ('')
razčlenjevalnik.feed ('# python color: green')
S tem klicem dobimo naslednje:
Oznaka skripta v htmlparserju
Na koncu posredujemo komentarje tudi v razdelek HTMLParser:
razčlenjevalnik.krma ('""')
S tem klicem dobimo naslednje:
Razčlenjevanje komentarjev
Zaključek
V tej lekciji smo preučili, kako lahko razčlenimo HTML s pomočjo lastnega razreda Python HTMLParser brez kakršne koli druge knjižnice. Kodo lahko enostavno spremenimo, da spremenimo vir podatkov HTML v odjemalca HTTP.
Tukaj preberite več objav na osnovi Pythona.