HTML mit Python analysieren

HTML mit Python analysieren
Das Parsen von HTML ist eine der heutigen Aufgaben, um Informationen von den Websites zu sammeln und sie für verschiedene Zwecke zu minieren, um die Preisleistung eines Produkts im Laufe der Zeit, Rezensionen eines Buches auf einer Website und vieles mehr festzustellen. Es gibt viele Bibliotheken wie BeautifulSoup in Python, die so viele schmerzhafte Punkte bei der Parsen von HTML abstrahieren, aber es ist zu wissen, wie diese Bibliotheken tatsächlich unter dieser Abstraktionsebene funktionieren.

In dieser Lektion wollen wir das tun. Wir werden herausfinden, wie Werte verschiedener HTML -Tags extrahiert werden können und auch die Standardfunktionalität dieses Moduls überschreiben, um eine eigene Logik hinzuzufügen. Wir werden dies mit dem tun Htmlparser Klasse in Python in html.Parser Modul. Lassen Sie uns den Code in Aktion sehen.

Betrachten Sie die HTMLParser -Klasse

Um den HTML -Text in Python zu analysieren, können wir verwenden Htmlparser Klasse in html.Parser Modul. Schauen wir uns die Dfinition der Klasse für die an Htmlparser Klasse:

Klasse HTML.Parser.HtmlParser (*, convert_charrefs = true)

Der convert_charrefs Field, wenn auf True festgelegt wird, wird alle Zeichenreferenzen in ihre Unicode -Äquivalente konvertiert. Nur der Skript/Stil Elemente werden nicht konvertiert. Jetzt werden wir versuchen, jede Funktion auch für diese Klasse zu verstehen, um besser zu verstehen, was jede Funktion macht.

  • Handle_StartendTag Dies ist die erste Funktion, die ausgelöst wird, wenn die HTML -Zeichenfolge an die Klasseninstanz übergeben wird. Sobald der Text hier erreicht ist, wird die Steuerung an andere Funktionen in der Klasse übergeben, die sich auf andere Tags in der Zeichenfolge verengen. Dies ist auch in der Definition für diese Funktion klar:
    Def handle_startendtag (Selbst, Tag, Attrs):
    selbst.Handle_StartTag (Tag, Attrs)
    selbst.Handle_endtag (Tag)
  • Handle_StartTag: Diese Methode verwaltet das Start -Tag für die empfangenen Daten. Seine Definition ist wie unten gezeigt:
    Def Handle_Startag (Selbst, Tag, Attrs):
    passieren
  • Handle_endtag: Diese Methode verwaltet das End -Tag für die von ihnen empfangenen Daten:
    Def Handle_endtag (Selbst, Tag):
    passieren
  • Handle_Charref: Diese Methode verwaltet die Zeichenreferenzen in den von ihnen empfangenen Daten. Seine Definition ist wie unten gezeigt:
    Def Handle_Charref (Selbst, Name):
    passieren
  • Handle_entityRef: Diese Funktion übernimmt die Entitätsreferenzen in der HTML, die an sie übergeben wurde:
    Def Handle_entityRef (Selbst, Name):
    passieren
  • Handle_Data: Dies ist die Funktion, bei der reale Arbeiten durchgeführt werden, um Werte aus den HTML -Tags zu extrahieren, und die Daten zu jedem Tag übergeben werden. Seine Definition ist wie unten gezeigt:
    Def handle_data (Selbst, Daten):
    passieren
  • Handle_Comment: Mit dieser Funktion können wir auch Kommentare an eine HTML -Quelle angeschlossen erhalten:
    Def Handle_Comment (Selbst, Daten):
    passieren
  • Handle_pi: Da HTML auch Verarbeitungsanweisungen haben kann, ist dies die Funktion, in der diese Definition wie unten gezeigt ist:
    Def handle_pi (Selbst, Daten):
    passieren
  • Handle_decl: Diese Methode übernimmt die Deklarationen in der HTML. Ihre Definition wird bereitgestellt als:
    Def handle_decl (self, decl):
    passieren

Unterklasse der HTMLParser -Klasse

In diesem Abschnitt werden wir die HTMLParser-Klasse subklassen und einige der Funktionen ansehen, die aufgerufen werden, wenn HTML-Daten an die Klasseninstanz übergeben werden. Schreiben wir ein einfaches Skript, das all das ausführt:

von html.Parser import HTMLParser
Klasse LinuxHTMLParser (HTMLParser):
Def Handle_Startag (Selbst, Tag, Attrs):
print ("Start -Tag aufgetaucht:", Tag)
Def Handle_endtag (Selbst, Tag):
print ("End -Tag aufgetaucht:", Tag)
Def handle_data (Selbst, Daten):
print ("Daten gefunden:", Daten)
Parser = LinuxhtmlParser ())
Parser.füttern("
''

Python HTML Parsing -Modul


'))

Hier ist, was wir mit diesem Befehl zurückbekommen:

Python HtmlParser -Unterklasse

HtmlParser -Funktionen

In diesem Abschnitt werden wir mit verschiedenen Funktionen der HTMLParser -Klasse zusammenarbeiten und die Funktionalität der einzelnen von diesen betrachten:

von html.Parser import HTMLParser
von html.Entitäten importieren name2CodePoint
Klasse LinuxHint_Parse (htmlparser):
Def Handle_Startag (Selbst, Tag, Attrs):
print ("Start Tag:", Tag)
für Attr in Attrs:
print ("attr:", attr)
Def Handle_endtag (Selbst, Tag):
print ("Ende Tag:", Tag)
Def handle_data (Selbst, Daten):
print ("Daten:", Daten)
Def Handle_Comment (Selbst, Daten):
print ("Kommentar:", Daten)
Def Handle_entityRef (Selbst, Name):
c = chr (name2CodePoint [Name])
print ("Namen Ent:", C)
Def Handle_Charref (Selbst, Name):
Wenn Name.starten ('x'):
c = chr (int (name [1:], 16))
anders:
c = chr (int (name))
print ("num ent:", c)
Def Handle_decl (Selbst, Daten):
print ("dekl:", Daten)
Parser = LinuxHint_Parse ()

Lassen Sie uns bei verschiedenen Aufrufen separate HTML -Daten in diese Instanz einfügen und sehen, welche Ausgabe diese Aufrufe generieren. Wir werden mit einem einfachen beginnen DocType String:

Parser.füttern(''"http: // www.W3.org/tr/html4/streng.dtd "> ')

Hier ist, was wir mit diesem Anruf zurückbekommen:

DocType String

Versuchen wir nun ein Bild -Tag und sehen Sie, welche Daten es extrahiert:

Parser.füttern('')

Hier ist, was wir mit diesem Anruf zurückbekommen:

HtmlParser Bild -Tag

Versuchen wir als nächstes, wie sich das Skript -Tag mit Python -Funktionen verhält:

Parser.füttern(''
'Alarm("LinuxHint Python"); ')
Parser.feed ('#python color: grün')
Parser.feed ('#python color: grün')

Hier ist, was wir mit diesem Anruf zurückbekommen:

Skript -Tag in HTMLParser

Schließlich geben wir Kommentare auch an den Abschnitt HTMLParser weiter:

Parser.füttern(''
"Dh spezifischer Inhalt")

Hier ist, was wir mit diesem Anruf zurückbekommen:

Kommentare analysieren

Abschluss

In dieser Lektion haben wir uns angesehen, wie wir HTML mithilfe der Python -eigenen HTMLParser -Klasse ohne andere Bibliothek analysieren können. Wir können den Code leicht ändern, um die Quelle der HTML -Daten in einen HTTP -Client zu ändern.

Lesen Sie hier mehr Python -basierte Beiträge.