1. Vorbereitung auf die Navigation
Bevor wir mit unseren großen Abenteuern beginnen, müssen wir uns ausstatten und die richtigen Tools zur Hand nehmen: Selenium und ein bisschen Schlauheit. Wir gehen davon aus, dass du bereits weißt, wie du Selenium und den Browser-Driver einrichtest, also los geht’s!
Driver-Einrichtung
from selenium import webdriver
# Browser-Driver starten, z.B. Chrome
driver = webdriver.Chrome()
# Die erste Seite unseres Abenteuers öffnen
driver.get("http://example.com/start-page")
Bisher alles Standard – wir haben den Browser geöffnet und die Startseite geladen. Aber jetzt beginnt der Spaß: Wir wollen nicht auf einer Seite hängen bleiben. Wir wollen alle Nachbarseiten besuchen!
2. Pagination: Spaziergang durch Seiten
Der einfachste und freundlichste Weg, durch Seiten zu navigieren, ist die Pagination. Du kennst bestimmt diese kleinen Zahlen unten auf der Seite, oder? Sie sind wie Straßenschilder: „Ihr nächster Halt — Seite 2“.
Daten von Seiten extrahieren
Bevor wir zu unserer Reise aufbrechen, möchten wir Informationen von der aktuellen Seite sammeln. Angenommen, es handelt sich um Produktlisten oder Artikelüberschriften.
def extract_data():
# Alle interessanten Elemente auf der Seite finden, z.B. Überschriften
titles = driver.find_elements_by_class_name("item-title")
for title in titles:
print(title.text) # Ja, wir geben den Text einfach aus, aber du kannst ihn speichern, wo immer du möchtest
extract_data()
Falls du die vorherigen Vorlesungen verpasst hast, dieser Code-Schnipsel sucht alle Überschriften mit der Klasse item-title
und gibt sie aus.
Zur nächsten Seite navigieren
Jetzt, wo wir die Daten haben, ist es Zeit, weiterzuziehen. Pagination wird oft durch Buttons mit Links zur nächsten oder vorherigen Seite dargestellt. Diese Buttons müssen wir finden und anklicken.
def go_to_next_page():
try:
# Den Button für die nächste Seite finden und darauf klicken
next_button = driver.find_element_by_link_text("Next")
next_button.click()
except NoSuchElementException:
# Wenn der Button nicht existiert, sind wir am Ende angekommen
print("Ende der Seitenliste.")
Diese Funktion sucht nach einem Link mit dem Text „Next“
. Wenn sie gefunden wird, klickt sie darauf und geht zur nächsten Seite. Wenn nicht, erkennt unser Bot, dass er das Ende des Internets erreicht hat... naja, zumindest dieser Seitenabfolge.
3. Zyklisches Durchlaufen der Seiten
Was fehlt uns zum vollkommenen Glück? Richtig, eine Schleife! Lass uns alles in einer praktischen Schleife zusammenfassen, damit unser Bot wie ein Profi durch alle verfügbaren Seiten navigieren kann.
while True:
extract_data() # Daten von der aktuellen Seite sammeln
go_to_next_page() # Zur nächsten Seite navigieren
time.sleep(2) # Etwas Pause machen, um den Server nicht zu erschrecken
Voilà, jetzt navigiert unser Bot tapfer durch alle Seiten, auf denen der „Next“
-Button geklickt werden kann. Dieser Code wird ausgeführt, bis keine weiteren Seiten mehr übrig sind. Denkt daran, dass eine kleine Pause zwischen den Anfragen eure Freundschaft mit dem Server bedeutet. Niemand mag Spammer, vor allem nicht die Administratoren von Webseiten.
4. Dynamische Interaktionen
Freunde, nichts im Leben ist so einfach wie diese Beispiele mit Pagination. Manchmal verhält sich eine Seite wie ein unsichtbarer Ninja und lädt Daten dynamisch während des Scrollens. Kein Problem, damit kommen wir auch klar.
Explizites Warten
Mit Warten kann dein Code meditieren, bis das gewünschte Element verfügbar ist. Das ist besonders nützlich, wenn Inhalte nicht sofort geladen werden.
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def wait_for_element(locator):
try:
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CLASS_NAME, locator))
)
return element
except TimeoutException:
print("Element nicht gefunden.")
Mit dieser Funktion wird dein Bot harmonisch mit dynamisch geladenen Inhalten und wartet, bis die Elemente verfügbar sind.
Seite scrollen
Bei dynamischen Inhalten, wie sie auf magischen Seiten mit unendlichem Scrollen vorkommen, müssen wir möglicherweise die Seite nach unten scrollen, damit mehr Elemente geladen werden.
def scroll_down():
# Mit JavaScript nach unten scrollen
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(2)
Das JavaScript-Skript hilft dabei, sanft nach unten zu scrollen, damit die Seite Inhalte laden kann. Diese Methode kann man in einer Schleife verwenden, um das unendliche Scrollen zu bewältigen.
5. Tipps und Tricks
Über die Beispiele hinauszugehen ist wie ein Abenteuerbuch voller Überraschungen. Stell dir vor, dein Bot muss ebenso wie du für verschiedene Szenarien bereit sein.
Wenn der Button „Next“
fehlt, es aber eine Pagination mit Seitenzahlen gibt, nutze einen dynamischen Ansatz, indem du die Nummer direkt in die URL einfügst. Und falls deine Webseite plötzlich zum Ninja wird und einige Seiten versteckt, passe deine Skripte so an, dass sie flexibel sind und bereit für Überraschungen.
GO TO FULL VERSION