Heim >Backend-Entwicklung >Python-Tutorial >Scraping von unendlich scrollbaren Seiten mit der Schaltfläche „Mehr laden': Eine Schritt-für-Schritt-Anleitung

Scraping von unendlich scrollbaren Seiten mit der Schaltfläche „Mehr laden': Eine Schritt-für-Schritt-Anleitung

Patricia Arquette
Patricia ArquetteOriginal
2025-01-13 18:09:43791Durchsuche

Hinken Ihre Scraper beim Versuch, Daten von dynamischen Webseiten zu laden? Sind Sie frustriert über endlose Schriftrollen oder diese lästigen „Mehr laden“-Schaltflächen?

Du bist nicht allein. Heutzutage implementieren viele Websites diese Designs, um die Benutzererfahrung zu verbessern – für Web-Scraper können sie jedoch eine Herausforderung darstellen.

Dieses Tutorial führt Sie durch eine anfängerfreundliche Anleitung zum Scrapen einer Demoseite mit der Schaltfläche Mehr laden. So sieht die Zielwebseite aus:

Demo web page for scraping

Am Ende erfahren Sie, wie Sie:

  • Richten Sie Selenium für Web Scraping ein.
  • Automatisieren Sie die Interaktion mit der Schaltfläche „Mehr laden“.
  • Produktdaten wie Namen, Preise und Links extrahieren.

Lass uns eintauchen!

Schritt 1: Voraussetzungen

Stellen Sie vor dem Eintauchen folgende Voraussetzungen sicher:

  • Python installiert: Laden Sie die neueste Python-Version von python.org herunter und installieren Sie sie, einschließlich PIP während der Einrichtung.
  • Grundkenntnisse: Vertrautheit mit Web-Scraping-Konzepten, Python-Programmierung und der Arbeit mit Bibliotheken wie Requests, BeautifulSoup und Selenium.

Erforderliche Bibliotheken:

  • Anfragen: Zum Senden von HTTP-Anfragen.
  • BeautifulSoup: Zum Parsen des HTML-Inhalts.
  • Selenium: Zur Simulation von Benutzerinteraktionen wie Schaltflächenklicks in einem Browser.

Sie können diese Bibliotheken mit dem folgenden Befehl in Ihrem Terminal installieren:

pip install requests beautifulsoup4 selenium

Bevor Sie Selenium verwenden, müssen Sie einen zu Ihrem Browser passenden Webtreiber installieren. Für dieses Tutorial verwenden wir Google Chrome und ChromeDriver. Sie können jedoch ähnliche Schritte für andere Browser wie Firefox oder Edge ausführen.

Installieren Sie den Web-Treiber

  1. Überprüfen Sie Ihre Browserversion:
  2. Öffnen Sie Google Chrome und navigieren Sie zu Hilfe > Über Google Chrome aus dem Dreipunktmenü, um die Chrome-Version zu finden.

  3. ChromeDriver herunterladen:

  4. Besuchen Sie die ChromeDriver-Downloadseite.

  5. Laden Sie die Treiberversion herunter, die zu Ihrer Chrome-Version passt.

  6. ChromeDriver zu Ihrem Systempfad hinzufügen:
    Extrahieren Sie die heruntergeladene Datei und legen Sie sie in einem Verzeichnis wie /usr/local/bin (Mac/Linux) oder C:WindowsSystem32 (Windows) ab.

Installation überprüfen

Initialisieren Sie eine Python-Datei scraper.py in Ihrem Projektverzeichnis und testen Sie, ob alles korrekt eingerichtet ist, indem Sie den folgenden Codeausschnitt ausführen:

from selenium import webdriver
driver = webdriver.Chrome() # Ensure ChromeDriver is installed and in PATH
driver.get("https://www.scrapingcourse.com/button-click")
print(driver.title)
driver.quit()

Sie können den obigen Dateicode ausführen, indem Sie den folgenden Befehl auf Ihrem Terminal ausführen:

pip install requests beautifulsoup4 selenium

Wenn der obige Code fehlerfrei läuft, öffnet er eine Browseroberfläche und öffnet die URL der Demoseite wie unten gezeigt:

Demo Page in Selenium Browser Instance

Selenium extrahiert dann den HTML-Code und druckt den Seitentitel. Sie werden eine Ausgabe wie diese sehen -

from selenium import webdriver
driver = webdriver.Chrome() # Ensure ChromeDriver is installed and in PATH
driver.get("https://www.scrapingcourse.com/button-click")
print(driver.title)
driver.quit()

Dadurch wird bestätigt, dass Selenium einsatzbereit ist. Wenn alle Anforderungen installiert und einsatzbereit sind, können Sie mit dem Zugriff auf den Inhalt der Demoseite beginnen.

Schritt 2: Erhalten Sie Zugriff auf den Inhalt

Der erste Schritt besteht darin, den ursprünglichen Inhalt der Seite abzurufen, wodurch Sie eine grundlegende Momentaufnahme des HTML-Codes der Seite erhalten. Dies hilft Ihnen, die Konnektivität zu überprüfen und einen gültigen Ausgangspunkt für den Scraping-Prozess sicherzustellen.

Sie rufen den HTML-Inhalt der Seiten-URL ab, indem Sie eine GET-Anfrage mithilfe der Requests-Bibliothek in Python senden. Hier ist der Code:

python scraper.py

Der obige Code gibt den rohen HTML-Code aus, der die Daten für die ersten 12 Produkte enthält.

Diese schnelle Vorschau des HTML stellt sicher, dass die Anfrage erfolgreich war und Sie mit gültigen Daten arbeiten.

Schritt 3: Weitere Produkte laden

Um auf die verbleibenden Produkte zuzugreifen, müssen Sie auf der Seite programmgesteuert auf die Schaltfläche „Mehr laden“ klicken, bis keine Produkte mehr verfügbar sind. Da diese Interaktion JavaScript beinhaltet, verwenden Sie Selenium, um den Klick auf die Schaltfläche zu simulieren.

Bevor wir Code schreiben, überprüfen wir die Seite, um Folgendes zu finden:

  • Die „Mehr laden“-Schaltflächenauswahl (load-more-btn).
  • Das Div, das die Produktdetails enthält (Produktelement).

Sie erhalten alle Produkte, indem Sie weitere Produkte laden. Dadurch erhalten Sie einen größeren Datensatz, indem Sie den folgenden Code ausführen:

Load More Button Challenge to Learn Web Scraping - ScrapingCourse.com

Dieser Code öffnet den Browser, navigiert zur Seite und interagiert mit der Schaltfläche „Mehr laden“. Anschließend wird der aktualisierte HTML-Code extrahiert, der nun mehr Produktdaten enthält.

Wenn Sie nicht möchten, dass Selenium den Browser jedes Mal öffnet, wenn Sie diesen Code ausführen, bietet es auch Headless-Browser-Funktionen. Ein Headless-Browser verfügt über alle Funktionen eines echten Webbrowsers, jedoch über keine grafische Benutzeroberfläche (GUI).

Sie können den Headless-Modus für Chrome in Selenium aktivieren, indem Sie ein ChromeOptions-Objekt definieren und es wie folgt an den WebDriver Chrome-Konstruktor übergeben:

import requests
# URL of the demo page with products
url = "https://www.scrapingcourse.com/button-click"
# Send a GET request to the URL
response = requests.get(url)
# Check if the request was successful
if response.status_code == 200:
    html_content = response.text
    print(html_content) # Optional: Preview the HTML
else:
    print(f"Failed to retrieve content: {response.status_code}")

Wenn Sie den obigen Code ausführen, startet Selenium eine Headless-Chrome-Instanz, sodass Sie kein Chrome-Fenster mehr sehen. Dies ist ideal für Produktionsumgebungen, in denen Sie keine Ressourcen auf der GUI verschwenden möchten, wenn Sie das Scraping-Skript auf einem Server ausführen.

Da nun der vollständige HTML-Inhalt abgerufen ist, ist es an der Zeit, spezifische Details zu jedem Produkt zu extrahieren.

Schritt 4: Produktinformationen analysieren

In diesem Schritt verwenden Sie BeautifulSoup, um den HTML-Code zu analysieren und Produktelemente zu identifizieren. Anschließend extrahieren Sie wichtige Details für jedes Produkt, wie Name, Preis und Links.

pip install requests beautifulsoup4 selenium

In der Ausgabe sollten Sie eine strukturierte Liste mit Produktdetails sehen, einschließlich Name, Bild-URL, Preis und Link zur Produktseite, etwa so -

from selenium import webdriver
driver = webdriver.Chrome() # Ensure ChromeDriver is installed and in PATH
driver.get("https://www.scrapingcourse.com/button-click")
print(driver.title)
driver.quit()

Der obige Code organisiert die rohen HTML-Daten in einem strukturierten Format, was die Arbeit mit den Ausgabedaten erleichtert und sie für die weitere Verarbeitung vorbereitet.

Schritt 5: Produktinformationen in CSV exportieren

Sie können die extrahierten Daten jetzt in einer CSV-Datei organisieren, was die Analyse oder Weitergabe erleichtert. Dabei hilft das CSV-Modul von Python.

python scraper.py

Der obige Code erstellt eine neue CSV-Datei mit allen erforderlichen Produktdetails.

Hier ist der vollständige Code für eine Übersicht:

Load More Button Challenge to Learn Web Scraping - ScrapingCourse.com

Der obige Code erstellt eine products.csv-Datei, die so aussehen würde:

import requests
# URL of the demo page with products
url = "https://www.scrapingcourse.com/button-click"
# Send a GET request to the URL
response = requests.get(url)
# Check if the request was successful
if response.status_code == 200:
    html_content = response.text
    print(html_content) # Optional: Preview the HTML
else:
    print(f"Failed to retrieve content: {response.status_code}")

Schritt 6: Erhalten Sie zusätzliche Daten für Top-Produkte

Angenommen, Sie möchten die fünf teuersten Produkte identifizieren und zusätzliche Daten (z. B. Produktbeschreibung und SKU-Code) aus ihren einzelnen Seiten extrahieren. Sie können dies mit dem Code wie folgt tun:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
# Set up the WebDriver (make sure you have the appropriate driver installed, e.g., ChromeDriver)
driver = webdriver.Chrome()
# Open the page
driver.get("https://www.scrapingcourse.com/button-click")
# Loop to click the "Load More" button until there are no more products
while True:
    try:
        # Find the "Load more" button by its ID and click it
        load_more_button = driver.find_element(By.ID, "load-more-btn")
        load_more_button.click()
        # Wait for the content to load (adjust time as necessary)
        time.sleep(2)
    except Exception as e:
        # If no "Load More" button is found (end of products), break out of the loop
        print("No more products to load.")
        break
# Get the updated page content after all products are loaded
html_content = driver.page_source
# Close the browser window
driver.quit()

Hier ist der vollständige Code für eine Übersicht:

from selenium import webdriver
from selenium.webdriver.common.by import By

import time

# instantiate a Chrome options object
options = webdriver.ChromeOptions()

# set the options to use Chrome in headless mode
options.add_argument("--headless=new")

# initialize an instance of the Chrome driver (browser) in headless mode
driver = webdriver.Chrome(options=options)

...

Dieser Code sortiert die Produkte nach Preis in absteigender Reihenfolge. Dann öffnet das Skript für die fünf teuersten Produkte deren Produktseiten und extrahiert die Produktbeschreibung und SKU mit BeautifulSoup.

Die Ausgabe des obigen Codes sieht folgendermaßen aus:

from bs4 import BeautifulSoup
# Parse the page content with BeautifulSoup
soup = BeautifulSoup(html_content, 'html.parser')
# Extract product details
products = []
# Find all product items in the grid
product_items = soup.find_all('div', class_='product-item')
for product in product_items:
    # Extract the product name
    name = product.find('span', class_='product-name').get_text(strip=True)

    # Extract the product price
    price = product.find('span', class_='product-price').get_text(strip=True)

    # Extract the product link
    link = product.find('a')['href']

    # Extract the image URL
    image_url = product.find('img')['src']

    # Create a dictionary with the product details
    products.append({
        'name': name,
        'price': price,
        'link': link,
        'image_url': image_url
})
# Print the extracted product details
for product in products[:2]:
    print(f"Name: {product['name']}")
    print(f"Price: {product['price']}")
    print(f"Link: {product['link']}")
    print(f"Image URL: {product['image_url']}")
    print('-' * 30)

Der obige Code aktualisiert die Datei „products.csv“ und enthält nun Informationen wie diese:

Name: Chaz Kangeroo Hoodie
Price: 
Link: https://scrapingcourse.com/ecommerce/product/chaz-kangeroo-hoodie
Image URL: https://scrapingcourse.com/ecommerce/wp-content/uploads/2024/03/mh01-gray_main.jpg
------------------------------
Name: Teton Pullover Hoodie
Price: 
Link: https://scrapingcourse.com/ecommerce/product/teton-pullover-hoodie
Image URL: https://scrapingcourse.com/ecommerce/wp-content/uploads/2024/03/mh02-black_main.jpg
------------------------------
…

Abschluss

Das Scrapen von Seiten mit unendlichem Scrollen oder „Mehr laden“-Schaltflächen kann schwierig erscheinen, aber die Verwendung von Tools wie Requests, Selenium und BeautifulSoup vereinfacht den Prozess.

In diesem Tutorial wurde gezeigt, wie Produktdaten von einer Demoseite abgerufen und verarbeitet und in einem strukturierten Format für einen schnellen und einfachen Zugriff gespeichert werden.

Alle Codeausschnitte finden Sie hier.

Das obige ist der detaillierte Inhalt vonScraping von unendlich scrollbaren Seiten mit der Schaltfläche „Mehr laden': Eine Schritt-für-Schritt-Anleitung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn