CodeGym /Kurse /Python SELF DE /Grundlegende Ansätze für das Durchlaufen mehrerer Seiten

Grundlegende Ansätze für das Durchlaufen mehrerer Seiten

Python SELF DE
Level 38 , Lektion 2
Verfügbar

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

Python

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

Python

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

Python

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.
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION