Heim >Backend-Entwicklung >Python-Tutorial >Scraping von unendlich scrollbaren Seiten mit der Schaltfläche „Mehr laden': Eine Schritt-für-Schritt-Anleitung
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:
Am Ende erfahren Sie, wie Sie:
Lass uns eintauchen!
Stellen Sie vor dem Eintauchen folgende Voraussetzungen sicher:
Erforderliche Bibliotheken:
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
Öffnen Sie Google Chrome und navigieren Sie zu Hilfe > Über Google Chrome aus dem Dreipunktmenü, um die Chrome-Version zu finden.
ChromeDriver herunterladen:
Besuchen Sie die ChromeDriver-Downloadseite.
Laden Sie die Treiberversion herunter, die zu Ihrer Chrome-Version passt.
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:
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.
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.
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:
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.
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.
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}")
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 ------------------------------ …
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!