Level Up Your Web Scraping with Python & BeautifulSoup
Ethan Miller
Product Engineer · Leapcell

Umfassende Anleitung zur HTML-Verarbeitung: Vom Parsen bis zur Datenextraktion
I. Einleitung
Als grundlegende Sprache für Webseiten ist HTML (Hypertext Markup Language) in Bereichen wie der Webdatenverarbeitung und der Webentwicklung weit verbreitet. Egal, ob Entwickler Webstrukturen optimieren oder Datenanalysten Informationen von Webseiten extrahieren, die HTML-Verarbeitung ist unverzichtbar. Dieses Tutorial konzentriert sich auf Kernoperationen wie das Parsen, die Modifizierung und die Datenextraktion von HTML und hilft den Lesern, umfassende Methoden und Techniken für den Umgang mit HTML zu beherrschen.
II. Überblick über die HTML-Grundlagen
2.1 Grundlegende HTML-Struktur
Ein Standard-HTML-Dokument beginnt mit der <!DOCTYPE html>
-Deklaration und enthält das <html>
-Root-Element, das zwei Hauptbereiche enthält: <head>
und <body>
. Der <head>
-Bereich enthält typischerweise Meta-Informationen über die Seite, wie z. B. Titel, Zeichencodierungen und Links zu CSS-Stylesheets. Der <body>
-Bereich enthält den sichtbaren Inhalt der Seite, einschließlich Text, Bilder, Links, Formulare und andere Elemente.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Meine Seite</title> </head> <body> <h1>Hallo Welt!</h1> <p>Dies ist eine einfache HTML-Seite.</p> </body> </html>
2.2 HTML-Elemente und Attribute
HTML besteht aus verschiedenen Elementen, die durch Tags dargestellt werden, wie z. B. <p>
für Absätze und <a>
für Links. Elemente können Attribute enthalten, die zusätzliche Informationen definieren. Der href
-Attribut in <a href="https://example.com">
gibt beispielsweise die Zieladresse des Links an. Attribute sind typischerweise in "Name-Wert"-Paaren enthalten, und Attributwerte müssen in Anführungszeichen stehen.
III. HTML-Parsing
3.1 Parsing-Tools und Bibliotheken
In verschiedenen Entwicklungsumgebungen können mehrere Tools und Bibliotheken HTML parsen:
- Browser: Browser verfügen über integrierte, leistungsstarke HTML-Parsing-Engines, die HTML-Code in visuelle Seiten umwandeln. Über die Entwicklertools des Browsers (z. B. Chrome DevTools) können Sie die geparste DOM-Struktur (Document Object Model) anzeigen und Elementstile und -attribute analysieren.
- Python Bibliotheken:
- BeautifulSoup: Eine der am häufigsten verwendeten HTML-Parsing-Bibliotheken in Python, die HTML- und XML-Dokumente einfach parst und eine einfache API zum Navigieren, Suchen und Ändern des Parse-Baums bereitstellt.
- lxml: Eine Python-Bibliothek, die auf den Bibliotheken libxml2 und libxslt aufbaut. Sie parst schnell, unterstützt sowohl HTML- als auch XML-Parsing und kann mit XPath-Ausdrücken für eine effiziente Datenextraktion verwendet werden.
- html5lib: Diese Bibliothek parst HTML auf eine Weise, die modernen Browsern sehr ähnlich ist, wodurch sie sich für die Verarbeitung von irregulärem HTML-Code eignet.
- JavaScript: In einer Browserumgebung kann JavaScript das DOM direkt mithilfe von Methoden des
document
-Objekts manipulieren, z. B.getElementById
undgetElementsByTagName
, um HTML zu parsen und zu bearbeiten. In einer Node.js-Umgebung können Bibliotheken wiejsdom
eine Browserumgebung simulieren, um HTML zu parsen.
3.2 HTML-Parsing mit Python
3.2.1 BeautifulSoup-Parsing-Beispiel
Installieren Sie zunächst die BeautifulSoup-Bibliothek:
pip install beautifulsoup4
Hier ist der grundlegende Code zum Parsen von HTML mit BeautifulSoup:
from bs4 import BeautifulSoup html_doc = """ <html> <head><title>Beispielseite</title></head> <body> <p class="intro">Dies ist ein einleitender Absatz.</p> <p class="content">Hier ist etwas Inhalt.</p> </body> </html> """ soup = BeautifulSoup(html_doc, 'html.parser') # Verwenden Sie den integrierten Parser von Python # Kann auch andere Parser verwenden, z. B. lxml: soup = BeautifulSoup(html_doc, 'lxml') print(soup.title.string) # Ausgabe: Beispielseite
3.2.2 lxml-Parsing-Beispiel
Installieren Sie die lxml-Bibliothek:
pip install lxml
Verwenden Sie lxml, um HTML zu parsen und Daten über XPath zu extrahieren:
from lxml import etree html = """ <html> <body> <div class="box"> <p>Erster Absatz</p> <p>Zweiter Absatz</p> </div> </body> </html> """ tree = etree.HTML(html) paragraphs = tree.xpath('//div[@class="box"]/p/text()') print(paragraphs) # Ausgabe: ['Erster Absatz', 'Zweiter Absatz']
IV. Navigation und Suche im HTML-Dokumentbaum
4.1 Navigieren im HTML-Dokumentbaum
Nehmen Sie BeautifulSoup als Beispiel: Nach dem Parsen bildet das HTML-Dokument einen Dokumentbaum, in dem auf verschiedene Arten navigiert werden kann:
- Zugriff auf Kindelemente: Sie können direkt über den Tag-Namen auf Kindelemente zugreifen, z. B.
soup.body.p
greift auf das erste<p>
-Element unter dem<body>
-Element zu. Sie können auch das Attributcontents
verwenden, um eine Liste von Kindelementen zu erhalten, oder das Attributchildren
, um Kindelemente als Generator zu durchlaufen. - Zugriff auf Elternelemente: Verwenden Sie das Attribut
parent
, um den direkten Elternteil des aktuellen Elements zu erhalten, und das Attributparents
, um rekursiv alle Vorfahrenelemente zu durchlaufen. - Zugriff auf Geschwisterelemente: Die Attribute
next_sibling
undprevious_sibling
erhalten das nächste bzw. vorherige Geschwisterelement. Die Attributenext_siblings
undprevious_siblings
durchlaufen alle nachfolgenden und vorhergehenden Geschwister.
4.2 Durchsuchen des HTML-Dokumentbaums
find_all()
-Methode: Diefind_all()
-Methode von BeautifulSoup sucht nach allen Elementen, die den angegebenen Kriterien entsprechen, die nach Tag-Namen, Attributen usw. gefiltert werden können. Um beispielsweise alle<p>
-Tags zu finden:soup.find_all('p)
; um alle Elemente mit der Klassecontent
zu finden:soup.find_all(class_='content')
.find()
-Methode: Diefind()
-Methode gibt das erste Element zurück, das den Kriterien entspricht, z. B.soup.find('a')
gibt das erste<a>
-Element im Dokument zurück.- CSS-Selektoren: Verwenden Sie die
select()
-Methode mit der CSS-Selektorsyntax, um Elemente flexibler zu suchen. Um beispielsweise alle<div>
-Elemente mit der Klassebox
auszuwählen:soup.select('div.box)
; um alle<li>
-Elemente unter dem Element mit der IDmain
auszuwählen:soup.select('#main li)
.
V. Modifizieren von HTML
5.1 Modifizieren von Elementattributen
Sowohl Python-Bibliotheken als auch JavaScript können HTML-Elementattribute einfach ändern.
-
Python (BeautifulSoup):
from bs4 import BeautifulSoup html = """ <html> <body> <a href="https://old-url.com">Alter Link</a> </body> </html> """ soup = BeautifulSoup(html, 'html.parser') link = soup.find('a') link['href'] = 'https://new-url.com' # Ändern Sie das href-Attribut print(soup.prettify())
-
JavaScript:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> </head> <body> <img id="myImage" src="old-image.jpg" alt="Altes Bild"> <script> const image = document.getElementById('myImage'); image.src = 'new-image.jpg'; // Ändern Sie das src-Attribut </script> </body> </html>
5.2 Hinzufügen und Entfernen von Elementen
-
Python (BeautifulSoup):
-
Hinzufügen von Elementen:
from bs4 import BeautifulSoup html = """ <html> <body> <ul id="myList"></ul> </body> </html> """ soup = BeautifulSoup(html, 'html.parser') ul = soup.find('ul') new_li = soup.new_tag('li') new_li.string = 'Neues Element' ul.append(new_li) # Fügen Sie ein neues Element hinzu
-
Entfernen von Elementen:
from bs4 import BeautifulSoup html = """ <html> <body> <p id="removeMe">Dieser Absatz wird entfernt.</p> </body> </html> """ soup = BeautifulSoup(html, 'html.parser') p = soup.find('p', id='removeMe') p.decompose() # Entfernen Sie das Element
-
-
JavaScript:
-
Hinzufügen von Elementen:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> </head> <body> <div id="parentDiv"></div> <script> const parentDiv = document.getElementById('parentDiv'); const newParagraph = document.createElement('p'); newParagraph.textContent = 'Dies ist ein neuer Absatz.'; parentDiv.appendChild(newParagraph); // Fügen Sie ein neues Element hinzu </script> </body> </html>
-
Entfernen von Elementen:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> </head> <body> <p id="removeParagraph">Dieser Absatz wird entfernt.</p> <script> const paragraph = document.getElementById('removeParagraph'); paragraph.remove(); // Entfernen Sie das Element </script> </body> </html>
-
VI. HTML-Datenextraktion
6.1 Extrahieren von Textinhalten
-
Python (BeautifulSoup): Verwenden Sie das Attribut
string
oder die Methodeget_text()
, um den Textinhalt innerhalb eines Elements abzurufen. Zum Beispiel:from bs4 import BeautifulSoup html = """ <html> <body> <p class="text">Extrahieren Sie diesen Text.</p> </body> </html> """ soup = BeautifulSoup(html, 'html.parser') text = soup.find('p', class_='text').string print(text) # Ausgabe: Extrahieren Sie diesen Text.
-
JavaScript: Verwenden Sie die Attribute
textContent
oderinnerText
, um Textinhalte abzurufen, z. B.const element = document.getElementById('myElement'); const text = element.textContent;
.
6.2 Extrahieren von Attributwerten
Sowohl Python als auch JavaScript können HTML-Elementattributwerte einfach extrahieren. Um beispielsweise den href
-Attributwert eines <a>
-Tags zu extrahieren:
- Python (BeautifulSoup):
href = soup.find('a')['href']
- JavaScript:
const link = document.querySelector('a'); const href = link.getAttribute('href');
6.3 Komplexe Datenextraktion
In realen Anwendungen müssen Daten oft aus komplexen HTML-Strukturen extrahiert werden – beispielsweise das Extrahieren von Produktnamen, Preisen und Links von einer Webseite mit einer Produktliste. Kombinieren Sie in solchen Fällen Schleifen und Bedingungen mit den obigen Navigations- und Suchmethoden, um die erforderlichen Daten zu durchlaufen und zu extrahieren:
from bs4 import BeautifulSoup import requests url = "https://example.com/products" response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') products = [] for product_div in soup.find_all('div', class_='product'): name = product_div.find('h2', class_='product-name').string price = product_div.find('span', class_='product-price').string link = product_div.find('a')['href'] products.append({'name': name, 'price': price, 'link': link}) print(products)
VII. Umgang mit irregulärem HTML
In der Praxis hat HTML-Code oft irreguläre Formate, wie z. B. nicht geschlossene Tags oder fehlende Attributanführungszeichen. Verschiedene Parser gehen unterschiedlich mit irregulärem HTML um:
- html5lib: Dieser Parser verhält sich ähnlich wie Browser und kann irreguläres HTML besser verarbeiten, indem er versucht, fehlerhafte Strukturen zu korrigieren.
- lxml: Der lxml-Parser ist relativ streng, hat aber eine gewisse Fehlertoleranz. Bei der Verarbeitung von stark irregulärem HTML müssen Sie es möglicherweise zuerst vorverarbeiten oder
lxml.etree.HTMLParser
mit dem Parameterrecover=True
verwenden, um den Wiederherstellungsmodus zu aktivieren. - BeautifulSoup: Es verarbeitet irreguläres HTML basierend auf den Eigenschaften des ausgewählten Parsers. Für komplexe irreguläre Dokumente wird empfohlen, dem html5lib-Parser Priorität einzuräumen.
VIII. Leistungsoptimierung und Best Practices
8.1 Auswahl des richtigen Parsers
Wählen Sie einen Parser basierend auf spezifischen Anforderungen aus:
- lxml: Ideal für Geschwindigkeit, wenn HTML relativ standardisiert ist.
- html5lib: Besser geeignet für den Umgang mit irregulärem HTML.
- html.parser (Python integriert): Erfüllt grundlegende Bedürfnisse mit Einfachheit und moderaten Leistungsanforderungen.
8.2 Reduzierung redundanten Parsens
Vermeiden Sie redundantes Parsen, wenn Sie mehrere HTML-Dokumente verarbeiten oder dasselbe Dokument mehrmals bearbeiten. Zwischenspeichern Sie geparste Ergebnisse oder führen Sie alle zugehörigen Operationen in einem einzigen Parsing-Durchgang aus.
8.3 Verwenden von Suchmethoden auf geeignete Weise
Verwenden Sie bei der Suche nach Elementen präzisere Filterbedingungen, um unnötige Durchläufe zu reduzieren. Beispielsweise können CSS-Selektoren oder XPath-Ausdrücke Zielelemente effizienter lokalisieren.
IX. Fazit
In diesem Tutorial haben Sie umfassend alle Aspekte der HTML-Verarbeitung kennengelernt, einschließlich grundlegender Strukturen, Parsing-Methoden, Dokumentbaumnavigation, Modifikationsoperationen, Datenextraktion und Techniken für den Umgang mit irregulärem HTML. In der Praxis hilft Ihnen die Auswahl geeigneter Tools und Methoden basierend auf spezifischen Szenarien, wobei der Fokus auf Leistungsoptimierung und Best Practices liegt, HTML-Verarbeitungsaufgaben effizienter zu erledigen. Ob in der Webentwicklung oder Datenerfassung, die Beherrschung der HTML-Verarbeitung wird Ihre Arbeit erheblich erleichtern.
Dieses Tutorial behandelt wichtige Aspekte der HTML-Verarbeitung. Wenn Sie während des Lernens spezifische Anwendungsfälle haben oder tiefer in einen bestimmten Abschnitt eintauchen möchten, können Sie sich jederzeit an uns wenden.
Leapcell: Das Beste vom Serverless Webhosting
Schliesslich, empfehlen wir die beste Plattform zum Bereitstellung von Python Diensten: Leapcell
🚀 Bauen Sie mit Ihrer Lieblingssprache
Entwickeln Sie mühelos in JavaScript, Python, Go oder Rust.
🌍 Stellen Sie unbegrenzte Projekte kostenlos bereit
Zahlen Sie nur für das, was Sie verbrauchen – keine Anfragen, keine Gebühren.
⚡ Pay-as-You-Go, keine versteckten Kosten
Keine Leerlaufgebühren, nur nahtlose Skalierbarkeit.
📖 Entdecken Sie unsere Dokumentation
🔹 Folgen Sie uns auf Twitter: @LeapcellHQ