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.
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.
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:
<h1>
, <p>
, <img>
).id
, Klasse
, href
).XPath- und CSS-Selektoren sind Abfragesprachen, die zur Auswahl von Elementen in einem HTML-Dokument verwendet werden:
Lesen Sie hier mehr über Selektoren.
Bevor Sie mit Parsel beginnen, sollten Sie Folgendes beachten:
pip install parsel Anfragen
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_pod
der einen einzelnen Bucheintrag darstellt.
Nachstehend finden Sie ein Beispiel für die HTML-Struktur:
Aus diesem Element werden wir extrahieren:
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:
GET
Anfrage an die Beispiel-Website, um deren HTML-Inhalt abzurufen.artikel.produkt_pod
um den ersten Bucheintrag auf der Seite auszuwählen.produkt_pod
Block.Titel: Ein Licht auf dem Dachboden
Preis: £51.77
Verfügbarkeit: Vorrätig
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:
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)
GET
Anfrage, um den HTML-Inhalt von der Website abzurufen.produkt_pod
Der CSS-Selektor zielt auf den ersten Bucheintrag ab.h3 a::attr(Titel)
zieht das Skript das Attribut title aus der Datei <a>
Tag verschachtelt in der <h3>
Tag.Titel Text: Ein Licht auf dem Dachboden
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:
href
) zur Detailseite des Buchesimportiert 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:
Buch-Link: katalog/a-licht-in-der-laube_1000/index.html
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:
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:
GET
Anfrage, um den HTML-Inhalt von der Website abzurufen. artikel.produkt_pod h3 a::attr(titel)
wählt sie alle <a>
Tags innen <h3>
Tags in produkt_pod
Elemente..getall()
Methode ruft eine Liste aller passenden Titel ab.Titel: Ein Licht auf dem Dachboden
Titel: Tipping the Velvet
Titel: Soumission
Titel: Sharp Objects
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:
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:
produkt_pod
.div.product_price p.price_color
navigiert es in das div und wählt die p
Tag, das den Preis enthält..get()
Methode ruft den Preiswert ab.Preis: £51.77
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:
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}")
ol.row
li.artikel
zielt auf alle <li> Elemente innerhalb der geordneten Liste (<ol>), die einzelne Buchpositionen darstellen.h3 a::attr(Titel)
extrahiert das Attribut title der Datei <a>
Tag. --- p.preis_farbe::text
extrahiert den Preistext aus der Datei <p>
Tag.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
...
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:
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!