CodeGym /Kurse /Python SELF DE /Extrahieren von Texten und Attributen mit Selenium

Extrahieren von Texten und Attributen mit Selenium

Python SELF DE
Level 36 , Lektion 2
Verfügbar

Hallo, zukünftige Automatisierungsmeister! Heute lernen wir, wie man mit Selenium Texte und Attribute von Elementen auf einer Webseite extrahieren kann. Das ist ein mächtiges Werkzeug in eurem Arsenal, denn in der Welt des Web-Scraping ist es wichtig, Informationen zu sammeln. Bereit, nützliche Daten aus den tiefen Ecken des Internets herauszuziehen? Dann legen wir los!

1. Worum geht es in dieser Vorlesung?

  • Datenextraktionsgrundlagen: Wie man Texte aus HTML-Elementen extrahiert – das klingt schon wie ein Abenteuer an sich.
  • Attribute extrahieren: Wie man Leckerbissen wie Links (href) und Bilder (src) extrahiert, um danach etwas Unglaubliches damit zu machen.
  • Beispiele aus dem echten Leben: Wir werden praktisch Daten aus Tabellen und Listen auf einer Webseite extrahieren. Denn wie ein großartiger Programmierer mal gesagt hat: "Man hat es erst verstanden, wenn man den Code selbst angefasst hat".

2. Texte aus Elementen extrahieren

Stell dir vor, du hast eine schöne Webseite voller nützlicher Informationen. Du musst Text von Elementen wie Überschriften, Absätzen und anderen HTML-Elementen holen. Was tun? Da kommt Selenium ins Spiel.

Beispiel

Python

from selenium import webdriver

# Chrome-Driver konfigurieren
driver = webdriver.Chrome()

# Webseite öffnen
driver.get("https://example.com")

# Element per Klassenname finden und Text extrahieren
element = driver.find_element_by_class_name("example-class")
text = element.text
print("Extrahierter Text:", text)

# Browser nicht vergessen zu schließen
driver.quit()

Hier benutzen wir die Methode .text, um den Textinhalt eines Elements zu bekommen. Einfacher als alle Exceptions in Python auswendig zu lernen, oder?

3. Attribute aus Elementen extrahieren

Texte sind großartig, aber was ist, wenn du etwas Spezielleres brauchst, z. B. die URL eines Links oder den Pfad eines Bildes? Auch hier wird dich Selenium nicht enttäuschen.

Beispiel

Python

from selenium import webdriver

driver = webdriver.Chrome()

driver.get("https://example.com")

# Element per CSS-Selektor finden und Attribut 'href' extrahieren
link_element = driver.find_element_by_css_selector("a.link-class")
link_href = link_element.get_attribute("href")
print("URL des Links:", link_href)

# Element per ID finden und Attribut 'src' extrahieren
img_element = driver.find_element_by_id("logo")
img_src = img_element.get_attribute("src")
print("Bild-URL:", img_src)

driver.quit()

Wie du siehst, funktioniert es genauso wie bei .text, nur dass wir hier die Methode .get_attribute("Attributname") verwenden. Einfach zu lernen, aber unglaublich mächtig in der Anwendung.

4. Praktische Anwendung der Methoden

Gehen wir von der Theorie zur Praxis über, denn Programmierer mögen es normalerweise nicht, zu lange in der Abstraktion zu verweilen. Schauen wir uns ein Beispiel an, in dem wir Daten aus einer Tabelle auf einer Webseite extrahieren.

Daten aus Tabellen extrahieren

Angenommen, du musst alle Zeilen aus einer Tabelle auf einer Seite extrahieren und diese in der Konsole ausgeben. So könnte das umgesetzt werden:

Python

from selenium import webdriver

driver = webdriver.Chrome()

driver.get("https://example.com")

# Tabelle per ID finden
table = driver.find_element_by_id("example-table")

# Alle Zeilen in der Tabelle finden
rows = table.find_elements_by_tag_name("tr")

for row in rows:
    # Alle Zellen in der aktuellen Zeile finden
    cells = row.find_elements_by_tag_name("td")
    for cell in cells:
        print(cell.text, end=' ')
    print()

driver.quit()

Zuerst finden wir die Tabelle selbst, dann iterieren wir durch alle Zeilen und Zellen, extrahieren den Text und geben ihn aus. Es ist, als würde man ein komplexes Netz entwirren, aber letztlich wird alles einfach und verständlich!

5. Typische Fehler und wie man sie vermeidet

Bevor wir in das Code-Abenteuer zur Datenextraktion eintauchen, sprechen wir über typische Fehler, auf die man stoßen kann.

Wenn du mit dynamischen Seiten arbeitest, kann die Zeit dein Feind sein. Wenn du versuchst, Text oder Attribute eines Elements zu erhalten, das noch nicht geladen ist, erhältst du einen Fehler NoSuchElementException. Das ist wie der Versuch, eine Überraschung zu fangen, bevor sie kommt. Um dies zu vermeiden, benutze explizite Wartezeiten (WebDriverWait), anstatt auf ein Wunder zu hoffen.

Python

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()

driver.get("https://example.com")

try:
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, "lazy-class"))
    )
    print(element.text)
finally:
    driver.quit()

Hier verwenden wir WebDriverWait und expected_conditions, um auf das Laden eines Elements zu warten. Es ist wie das Warten darauf, dass ein Gericht fertig ist, um es dann genießen zu können.

Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION