1. Die CSS-Selektoren auffrischen
Willkommen in unserer Welt, in der HTML-Seiten ihre Geheimnisse nicht mit einem Fingerschnippen, sondern mit einem gezielten CSS-Selektor offenbaren. Wenn du denkst, dass CSS-Selektoren nur zum Styling von Seiten da sind (damit deine Webseite nicht wie ein altes Schulheft aussieht), dann ist es Zeit, dein drittes Auge des Scrapers zu öffnen. Heute schauen wir uns an, wie CSS-Selektoren dein Lieblingstool für die Datenextraktion werden können.
CSS-Selektoren, wie liebevolle Kurzformen, erlauben es uns, HTML-Elemente anzusprechen. Sie helfen uns, zu definieren, welche Elemente auf der Seite du bearbeiten möchtest. Wenn die HTML-Seite ein Labyrinth ist, dann sind CSS-Selektoren der rote Faden, der dich zum Ziel führt.
Beispiele für CSS-Selektoren
-
Tag:
p
— wählt alle<p>
-Elemente (Absätze) aus. -
Klasse:
.classname
— wählt alle Elemente mit der angegebenen Klasse aus. -
ID:
#idname
— wählt das Element mit der bestimmten ID aus. -
Kombinationen:
div > p
— wählt alle<p>
, die direkte Kinder des<div>
-Elements sind.
2. Verwendung von Selektoren in BeautifulSoup
Leb wohl, langweiliges Leben ohne CSS-Selektoren in BeautifulSoup!
Es ist Zeit, unseren Ansatz zu erfrischen. Stell dir vor: Du stößt auf eine
Webseite und musst dringend alle Zitate großer Denker herausholen, um beim Vorstellungsgespräch
zu beeindrucken. Dafür verwenden wir die Methode
select()
, die speziell mit CSS-Selektoren arbeitet.
Die Methoden select()
und select_one()
Die Methode select()
gibt dir eine Liste aller
Elemente zurück, die deinem Selektor entsprechen. Und
select_one()
findet für dich das erste
Element, das dem Selektor entspricht — wie eine Suchmaschine,
die genau das liefert, was du brauchst, und nicht eine endlose Liste
irrelevanter Ergebnisse.
Angenommen, du hast eine HTML-Seite mit Zitaten:
<div class="quote">
<h2 class="author">Puschkin</h2>
<p class="text">Ah, dieser Puschkin.</p>
<a href="https://example.com" class="link">Weiterlesen</a>
</div>
<div class="quote">
<h2 class="author">Lenin</h2>
<p class="text">Lernen, lernen und nochmal lernen.</p>
<a href="https://example.com" class="link">Weiterlesen</a>
</div>
<div class="quote">
<h2 class="author">Stalin</h2>
<p class="text">Gibt es einen Menschen, gibt es ein Problem; gibt es keinen Menschen, gibt es kein Problem.</p>
<a href="https://example.com" class="link">Weiterlesen</a>
</div>
So kannst du sie abrufen:
from bs4 import BeautifulSoup
import requests
# Holen des HTML-Codes der Seite
response = requests.get('http://quotes.toscrape.com/')
soup = BeautifulSoup(response.text, 'html.parser')
# Finden aller Zitate mithilfe von CSS-Selektoren
quotes = soup.select('.quote')
for quote in quotes:
text = quote.select_one('.text').get_text()
author = quote.select_one('.author').get_text()
print(f'Zitat: {text}\\nAutor: {author}\\n')
Ist das nicht praktisch bis hin zur Magie? Die Klasse
.quote
hilft uns, alle als Zitate markierten
Elemente zu holen, während .text
und
.author
die Kinderelemente sind, aus denen wir
den Text des Zitats und den Autor extrahieren.
3. Beispiele für die Suche mit CSS-Selektoren
Üben wir an Beispielen, damit dein kluger Kopf weiß, was zu tun ist, wenn er einen div mit zehn Klassen sieht. Selektoren können verwendet werden, um gezielter nach Daten auf Seiten zu suchen. Du kannst sie kombinieren, um genau das zu erhalten, was du brauchst.
Selektor nach Klasse und Tag
# Finden aller Links im Menüblock
menu_links = soup.select('nav.menu a')
for link in menu_links:
print(link['href'])
Selektor nach ID
# Extrahieren der Hauptüberschrift der Seite
main_heading = soup.select_one('#main-heading')
print(main_heading.text)
Kombinieren von Selektoren
# Finden aller Sätze in einem hervorgehobenen Abschnitt
highlighted_sentences = soup.select('.highlighted p')
for sentence in highlighted_sentences:
print(sentence.text)
4. Fehler und wie man sie vermeidet
Deine Arbeit als Scraper wird nicht immer so einfach sein wie eine Tasse Kaffee. Es gibt Fälle, in denen CSS-Selektoren nicht funktionieren können, wenn:
- Die Seite dynamische Inhalte hat, und die benötigten Elemente über JavaScript geladen werden.
- Du auf einen Selektor zugreifst, der nicht existiert (z. B. ein Tippfehler im Klassennamen oder ID).
- Die HTML-Struktur sich ändert, was zu einer Horrorszene führt, in der du verzweifelt nach den benötigten Elementen suchst.
Um solche Fehler zu vermeiden, stelle sicher, dass du mit einer aktuellen und statischen Version des HTML-Dokuments arbeitest und achte auf die Genauigkeit der Selektoren.
Praktische Anwendung
Jetzt hast du die Möglichkeit, CSS-Selektoren in realen Datenextraktionsprojekten zu verwenden. Diese Fähigkeit ist nützlich beim Erstellen von Tools zur Analyse und Preisüberwachung, bei der Nachrichtenbeschaffung und sogar beim Nachverfolgen von Änderungen auf Webseiten. Die Schönheit dieses Ansatzes liegt darin, dass selbst wenn die Webseite durch CSS äußerlich verändert wird, dein Code weiterhin funktioniert, da er von der HTML-Struktur abhängt und nicht von der Stilgestaltung.
GO TO FULL VERSION