Liste der besten Python-HTML-Parser

Entdecken Sie die besten Python-HTML-Parser – Beautiful Soup, HTMLParser, lxml, PyQuery und Scrapy –, um Ihre Web-Scraping-Projekte zu vereinfachen und zu beschleunigen.
13 min lesen

Python ist aufgrund der Vielzahl verfügbarer HTML-Parser eine beliebte Wahl für das Web-Scraping. In diesem Artikel lernen Sie die am häufigsten verwendeten Parser kennen:Beautiful Soup,HTMLParser,lxml,PyQuery undScrapy. Diese Parser werden aufgrund ihrer Benutzerfreundlichkeit, Geschwindigkeit, Unterstützung moderner HTML-Standards, Dokumentation und Community-Unterstützung bevorzugt.

Lassen Sie uns gleich loslegen!

Beautiful Soup

Beautiful Soup ist eine Python-Bibliothek zum Parsen von HTML- und XML-Dokumenten. Sie erstellt einen Parsebaum, der die Struktur jeder Seite widerspiegelt und so die automatische Extraktion von Daten erleichtert. Dieser Baum stellt die Hierarchie der Elemente innerhalb des Dokuments dar und ermöglicht Ihnen eine effiziente Navigation und Suche, um bestimmte Knoten zu finden.

Funktionen und Benutzerfreundlichkeit

Beautiful Soup ist nützlich, um HTML-Dokumente in strukturierte Informationen zu organisieren. Es enthält verschiedene Parser, darunterhtml.parser,lxml undhtml5lib, mit denen Sie verschiedene Arten von Markups verarbeiten können, z. B. Standard-HTML, fehlerhaftes oder beschädigtes HTML, XHTML, HTML5 und XML. So können Sie flexibel die beste Balance zwischen Geschwindigkeit und Genauigkeit wählen. Wenn Sie beispielsweise mit einer Webseite arbeiten, auf der Tags fehlen oder Elemente falsch verschachtelt sind, können Siehtml5libverwenden, um den HTML-Inhalt wie ein Webbrowser zu parsen.

Beautiful Soup kann auch bei Web-Scraping-Aufgaben helfen, bei denen die HTML-Struktur unvorhersehbar oder unorganisiert ist. Sobald ein Dokument geparst ist, können Sie die Baumstruktur einfach durchsuchen, um Knoten zu finden. Suchmethoden wie find(), find_all() und select() bieten Möglichkeiten, auf Elemente basierend auf Identifikatoren, Klassen, Textinhalten oder Attributen zuzugreifen. Ganz gleich, ob Sie nach allen Instanzen eines Tags suchen oder ein bestimmtes Element ansteuern möchten – mit dem richtigen Selektor können Sie mit minimalem Programmieraufwand schnell auf die erforderlichen Daten zugreifen.

Geschwindigkeit

Beautiful Soup ist nicht der schnellste Parser, bietet jedoch flexible Parsing-Strategien, die IhnenAnpassungsfähigkeit verleihen. Standardmäßig verwendet esden html.parser von Python, der sich am besten für einfache Aufgaben wie die Arbeit mit kleinen Dokumenten zum Extrahieren von Daten aus einem Blogbeitrag eignet. Wenn Sie eine große Datenmenge scrapen und verarbeiten möchten, sollten Sie die Verwendung eines anderen Parsers in Betracht ziehen.

Unterstützung für aktuelle HTML-Standards

Wenn SieHTML5-Elementeund -Attribute aus statischen Webseiten analysieren möchten, ist Beautiful Soup eine gute Wahl. Seine Kompatibilität mit Parsern garantiert die Einhaltung der neuestenHTML-Standards.

Dokumentation und Support

Beautiful Soup verfügt übereine umfangreiche Dokumentation und wird von mehr als 850.000 Benutzern aufGitHub verwendet. Die Dokumentation enthält Beispiele, Tutorials und Referenzen, die den Einstieg erleichtern.

Erfahren Sie hier mehr über Web-Scraping mit Beautiful Soup.

Code-Beispiel

Um Beautiful Soup zu installieren, führen Sie den folgenden Befehl in Ihrer Shell oder Ihrem Terminal aus:

pip3 install beautifulsoup4

Der folgende Codeausschnitt verwendet Beautiful Soup, um Daten von derWebsite „Books to Scrape” zu parsen:

import requests
from bs4 import BeautifulSoup

# URL der zu scrapendenden Webseite
books_page_url = "https://books.toscrape.com/"

# Inhalt der Webseite abrufen
response = requests.get(books_page_url)

# Überprüfen, ob die Anfrage erfolgreich war
if response.status_code == 200:
    # HTML-Inhalt der Seite analysieren
    soup_parser = BeautifulSoup(response.text, 'html.parser')

    # Alle Artikel finden, die Buchinformationen enthalten
    book_articles = soup_parser.find_all('article', class_='product_pod')

    # Durchlaufen Sie jeden Buchartikel und extrahieren Sie dessen Titel und Preis.
    for book_article in book_articles:
        # Extrahieren Sie den Titel des Buches.
        book_name = book_article.h3.a['title']
        
        # Extrahieren Sie den Preis des Buches.
        book_cost = book_article.find('p', class_='price_color').text
        
        # Den Titel und Preis des Buches ausgeben
        print(f"Titel: {book_name}, Preis: {book_cost}")
else:
    # Eine Fehlermeldung ausgeben, wenn die Seite nicht abgerufen werden konnte
    print("Fehler beim Abrufen der Webseite")

Wenn Sie diesen Code testen möchten, speichern Sie ihn in einer Datei namens beautifulsoup_books_scrape.py und führen Sie ihn mit dem folgenden Befehl aus:

python3 beautifulsoup_books_scrape.py

Sie sollten nun alle Titel und Preise der Bücher von der ersten Seite in Ihrem Terminal oder Ihrer Shell sehen:

…Ausgabe ausgelassen…
Titel: Soumission, Preis:  50,10 £
Titel: Sharp Objects, Preis:  47,82 £
Titel: Sapiens: A Brief History of Humankind, Preis: 54,23 £
Titel: The Requiem Red, Preis: 22,65 £
Titel: The Dirty Little Secrets of Getting Your Dream Job, Preis: 33,34 £
…Ausgabe ausgelassen…

Wenn Sie noch keine Erfahrung mit Web Scraping haben, ist Beautiful Soup aufgrund seiner Einfachheit und der Möglichkeit, durch den HTML-Baum zu navigieren, eine gute Wahl für Ihre Web-Scraping-Projekte.

HTMLParser

HTMLParser ist eine Bibliothek, die in Python vorinstalliert ist und es Ihnen ermöglicht, Daten aus HTML-Dokumenten zu analysieren und zu extrahieren.

Funktionen und Benutzerfreundlichkeit

Obwohl HTMLParser einige der Funktionen anderer Parsing-Bibliotheken wielxmlundhtml5lib nicht bietet, ist HTMLParser aufgrund seiner Einfachheit und Python-Integration eine gute Wahl für Projekte mit einfachen Datenstrukturen, bei denen der HTML-Inhalt konsistent ist (z. B.beim Scraping statischer Webseiten). Wenn Sie jedoch mit fehlerhaftem HTML-Inhalt zu tun haben, ist HTMLParser nicht die beste Option.

Geschwindigkeit

Die Geschwindigkeit von HTMLParser ist für die meisten HTML-Parsing-Anwendungsfälle ausreichend, bei denen Sie kleine bis mittelgroße Dokumente (d. h. wenige Kilobyte bis einige Megabyte) und minimale Vorverarbeitungsanforderungen haben. Für komplexere HTML-Dokumente ist jedoch die Verwendung von Parsern wie lxml vorzuziehen.

Unterstützung für aktuelle HTML-Standards

HTMLParser unterstützt grundlegendes HTML-Parsing, kann jedoch mit sehr komplexen oder schlecht formatierten HTML-Dokumenten Probleme haben. Darüber hinaus unterstützt es den neuesten HTML5-Standard nicht vollständig.

Dokumentation und Support

Da HTMLParser Teil der Python-Bibliothek ist, verfügt es über zuverlässigeDokumentationund Support. Hilfe findet man leicht über Plattformen wie Stack Overflow, GitHub und Python-bezogene Foren.

Code-Beispiel

Wie bereits erwähnt, ist das HTMLParser-Modul in der Python-Standardbibliothek enthalten und erfordert keine zusätzliche Installation.

Im Folgenden finden Sie ein Codebeispiel für die Verwendung von html.parser zum Parsen von HTML-Daten:

from html.parser import HTMLParser

class MyHTMLParser(HTMLParser):
    def handle_starttag(self, tag, attrs):
        print("Encountered a start tag:", tag)
        
    def handle_endtag(self, tag):
        print("End-Tag gefunden:", tag)
        
    def handle_data(self, data):
        print("Daten gefunden:", data)

parser = MyHTMLParser()

html_data = """
<html>
  <head><title>Beispiel</title></head>
  <body><h1>Überschrift</h1><p>Absatz.</p></body>
</html>
"""

parser.feed(html_data)

In diesem Skript erweitern Sie die Klasse HTMLParser, um einen HTML-Parser zu erstellen, der Start-Tags, End-Tags und die Anzeige jedes Elements verwaltet.

Um diesen Code zu verwenden, speichern Sie ihn in einer Datei mit dem Namen htmlparser_example.py und führen Sie ihn mit dem folgenden Befehl von Ihrem Terminal oder Ihrer Shell aus:

python3 htmlparser_example.py

Die Ausgabe zeigt jedes Tag und jede Daten:

…Ausgabe ausgelassen…
Start-Tag gefunden: html
Daten gefunden:  
  
Start-Tag gefunden: head
Start-Tag gefunden: title
Daten gefunden:  Beispiel
End-Tag gefunden: title
End-Tag gefunden: head
…Ausgabe ausgelassen…

lxml

lxml ist eine beliebte Wahl für Web-Scraping und Datenextraktion, da es die Leistungsfähigkeit integrierter XML-Bibliotheken mit der Benutzerfreundlichkeit von Python kombiniert.

Funktionen und Benutzerfreundlichkeit

lxml ist dank seiner effizienten und vielseitigen Funktionen zum Navigieren und Analysieren von HTML- und XML-Dokumenten sehr beliebt. Es bietet erweiterte XML-Verarbeitungsfunktionen, darunterXPath,XSLT und XPointer, mit denen Sie Daten präzise extrahieren und transformieren können.

Wie Beautiful Soup unterstützt auch lxml Baumstrukturen, was die Navigation und Analyse von HTML-Inhalten erleichtert. Wenn Sie mit vielfältigen Inhalten arbeiten, kann seine Fähigkeit, sowohl mit formatierten als auch mit nicht ordnungsgemäß formatierten Dokumenten gut zu arbeiten, hilfreich sein.

Geschwindigkeit

lxml ist bekannt für seine Geschwindigkeit und Effizienz, da es C-Bibliotheken wielibxml2undlibxslt nutzt. Dadurch ist lxml schneller als andere Parsing-Bibliotheken, insbesondere bei der Verarbeitung umfangreicher Dokumente oder komplexer Parsing-Aufgaben, wie z. B. dem Extrahieren tief verschachtelter Daten aus großen HTML-Tabellen.

lxml ist eine gute Wahl für Projekte mit engen Terminen oder solche, die die Verarbeitung großer Datenmengen erfordern.

Unterstützung für aktuelle HTML-Standards

lxml kann mit den neuesten Webtechnologien umgehen, einschließlich HTML5-Dateien und schlecht strukturiertem HTML. Damit ist lxml eine der besten Optionen für Web-Scraping-Aufgaben, bei denen die HTML-Qualität und -Struktur variieren kann.

Dokumentation und Support

lxml verfügt übereine umfassende Dokumentationmit detaillierten Beispielen, die sich an Entwickler aller Erfahrungsstufen richtet. Darüber hinaus finden Sie weitere Informationen, Tipps zur Fehlerbehebung und Best Practices auf Plattformen wieStack OverflowundGitHub.

Erfahren Sie hier mehr über Web-Scraping mit lxml.

Code-Beispiel

Um lxml zu installieren, führen Sie Folgendes aus:

pip3 install lxml

Das folgende Beispiel zeigt Ihnen, wie Sie HTML-Daten mit lxml parsen können:

from lxml import html

html_content = """
<html>
  <body>
    <h1>Hallo, Welt!</h1>
    <p>Dies ist ein Absatz.</p>
  </body>
</html>
"""

tree = html.fromstring(html_content)

h1_text = tree.xpath('//h1/text()')[0]
print("H1-Text:", h1_text)

p_text = tree.xpath('//p/text()')[0]
print("Absatztext:", p_text)

Hier verwenden Sie lxml zum Parsing von HTML-Inhalten und extrahieren dann Text aus den HTML-Elementen mit XPath-Ausdrücken.

Wenn Sie lxml ausprobieren möchten, speichern Sie diesen Code in einer Datei namens lxml_example.py und führen Sie ihn dann mit dem folgenden Befehl in Ihrer Shell oder Ihrem Terminal aus:

python3 lxml_example.py

Der Text aus den Elementen <h1> und <p> sollte wie folgt ausgegeben werden:

H1-Text: Hallo, Welt!
Absatztext: Dies ist ein Absatz.

Wenn Sie einen vollwertigen, produktionsreifen Parser benötigen, der die Komplexität von XPath -Abfragen (wie Typen in XML oder mehrere Elemente) bewältigen kann, sollten Sie lxml verwenden.

PyQuery

PyQuery ist einejQuery-ähnlicheBibliothek für Python, mit der ganze Webseiten in Sekundenschnelle gescrapt werden können.

Funktionen und Benutzerfreundlichkeit

Ähnlich wie die jQuery-Syntax ist PyQuery benutzerfreundlich. Sie können ganz einfach Elemente auswählen, sie durchlaufen, ihren Inhalt aktualisieren und HTML-Attribute verwalten. Dies ist besonders nützlich bei Aufgaben wie Web-Scraping, bei denen Sie Daten aus HTML-Seiten extrahieren und bearbeiten möchten.

PyQuery unterstützt auch CSS-Selektoren, was den Einstieg erleichtert, wenn Sie bereits mit der Animation von DOM-Dokumenten mit jQuery vertraut sind.

Geschwindigkeit

PyQuery verwendet die lxml-Bibliothek zum Parsen von HTML. Dies macht es einfach zu verwenden, aber langsamer als wenn Sie lxml direkt verwenden würden.

Unterstützung für aktuelle HTML-Standards

PyQuery entspricht den neuesten HTML5-Standards und da es lxml für das Parsing verwendet, kann PyQuery sowohl strukturiertes als auch unstrukturiertes HTML verarbeiten.

Dokumentation und Support

PyQuery bieteteineumfassendeDokumentation, die Ihnen den schnellen Einstieg erleichtert.Die Communityist zwarkleinerals bei anderen Bibliotheken, wird aber von über vierzig Mitwirkenden aktiv unterstützt. Es stehen auch andere Ressourcen zur Verfügung, wie Online-Foren, Stack Overflow und verschiedene Tutorials, die Ihnen bei Problemen helfen können.

Code-Beispiel

Um PyQuery zu installieren, führen Sie Folgendes aus:

pip3 install pyquery

Hier ist ein Code-Schnipsel, der pyquery zum Parsen von HTML-Daten verwendet:

from pyquery import PyQuery as pq

html_content = """
<html>
  <body>
    <h1>Hallo, von PyQuery!</h1>
    <p>Dies ist ein Absatz.</p>
  </body>
</html>
"""

doc = pq(html_content)

h1_text = doc('h1').text()
print("H1-Text:", h1_text)

p_text = doc('p').text()
print("Absatztext:", p_text)

In diesem Ausschnitt analysieren Sie HTML-Inhalte und extrahieren dann Text aus bestimmten Elementen.

Speichern Sie diesen Code in einer Datei namens pyquery_example.py und führen Sie ihn mit dem folgenden Befehl in Ihrer Shell oder Ihrem Terminal aus:

python3 pyquery_example.py

Die Ausgabe sieht wie folgt aus:

H1-Text: Hallo, von PyQuery!
Absatztext: Dies ist ein Absatz.

Wenn Sie bereits mit jQuery vertraut sind und nach ähnlichen Funktionen suchen, ist PyQuery eine gute Wahl.

Scrapy

Scrapy ist ein flexibles Open-Source-Framework für das Web-Scraping, mit dem BenutzerSpiderzum Sammeln von Informationen erstellen und betreiben können. Es bietet Tools für alle Aspekte einer Scraping-Aufgabe, von der Verwaltung von HTTP-Anfragen bis hin zum Parsing, Verarbeiten und Speichern der extrahierten Daten. Das Framework übernimmt die gesamte Komplexität der Scraping-Aufgaben, sodass Sie sich auf das Sammeln der gewünschten Informationen konzentrieren können.

Funktionen und Benutzerfreundlichkeit

Scrapy ist auf Benutzerfreundlichkeit ausgelegt und eignet sich dank seines modularen Frameworks hervorragend zum Parsing komplexer Webdaten. Es bietet XPath- und CSS-Selektoren für die Navigation in HTML und XML und umfasst Dienstprogramme wie Request Throttling, User Agent Spoofing und IP-Rotation, die für das Scraping in großem Umfang unerlässlich sind.

Geschwindigkeit

Scrapy ist effizient. Dank seinerNetzwerkfunktionalitätkönnen Sie Anfragen gleichzeitig verarbeiten, um Daten abzurufen. Dies ist besonders leistungsstark, wenn Sie große Datensätze bearbeiten oder kommerzielle Websites scrapen möchten.

Unterstützung für aktuelle HTML-Standards

Scrapy unterstützt HTML5-Standards und kann komplexe Websites verarbeiten, selbst solche, die dynamisch generiertes JavaScript enthalten. Scrapy selbst verarbeitet zwar kein JavaScript, arbeitet aber mit Tools wieSeleniumzusammen, um JavaScript-Seiten zu verwalten.

Weitere Informationen zum Scrapen dynamischer Inhalte finden Sie hier.

Dokumentation und Support

Scrapy verfügt über umfangreicheDokumentationund eine aktive Community, die das Projekt unterstützt. Die offizielle Dokumentation enthält alles, was Sie über die grundlegende Verwendung und fortgeschrittene Themen wissen müssen, sowie zahlreiche Beispiele, Anleitungen und empfohlene Vorgehensweisen, um Entwickler aller Erfahrungsstufen zu unterstützen.

Darüber hinaus engagiert sich die Scrapy-Community aktiv in Foren und GitHub-Repositorys, sodass Sie bei allen Problemen Hilfe suchen und auf Ressourcen zugreifen können.

Code-Beispiel

Um Scrapy zu installieren, führen Sie Folgendes aus:

pip3 install scrapy

Im Folgenden finden Sie ein Beispiel für die Verwendung eines Scrapy-Spiders zum Extrahieren von Daten:

import scrapy

class QuotesSpider(scrapy.Spider):
    name = "quotes"
    start_urls = [
        'http://quotes.toscrape.com/page/1/',
    ]

    def parse(self, response):
        for quote in response.css('div.quote'):
            yield {
                'text': quote.css('span.text::text').get(),
                'author': quote.css('small.author::text').get(),
                'tags': quote.css('div.tags a.tag::text').getall(),
            }

Dieses Skript definiert eine Spider-Klasse, legt die Start-URLs fest und gibt an, wie die Antwort parsed werden soll, um Daten zu extrahieren.

Speichern Sie diesen Code in einer Datei namens quotes_spider.py und führen Sie ihn mit dem folgenden Befehl von Ihrem Terminal oder Ihrer Shell aus:

scrapy runspider quotes_spider.py -o quotes.json

Wenn Sie diesen Code ausführen, crawlt Scrapy eine Seite mit Zitaten und extrahiert und parst Datenzitate von dieser Seite mit ihren jeweiligen Autoren und Tags. Anschließend speichert Scrapy die gescrapten Daten in einer Dateinamens quotes.json, die wie folgt aussieht:

[
{"text": "u201cDie Welt, wie wir sie geschaffen haben, ist ein Produkt unseres Denkens. Sie kann nicht verändert werden, ohne unser Denken zu verändern.u201d", "author": "Albert Einstein", "tags": ["change", "deep-thoughts", "thinking", "world"]},
{"text": "u201cEs sind unsere Entscheidungen, Harry, die zeigen, wer wir wirklich sind, viel mehr als unsere Fähigkeiten.u201d", "author": "J.K. Rowling", "tags": ["abilities", "choices"]}
…Ausgabe ausgelassen...
]

Für komplexe Web-Extraktionsprojekte mit spezifischen Anforderungen ist Scrapy mit seinen funktionsreichen Tools und seiner Skalierbarkeit eine hervorragende Option.

Fazit

In diesem Artikel haben Sie fünf HTML-Parser für Python kennengelernt, darunter Beautiful Soup, HTMLParser, lxml, PyQuery und Scrapy.

Beautiful Soup eignet sich aufgrund seiner Einfachheit hervorragend für Anfänger. HTMLParser ist eine leichtgewichtige Option für grundlegende Parsing-Anforderungen. lxml ist eine Überlegung wert, wenn Sie eine bessere Leistung und XPath-Unterstützung suchen. PyQuery bringt eine jQuery-ähnliche Einfachheit in Python. Scrapy ist das Framework der Wahl, wenn Sie große Scraping-Projekte in Angriff nehmen.

Möchten Sie das Scraping überspringen und direkt auf die Daten zugreifen? Melden Sie sich an, um unsere Datensätze zu sehen, und laden Sie jetzt ein kostenloses Muster herunter.