1. Verwendung der Schaltfläche „Weiter“
Wenn es auf der Website eine Schaltfläche oder einen Link „Weiter“ gibt, um zur nächsten Seite zu gelangen, kannst du eine Schleife einrichten, die auf diese Schaltfläche klickt, solange sie verfügbar ist.
Codebeispiel
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.by import By
import time
def initialize_driver():
driver = webdriver.Chrome()
driver.implicitly_wait(10)
return driver
def open_page(driver, url):
driver.get(url)
def collect_data(driver):
# Beispiel für das Sammeln von Daten von der aktuellen Seite
items = driver.find_elements(By.CLASS_NAME, "item_class")
for item in items:
print(item.text) # Hier kannst du die Daten speichern oder verarbeiten
def click_next_button(driver):
try:
next_button = driver.find_element(By.LINK_TEXT, "Next")
next_button.click()
return True
except NoSuchElementException:
return False # Schaltfläche nicht gefunden, wir sind auf der letzten Seite
def main():
driver = initialize_driver()
open_page(driver, "https://example.com/page1")
try:
while True:
collect_data(driver)
if not click_next_button(driver):
break # Schleife verlassen, wenn die Schaltfläche "Next" fehlt
time.sleep(2) # Verzögerung zum Laden der nächsten Seite
finally:
driver.quit()
main()
Erklärung des Codes
initialize_driver() — Initialisierung des Treibers.
open_page() — Öffnet die erste Seite, um zu starten.
collect_data() — Funktion zum Sammeln von Daten von der aktuellen Seite.
click_next_button() — Funktion, die die Schaltfläche „Next“ findet und darauf klickt. Wenn die Schaltfläche nicht vorhanden ist, gibt sie False zurück, was das Ende des Durchlaufens bedeutet.
Schleife in main() — Hauptschleife für das Durchlaufen der Seiten. Sie beendet die Arbeit, wenn die Schaltfläche „Next“ nicht mehr gefunden wird.
2. Seitennavigation mithilfe von Seitennummern
Auf manchen Websites gibt es nummerierte Seitenlinks (z. B. „1“, „2“, „3“ usw.). In solchen Fällen kannst du eine Liste von Links sammeln und nacheinander zu jedem von ihnen wechseln.
Codebeispiel
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
def initialize_driver():
driver = webdriver.Chrome()
driver.implicitly_wait(10)
return driver
def open_page(driver, url):
driver.get(url)
def collect_data(driver):
items = driver.find_elements(By.CLASS_NAME, "item_class")
for item in items:
print(item.text)
def go_to_page(driver, page_number):
page_link = driver.find_element(By.LINK_TEXT, str(page_number))
page_link.click()
def main():
driver = initialize_driver()
open_page(driver, "https://example.com/page1")
try:
total_pages = 5 # Gebe die Gesamtanzahl der Seiten an, wenn bekannt
for page in range(1, total_pages + 1):
collect_data(driver)
if page < total_pages: # Gehe nach der letzten Seite nicht weiter
go_to_page(driver, page + 1)
time.sleep(2) # Verzögerung zum Laden der nächsten Seite
finally:
driver.quit()
main()
Erklärung des Codes
go_to_page() — Funktion, die den Link zur gewünschten Seite anhand ihrer Nummer findet und darauf zugreift.
Schleife in main() — Verwendet die Variable total_pages zur Bestimmung der Anzahl der Seiten. Die Schleife wechselt weiter zur nächsten Seite, bis die letzte erreicht ist.
3. Änderung der URL für jede Seite
Einige Websites haben eine einfache URL-Struktur, bei der jede Seite durch eine Nummer in der URL identifiziert wird, z. B. https://example.com/page/1, https://example.com/page/2 usw. In diesem Fall kannst du einfach die URL ändern und die gewünschte Seite laden, ohne nach Elementen suchen zu müssen.
Codebeispiel
from selenium import webdriver
import time
def initialize_driver():
driver = webdriver.Chrome()
driver.implicitly_wait(10)
return driver
def open_page(driver, url):
driver.get(url)
def collect_data(driver):
items = driver.find_elements_by_class_name("item_class")
for item in items:
print(item.text)
def main():
driver = initialize_driver()
try:
total_pages = 5 # Gebe die Gesamtanzahl der Seiten an, wenn bekannt
base_url = "https://example.com/page/"
for page_number in range(1, total_pages + 1):
url = f"{base_url}{page_number}"
open_page(driver, url)
collect_data(driver)
time.sleep(2) # Verzögerung zum Laden der nächsten Seite
finally:
driver.quit()
main()
Erklärung des Codes
Variable base_url enthält die Basis-URL der Seite. Die Schleife ergänzt diese mit der Seitennummer und öffnet nacheinander jede Seite.
Schleife generiert die URL jeder Seite und sammelt Daten, ohne auf Elemente klicken zu müssen. Dies minimiert die Wahrscheinlichkeit von Fehlern.
4. Tipps zur Optimierung
- Minimiere Wartezeiten und Klicks auf dynamische Elemente: Die Verwendung von Links und URLs ist stabiler als das Klicken auf Schaltflächen, die von JavaScript geladen werden.
- Verwende Wartezeiten mit minimaler Verzögerung: Verwende beim Wechseln zu einer neuen Seite eine kleine Verzögerung
time.sleep(2), damit die Elemente Zeit zum Laden haben, aber bleibe nicht länger stehen als nötig. - Sammle Daten nach dem Laden der gesamten Seite: Stelle sicher, dass die Daten auf der Seite vollständig geladen sind, bevor du mit dem Sammeln beginnst. Verwende
implicitly_wait, um Elemente zuverlässig zu erkennen. - Protokollierung: Führe ein Logbuch, um die aktuelle Seite, Fehler und erfolgreiche Übergänge zu dokumentieren. Dies erleichtert die Diagnose des Skripts während seiner Ausführung.
GO TO FULL VERSION