Šajā nodarbībā mēs to plānojam darīt. Mēs uzzināsim, kā var iegūt dažādu HTML tagu vērtības, kā arī ignorēs šī moduļa noklusējuma funkcionalitāti, lai pievienotu kādu mūsu pašu loģiku. Mēs to darīsim, izmantojot HTMLParser klase Pitonā html.parsētājs modulis. Apskatīsim kodu darbībā.
Aplūkojot HTMLParser klasi
Lai parsētu HTML tekstu Python, mēs varam izmantot HTMLParser klasē html.parsētājs modulis. Apskatīsim klases klases finālu HTMLParser klase:
klases html.parsētājs.HTMLParser (*, convert_charrefs = True)The convert_charrefs lauks, ja iestatīts uz True, visas rakstzīmju atsauces pārveidos par to unikoda kodiem. Tikai scenārijs / stils elementi netiek konvertēti. Tagad mēs centīsimies saprast arī katru šīs klases funkciju, lai labāk saprastu, ko katra funkcija dara.
- hand_startendtag Šī ir pirmā funkcija, kas tiek aktivizēta, kad HTML virkne tiek nodota klases instancei. Kad teksts nonāks šeit, vadīkla tiek nodota citām klases funkcijām, kas sašaurinās līdz citiem tagiem virknē. Tas ir skaidrs arī šīs funkcijas definīcijā: def hand_startendtag (self, tag, attrs):
pats.hand_starttag (tags, attrs)
pats.hand_endtag (tags) - hand_starttag: Šī metode pārvalda saņemto datu sākuma tagu. Tās definīcija ir tāda, kā parādīts zemāk: def hand_starttag (self, tag, attrs):
iziet - hand_endtag: Šī metode pārvalda saņemto datu beigu tagu: def hand_endtag (self, tag):
iziet - hand_charref: Šī metode pārvalda rakstzīmju atsauces saņemtajos datos. Tās definīcija ir šāda: def hand_charref (sevis, vārds):
iziet - hand_entityref: Šī funkcija apstrādā entītijas atsauces tai nodotajā HTML: def hand_entityref (sevis, nosaukums):
iziet - roktura_dati: Šī ir funkcija, kurā tiek reāli strādāts, lai izvilktu vērtības no HTML tagiem, un tiek nodoti ar katru tagu saistītie dati. Tās definīcija ir šāda: def hand_data (sevis, dati):
iziet - rīkoties_komentārs: Izmantojot šo funkciju, mēs varam arī saņemt komentārus, kas pievienoti HTML avotam: def hand_comment (self, data)
iziet - rokturis_pi: Tā kā HTML var būt arī apstrādes instrukcijas, šī ir funkcija, kur tās definīcija ir šāda: def hand_pi (sevis, dati):
iziet - rokturis_decl: Šī metode apstrādā HTML deklarācijas, tās definīcija ir šāda: def hand_decl (self, decl):
iziet
Apakšklase HTMLParser klasē
Šajā sadaļā mēs klasēsim HTMLParser klasi un apskatīsim dažas funkcijas, kas tiek izsauktas, kad HTML dati tiek nodoti klases instancē. Uzrakstīsim vienkāršu skriptu, kas to visu izdarīs:
no html.parsētāja importēšana HTMLParserklases LinuxHTMLParser (HTMLParser):
def hand_starttag (self, tag, attrs):
print ("Radās sākuma tags:", tags)
def hand_endtag (pats, tags):
print ("Radās beigu tags:", tags)
def hand_data (sevis, dati):
drukāt ("Atrasti dati:", dati)
parsētājs = LinuxHTMLParser ()
parsētājs.plūsma ("
"
Python HTML parsēšanas modulis
')
Lūk, ko mēs atgūsim ar šo komandu:
Python HTMLParser apakšklase
HTMLParser funkcijas
Šajā sadaļā mēs strādāsim ar dažādām HTMLParser klases funkcijām un aplūkosim šo funkciju funkcionalitāti:
no html.parsētāja importēšana HTMLParserno html.entītijas importē name2codepoint
klase LinuxHint_Parse (HTMLParser):
def hand_starttag (self, tag, attrs):
drukāt ("Sākt tagu:", tagu)
par attr attrs:
drukāt ("attr:", attr)
def hand_endtag (pats, tags):
drukāt ("End tag:", tags)
def hand_data (sevis, dati):
drukāt ("Dati:", dati)
def hand_comment (pats, dati):
drukāt ("Komentārs:", dati)
def hand_entityref (pats, vārds):
c = chr (nosaukums2 koda punkts [nosaukums])
drukāt ("Nosaukts ent:", c)
def hand_charref (pats, vārds):
ja vārds.startswith ('x'):
c = chr (int (nosaukums [1:], 16))
cits:
c = chr (int (nosaukums))
drukāt ("Num ent:", c)
def hand_decl (pats, dati):
drukāt ("Decl:", dati)
parsētājs = LinuxHint_Parse ()
Izmantojot dažādus zvanus, padosim šim gadījumam atsevišķus HTML datus un redzēsim, kādu izvadi ģenerē šie zvani. Mēs sāksim ar vienkāršu DOCTYPE virkne:
parsētājs.plūsma (' ')Lūk, ko mēs atgūsim ar šo zvanu:
DOCTYPE virkne
Tagad izmēģināsim attēla tagu un redzēsim, kādus datus tas iegūst:
parsētājs.plūsma ('')Lūk, ko mēs atgūsim ar šo zvanu:
HTMLParser attēla tags
Pēc tam izmēģināsim, kā skripta tags darbojas ar Python funkcijām:
parsētājs.plūsma ('')parsētājs.plūsma ('')
parsētājs.plūsma ('# python color: green')
Lūk, ko mēs atgūsim ar šo zvanu:
Skripta tags HTML failā
Visbeidzot, mēs nododam komentārus arī sadaļai HTMLParser:
parsētājs.plūsma ('""')
Lūk, ko mēs atgūsim ar šo zvanu:
Parsējot komentārus
Secinājums
Šajā nodarbībā mēs apskatījām, kā mēs varam parsēt HTML, izmantojot Python pašu HTMLParser klasi bez citas bibliotēkas. Mēs varam viegli modificēt kodu, lai mainītu HTML datu avotu uz HTTP klientu.
Lasiet vairāk uz Python balstītas ziņas šeit.