Parsowanie HTML za pomocą Pythona

Parsowanie HTML za pomocą Pythona
Parsing HTML jest jednym z najczęstszych zadań wykonanych dzisiaj w celu zebrania informacji ze stron internetowych i wydobywania ich do różnych celów, na przykład ustanowienia wydajności cenowej produktu w czasie, recenzje książki na stronie internetowej i wiele więcej. Istnieje wiele bibliotek, takich jak Beautifulsoup w Python, które wyodrębnia tak wiele bolesnych punktów w analizowaniu HTML, ale warto wiedzieć, jak te biblioteki faktycznie działają pod tą warstwą abstrakcji.

W tej lekcji właśnie to zamierzamy zrobić. Dowiedzimy się, w jaki sposób można wyodrębnić wartości różnych znaczników HTML, a także zastąpić domyślną funkcjonalność tego modułu, aby dodać własną logikę. Zrobimy to za pomocą Htmlparser klasa w Python w html.Parser moduł. Zobaczmy kod w akcji.

Patrząc na klasę HTMLPARSER

Aby przeanalizować tekst HTML w Python, możemy z nich skorzystać Htmlparser klasa w html.Parser moduł. Spójrzmy na klasę dfinition dla Htmlparser klasa:

klasa HTML.Parser.Htmlparser (*, konwertu_charrefs = true)

Convert_Charrefs pole, jeśli ustawione na true sprawi, że wszystkie odniesienia do postaci przekonwertowane na ich ekwiwalentki Unicode. Tylko skrypt/styl Elementy nie są przekonwertowane. Teraz postaramy się zrozumieć każdą funkcję dla tej klasy, aby lepiej zrozumieć, co robi każda funkcja.

  • uchwyt_startendtag Jest to pierwsza funkcja wyzwalana, gdy ciąg HTML jest przekazywany do instancji klasowej. Po osiągnięciu tutaj tekstu kontrola jest przekazywana do innych funkcji w klasie, która zwęża się na inne znaczniki w ciągu. Jest to również jasne w definicji tej funkcji:
    def uchwyt_startendtag (self, tag, attrs):
    samego siebie.uchwyt_starttag (tag, attrs)
    samego siebie.uchwyt_dtag (tag)
  • uchwyt_starttag: Ta metoda zarządza tagiem startowym otrzymywanych danych. Jego definicja jest jak pokazana poniżej:
    def uchwyt_starttag (self, tag, attrs):
    przechodzić
  • uchwyt_dtag: Ta metoda zarządza znacznikiem końcowym otrzymywanych danych:
    def uchwyt_endtag (self, tag):
    przechodzić
  • uchwyt_charref: Ta metoda zarządza odniesieniami do postaci w otrzymywanych danych. Jego definicja jest jak pokazana poniżej:
    def uchwyt_charref (self, nazwa):
    przechodzić
  • uchwyt_entityref: Ta funkcja obsługuje odniesienia encji w HTML przekazanych do niej:
    def uchwyt_entityref (self, nazwa):
    przechodzić
  • uchwyt_data: Jest to funkcja, w której wykonywana jest realna praca w celu wyodrębnienia wartości z tagów HTML i jest przekazywana danych powiązanych z każdym znacznikiem. Jego definicja jest jak pokazana poniżej:
    def uchwyt_data (self, dane):
    przechodzić
  • uchwyt: Korzystając z tej funkcji, możemy również dołączyć komentarze do źródła HTML:
    def uchwyt (self, dane):
    przechodzić
  • uchwyt_pi: Ponieważ HTML może również mieć instrukcje przetwarzania, jest to funkcja, w której jej definicja jest pokazana poniżej:
    def uchwyt_pi (self, dane):
    przechodzić
  • uchwyt_decl: Ta metoda obsługuje deklaracje w HTML, jej definicja jest podana jako:
    def uchwyt_decl (self, dek):
    przechodzić

Podklasowanie klasy HTMLPARSER

W tej sekcji będziemy podklasować klasę HTMLPARSER i przyjrzymy się niektórym funkcjom wywoływanym, gdy dane HTML są przekazywane do instancji klasowej. Napiszmy prosty skrypt, który to wszystko:

Z HTML.Parser import htmlparser
klasa LinuxhtmlParser (HTMLPARSER):
def uchwyt_starttag (self, tag, attrs):
print („start tag spotkał:”, tag)
def uchwyt_endtag (self, tag):
print („End Tag spotkał:”, tag)
def uchwyt_data (self, dane):
druk („Znaleziono dane:”, dane)
parser = LinuxhtmlParser ()
Parser.karmić("
'

Python HTML Parsing


')

Oto, co wracamy z tym poleceniem:

Podklasa Python Htmlparser

Funkcje htmlparser

W tej sekcji będziemy pracować z różnymi funkcjami klasy HTMLPARSER i przyjrzymy się funkcjonalności każdego z nich:

Z HTML.Parser import htmlparser
Z HTML.Podmioty importowe Name2CodPoint
klasa Linuxhint_parse (htmlparser):
def uchwyt_starttag (self, tag, attrs):
print („start tag:”, tag)
Dla attr w attrs:
Drukuj („attr:”, attr)
def uchwyt_endtag (self, tag):
print („end tag:”, tag)
def uchwyt_data (self, dane):
drukuj („dane:”, dane)
def uchwyt (self, dane):
drukuj („komentarz:”, dane)
def uchwyt_entityref (self, nazwa):
c = chr (name2codepoint [nazwa])
Drukuj („Nazwa Ent:”, C)
def uchwyt_charref (self, nazwa):
Jeśli nazwa.startswith („x”):
c = chr (int (nazwa [1:], 16))
w przeciwnym razie:
c = chr (int (nazwa))
Drukuj („num ent:”, c)
def uchwyt_decl (self, dane):
Drukuj („Decl:”, dane)
parser = Linuxhint_parse ()

Za pomocą różnych połączeń przekazajmy osobne dane HTML do tej instancji i zobaczmy, jakie dane wyjściowe generują te wywołania. Zaczniemy od prostego Doctype strunowy:

Parser.karmić(''"http: // www.W3.org/tr/html4/scrict.dtd "> ')

Oto, co wracamy z tym wezwaniem:

String DocType

Spróbujmy teraz znacznika obrazu i zobaczmy, jakie dane wyodrębniają:

Parser.karmić('')

Oto, co wracamy z tym wezwaniem:

Tag obrazu HtmlParser

Następnie spróbujmy, w jaki sposób znacznik skryptu zachowuje się w funkcjach Pythona:

Parser.karmić(''
'alarm("Linuxhint Python"); ')
Parser.Feed ('#Python Color: Green')
Parser.Feed ('#Python Color: Green')

Oto, co wracamy z tym wezwaniem:

Tag skryptu w htmlparser

Na koniec przekazujemy również komentarze do sekcji HTMLPARSER:

Parser.karmić(''
„Treść specyficzna dla IE”)

Oto, co wracamy z tym wezwaniem:

Parsowanie komentarzy

Wniosek

W tej lekcji przyjrzeliśmy się, w jaki sposób możemy przeanalizować HTML za pomocą Python Own HTMLPARSER Class bez żadnej innej biblioteki. Możemy łatwo zmodyfikować kod, aby zmienić źródło danych HTML na klienta HTTP.

Przeczytaj więcej postów opartych na Pythonie tutaj.