Einführung in das Web-Parsing in Python mit Parsel

Python, Jan-03-20255 Min. gelesen

Web Scraping ist für Python-Entwickler, Datenwissenschaftler und Web Scraping-Enthusiasten zu einer unverzichtbaren Fähigkeit geworden. Ganz gleich, ob Sie Daten für die Analyse extrahieren, ein Preisvergleichs-Tool erstellen oder die Extraktion von Inhalten automatisieren möchten, Web-Parsing ist das Herzstück jeder dieser Aufgaben. Aber was macht Web-Parsing sowohl effizient als auch anfängerfreundlich? Hier kommt Parselins Spiel - eineleistungsstarke Bibliothek in Python, die das Parsen von HTML und die Datenextraktion vereinfacht.

Einführung in Parsel

Was ist Web-Parsing und warum ist es wichtig?

Parsel ist eine leichtgewichtige Python-Bibliothek, die für HTML/XML-Parsing und Datenextraktion entwickelt wurde. Parsel wurde mit Blick auf Web-Scraping entwickelt und erleichtert die Interaktion mit Webseitenstrukturen mithilfe leistungsstarker Selektoren wie XPath und CSS. Mit diesen Werkzeugen können Sie bestimmte Elemente oder Attribute von Webseiten präzise lokalisieren und extrahieren. Die Integration von Parsel in das Python-Ökosystem bedeutet auch, dass es nahtlos mit Bibliotheken wie `requests` und `httpx` zum Abrufen von Webinhalten zusammenarbeitet.

Hauptmerkmale von Parsel

  • Selektor-Unterstützung: Verwenden Sie XPath für eine detaillierte Pfadnavigation oder CSS-Selektoren für eine einfachere Syntax.
  • Flexibel: Es unterstützt mehrere HTML/XML-Parsing-Aufgaben, von der einfachen Textextraktion bis zur Verarbeitung tief verschachtelter Elemente.
  • Skalierbarkeit: Parsel kann Daten aus einer einzelnen Seite oder aus mehreren Seiten über Schleifenstrukturen extrahieren.
  • Integration mit Scrapy: Die Kompatibilität von Parsel erstreckt sich natürlich auch auf Scrapy, ein beliebtes Web-Scraping-Framework.

Häufige Anwendungsfälle

  • Web Scraping: Extrahieren von Daten aus E-Commerce-Websites zur Preisüberwachung.
  • Datenauswertung: Sammeln von Kontaktinformationen oder Forschungsdaten aus öffentlichen Aufzeichnungen.
  • Automatisierung: Rationalisierung von sich wiederholenden Aufgaben wie dem Herunterladen von Produktspezifikationen.

Verständnis von Selektoren und HTML-Parsing

Was ist HTML-Parsing?

HTML-Parsing ist der Prozess der Zerlegung eines HTML-Dokuments in seine strukturellen Komponenten, wie Tags, Attribute und das Document Object Model (DOM). Parsel verwendet diese Struktur, um die benötigten Daten genau zu lokalisieren und zu extrahieren.

HTML-Dokumente werden mit:

  • Tags: Definieren Sie den Typ des Elements (z.B., <h1>, <p>, <img>).
  • Attribute: Bereitstellung zusätzlicher Informationen über ein Element (z.B., id, Klasse, href).
  • DOM: Eine hierarchische Darstellung der Webseite, die die Navigation zwischen den Elementen ermöglicht.

Was sind Selektoren?

XPath- und CSS-Selektoren sind Abfragesprachen, die zur Auswahl von Elementen in einem HTML-Dokument verwendet werden:

  • XPath: XPath ist ein leistungsfähiges und funktionsreiches Tool, mit dem Sie Knoten anhand ihres Pfads im DOM, Eltern-Kind-Beziehungen und Bedingungen auswählen können.
  • CSS-Selektoren: Eine einfachere Syntax, die häufig in der Front-End-Entwicklung verwendet wird und sich ideal für die Auswahl von Elementen auf der Grundlage von Klassen, IDs oder Pseudoselektoren eignet.

Lesen Sie hier mehr über Selektoren.

Voraussetzungen

Bevor Sie mit Parsel beginnen, sollten Sie Folgendes beachten:

  • Python ist installiert: Laden Sie Python herunter und installieren Sie es von
  • Installieren Sie die erforderlichen Bibliotheken(parsel, requests): 
pip install parsel Anfragen

Parsel-Techniken für HTML-Parsing

Elemente nach ID und Klasse extrahieren

Parsel ermöglicht es uns, ein Element zu analysieren, indem wir einfach seinen Klassennamen oder seine ID kennen. Dies ist besonders nützlich, wenn bestimmte Elemente auf einer Webseite für die Datenextraktion ausgewählt werden sollen.

Zur Veranschaulichung verwenden wir das folgende Beispiel Beispiel-Website. Wir werden uns auf die Extraktion von Daten aus einem Element mit dem Klassennamen produkt_podder einen einzelnen Bucheintrag darstellt.

Nachstehend finden Sie ein Beispiel für die HTML-Struktur:

Aus diesem Element werden wir extrahieren:

  • Titel des Buches
  • Preis des Buches
  • Status der Verfügbarkeit

Python Code Beispiel

importiert Anfragen
from parsel importieren Selektor

# Holt die Webseite
url = "https://books.toscrape.com/"
response = requests.get(url)
selector = Selector(response.text)

# Das erste Produkt nach Klasse auswählen
product = selector.css("article.product_pod").get()

# Details aus dem ausgewählten Produkt auslesen
product_selector = Selektor(text=Produkt)
title = product_selector.css("h3 a::attr(title)").get()
preis = product_selector.css("p.price_color::text").get()
Verfügbarkeit = product_selector.css("p.instock.availability::text").get().strip()

print("Titel:", Titel)
print("Preis:", Preis)
print("Verfügbarkeit:", Verfügbarkeit)

Skript-Erläuterung:

  • Holen Sie die Webseite: Das Skript sendet eine GET Anfrage an die Beispiel-Website, um deren HTML-Inhalt abzurufen.
  • Wählen Sie den Produktblock aus: Er verwendet den CSS-Selektor artikel.produkt_pod um den ersten Bucheintrag auf der Seite auszuwählen.
  • Analysieren Sie die Produktdaten: Das Skript extrahiert die Titel, Preisund Verfügbarkeit indem sie auf bestimmte HTML-Tags und -Attribute innerhalb der produkt_pod Block.
  • Anzeige der Ergebnisse: Die extrahierten Daten werden in einem lesbaren Format auf der Konsole ausgegeben.

Beispiel Ausgabe

Titel: Ein Licht auf dem Dachboden
Preis: £51.77
Verfügbarkeit: Vorrätig

Extrahieren von Text aus Elementen

Parsel macht es einfach, Text aus HTML-Elementen zu extrahieren, egal ob es sich um einen Titel, eine Beschreibung oder andere sichtbare Inhalte einer Webseite handelt.

Zur Veranschaulichung verwenden wir die gleiche Beispiel-Website wieder. Wir werden uns darauf konzentrieren, den Titeltext eines einzelnen Buches zu extrahieren, indem wir die h3 Tag innerhalb eines Artikel-Elements mit der Klasse produkt_pod.

Nachstehend finden Sie ein Beispiel für die HTML-Struktur:

Aus diesem Element werden wir extrahieren:

  • Der Titeltext des Buches

Python Code Beispiel

importiert Anfragen
from parsel importieren Selektor

# Holt die Webseite
url = "https://books.toscrape.com/"
response = requests.get(url)
selector = Selector(response.text)

# Das erste Produkt nach Klasse auswählen
product = selector.css("article.product_pod").get()

# Analysiert den Titeltext des ausgewählten Produkts
product_selector = Selektor(text=product)

title_text = product_selector.css("h3 a::attr(title)").get()
print("Titeltext:", title_text)

Skript-Erläuterung:

  • Holen Sie die Webseite: Das Skript sendet eine GET Anfrage, um den HTML-Inhalt von der Website abzurufen.
  • Wählen Sie den Produktblock aus: Der Artikel.produkt_pod Der CSS-Selektor zielt auf den ersten Bucheintrag ab.
  • Extrahieren Sie den Titeltext: Verwendung von h3 a::attr(Titel)zieht das Skript das Attribut title aus der Datei <a> Tag verschachtelt in der <h3> Tag.
  • Zeigen Sie das Ergebnis an: Der extrahierte Titel wird auf der Konsole ausgegeben.

Beispiel Ausgabe

Titel Text: Ein Licht auf dem Dachboden

Extrahieren von Attributen (z. B. `href`, `src`, `alt`)

Parsel ermöglicht es uns auch, Attributwerte wie href, src oder alt aus HTML-Elementen zu extrahieren. Diese Attribute enthalten oft wertvolle Daten wie URLs, Bildquellen oder beschreibenden Text.

Wir konzentrieren uns auf das Extrahieren des Links (href) zur Detailseite eines Buches aus der <a> Tag innerhalb eines Artikel Element mit der Klasse produkt_pod.

Nachstehend finden Sie ein Beispiel für die HTML-Struktur:

Aus diesem Element werden wir extrahieren:

  • Der Link (href) zur Detailseite des Buches

Python Code Beispiel

importiert Anfragen
from parsel importieren Selektor

# Holt die Webseite
url = "https://books.toscrape.com/"
response = requests.get(url)
selector = Selector(response.text)

# Das erste Produkt nach Klasse auswählen
product = selector.css("article.product_pod").get()

# Das 'href'-Attribut des ausgewählten Produkts wird analysiert.
product_selector = Selektor(text=Produkt)
book_link = product_selector.css("h3 a::attr(href)").get()

print("Buch-Link:", book_link)

Skript-Erläuterung:

  • Abrufen der Webseite: Das Skript sendet eine GET-Anfrage, um den HTML-Inhalt von der Website abzurufen.
  • Wählen Sie den Produktblock aus: Der CSS-Selektor article.product_pod zielt auf den ersten Bucheintrag ab.
  • Extrahieren Sie das href-Attribut: Mit h3 a::attr(href) zieht das Skript den href-Wert aus dem Tag, der im Tag verschachtelt ist.
  • Zeigen Sie das Ergebnis an: Die extrahierte URL wird auf der Konsole ausgegeben.

Beispiel Ausgabe

Buch-Link: katalog/a-licht-in-der-laube_1000/index.html

Listen von Elementen extrahieren

Parsel macht es einfach, mehrere Elemente aus einer Webseite mit CSS- oder XPath-Selektoren zu extrahieren. Dies ist besonders nützlich, wenn Sie mit Listen arbeiten, z. B. mit Produkttiteln, Links oder Preisen.

Wir werden uns darauf konzentrieren, eine Liste aller Buchtitel zu extrahieren, die auf der Homepage der Beispiel-Website angezeigt werden, die wir für diesen Lehrgang verwenden.

Nachstehend finden Sie ein Beispiel für die entsprechende HTML-Struktur:

Aus diesen Elementen werden wir etwas herausziehen:

  • Die Titel aller auf der Homepage angezeigten Bücher

Python Code Beispiel

importiert Anfragen
from parsel importieren Selektor

# Holt die Webseite
url = "https://books.toscrape.com/"
response = requests.get(url)
selector = Selector(response.text)

# Alle Buchtitel auswählen
book_titles = selector.css("article.product_pod h3 a::attr(title)").getall()

# Jeden Titel ausgeben
for title in book_titles:
   print("Titel:", Titel)

Skript-Erläuterung:

  • Holen Sie die Webseite: Das Skript sendet eine GET Anfrage, um den HTML-Inhalt von der Website abzurufen.
  • Wählen Sie alle Titel aus: Die Verwendung des CSS Selektor artikel.produkt_pod h3 a::attr(titel)wählt sie alle <a> Tags innen <h3> Tags in produkt_pod Elemente.
  • Auszug Titel: Die .getall() Methode ruft eine Liste aller passenden Titel ab.
  • Ergebnisse anzeigen: Jeder Titel in der Liste wird nacheinander ausgedruckt.

Beispiel Ausgabe

Titel: Ein Licht auf dem Dachboden
Titel: Tipping the Velvet
Titel: Soumission
Titel: Sharp Objects

Navigieren in verschachtelten Elementen

Parsel ermöglicht die effiziente Navigation in komplexen, verschachtelten HTML-Strukturen mithilfe von CSS-Selektoren und XPath. Dies ist besonders wertvoll, wenn Daten extrahiert werden sollen, die tief in mehreren Schichten von HTML-Tags verborgen sind.

Wir extrahieren den Preis eines Buches aus dem produkt_pod Element.

Nachstehend finden Sie ein Beispiel für die entsprechende HTML-Struktur:

Aus dieser verschachtelten Struktur werden wir extrahieren:

  • Der Preis des ersten Buches

Python Code Beispiel

importiert Anfragen
from parsel importieren Selektor

# Holt die Webseite
url = "https://books.toscrape.com/"
response = requests.get(url)
selector = Selector(response.text)

# Das erste Produkt nach Klasse auswählen
product = selector.css("article.product_pod").get()

# Parsen des verschachtelten Preiselements
product_selector = Selektor(text=Produkt)
Preis = product_selector.css("div.product_price p.price_color::text").get()

print("Preis:", preis)

Skript-Erläuterung:

  • Abrufen der Webseite: Das Skript ruft den HTML-Inhalt der Webseite mithilfe von Anfragen ab.
  • Wählen Sie den ersten Produktblock aus: Es zielt auf den ersten Artikel-Tag mit der Klasse produkt_pod.
  • Navigieren Sie zu dem verschachtelten Preiselement: Die Verwendung des CSS Selektor div.product_price p.price_colornavigiert es in das div und wählt die p Tag, das den Preis enthält.
  • Extrahieren Sie den Preistext: Die .get() Methode ruft den Preiswert ab.
  • Zeigen Sie das Ergebnis an: Der extrahierte Preis wird gedruckt.

Beispiel Ausgabe

Preis: £51.77

Parsing von Tabellen und Listen

Parsel vereinfacht den Prozess der Extraktion strukturierter Daten aus HTML-Listen und tabellenähnlichen Formaten. Websites zeigen Informationen oft in sich wiederholenden Mustern an, wie z. B. Produktgitter oder geordnete Listen, was Parsel zu einem unverzichtbaren Werkzeug für die effiziente Erfassung dieser Daten macht.

Als Beispiel arbeiten wir wieder mit der gleichen Beispiel-Website. Unser Ziel ist es, eine Liste von Buchtiteln zusammen mit ihren Preisen zu extrahieren. Insbesondere werden wir uns auf die <ol> Tag, das mehrere <li> Elemente, die jeweils ein einzelnes Buch darstellen.

Nachstehend finden Sie ein Beispiel für die entsprechende HTML-Struktur:

Aus dieser Struktur werden wir extrahieren:

  • Der Titel des jeweiligen Buches
  • Der Preis der einzelnen Bücher

Python Code Beispiel

import requests
from parsel import Selector

# Fetch the webpage
url = "https://books.toscrape.com/"
response = requests.get(url)
selector = Selector(response.text)

# Select all book items in the list
books = selector.css("ol.row li.article")

# Loop through each book and extract title and price
for book in books:
    title = book.css("h3 a::attr(title)").get()
    price = book.css("p.price_color::text").get()
    print(f"Title: {title} | Price: {price}")

Skript-Erläuterung:

  • Holen Sie die Webseite: Das Skript sendet eine GET-Anfrage, um den HTML-Inhalt von der Website abzurufen.
  • Wählen Sie alle Buchpositionen aus: Der Selektor ol.row li.artikel zielt auf alle <li> Elemente innerhalb der geordneten Liste (<ol>), die einzelne Buchpositionen darstellen.
  • Auszug Titel und Preis: h3 a::attr(Titel) extrahiert das Attribut title der Datei <a> Tag. --- p.preis_farbe::text extrahiert den Preistext aus der Datei <p> Tag.
  • Zeigen Sie die Ergebnisse an: Das Skript gibt den Titel und den Preis jedes Buches aus.

Beispiel Ausgabe

Titel: A Licht in dem Dachboden | Preis: £51.77
Titel: Kippen die Samt | Preis: £53.74
Titel: Soumission | Preis: £50.10
Titel: Scharf Objekte | Preis: £47.82
...

Schlussfolgerung

In diesem Tutorium haben wir die Grundlagen des Web-Parsing in Python mit Parsel erforscht. Vom Verständnis grundlegender Selektoren bis hin zur Navigation in verschachtelten Elementen, dem Extrahieren von Attributen und dem Parsen von Listen haben wir gezeigt, wie Parsel den Prozess des Extrahierens sinnvoller Daten aus Webseiten vereinfacht.

Hier eine kurze Zusammenfassung der Themen, die wir behandelt haben:

  • Extrahieren von Elementen nach ID und Klasse: Gezielte Auswahl bestimmter HTML-Elemente mit CSS-Selektoren.
  • Extrahieren von Text und Attributen: Sie haben gelernt, wie man Textinhalte und Attribute wie href und src aus Elementen extrahiert.
  • Umgang mit verschachtelten Elementen: Untersucht, wie man durch Eltern-Kind-Beziehungen in HTML-Strukturen navigiert.
  • Parsing von Listen: Extrahieren strukturierter Daten aus sich wiederholenden Mustern, z. B. Tabellen oder Produktlisten.

Nächste Schritte:

  • Experimentieren Sie mit verschiedenen Webseiten und komplexen HTML-Strukturen mit Parsel.
  • Erforschung der Integration mit anderen Bibliotheken wie Scrapy für groß angelegte Web-Scraping-Projekte.
  • Befolgen Sie bewährte Praktiken für ethisches Scraping, wie z. B. die Einhaltung von robots.txt-Dateien und die Vermeidung der Überlastung von Servern.

Parsel ist ein leistungsfähiges Werkzeug im Web-Scraping-Toolkit, dessen Beherrschung unzählige Möglichkeiten der Datenerfassung und -analyse eröffnet.

Viel Spaß beim Parsen!