Im Bereich Web Scraping kann der Zugriff auf und das Extrahieren von Daten von Webseiten, die unendliches Scrollen verwenden, eine Herausforderung für Entwickler sein. Viele Websites verwenden diese Technik, um mehr Inhalte dynamisch zu laden, was es schwierig macht, alle verfügbaren Daten auf einmal zu erfassen. Eine gute Lösung besteht darin, Benutzeraktionen zu simulieren, wie etwa das Klicken auf die Schaltfläche „Mehr laden“, um zusätzliche Inhalte anzuzeigen.
Dieses Tutorial befasst sich mit dem Scraping von Produktdaten von einer Seite mit unendlichem Scrollen. Mithilfe des Open-Source-Web-Scraper von Zenrows erstellen Sie einen Scraper-Bot, der auf Inhalte einer Webseite zugreift, und Sie verwenden Zenrows, um weitere Produkte zu generieren Sie können die Seite durch Klicken auf die Schaltfläche „Mehr laden“ aufrufen, um ein endloses Scrollen zu simulieren.
Um diesem Tutorial folgen zu können, benötigen Sie Folgendes:
Sobald Sie sich für Ihr Zenrows-Konto angemeldet haben und die Voraussetzungen erfüllt sind, besteht der nächste Schritt darin, über die Webseite auf den Inhalt zuzugreifen. Für dieses Tutorial verwenden Sie diese Seite https://www.scrapingcourse.com/button-click.
Sie verwenden außerdem das ZenRows SDK zum Scrapen der dynamischen Seiten und zur Verwaltung verschiedener Rendering- und Anti-Bot-Maßnahmen. Lassen Sie uns loslegen:
Installieren Sie die erforderlichen Bibliotheken:
Öffnen Sie das Terminal Ihrer bevorzugten IDE und führen Sie den Code aus, um das ZenRows Python SDK zu installieren.
pip install zenrows python-dotenv
Gehen Sie zu Ihrem Dashboard und kopieren Sie den API-Schlüssel in die obere rechte Ecke Ihres Bildschirms, wie im Bild unten.
Als nächstes erstellen Sie die Seiten app.py und .env und fügen dann den folgenden Code zu Ihrer app.py-Datei hinzu. Und fügen Sie Ihren API-Schlüssel zur Variablen API_KEY in Ihrer .env-Datei hinzu.
# Import ZenRows SDK from zenrows import ZenRowsClient from dotenv import load_dotenv import os # Load environment variables load_dotenv() # Initialize ZenRows client with your API key client = ZenRowsClient(os.getenv("API_KEY")) # URL of the page you want to scrape url = "https://www.scrapingcourse.com/button-click" # Set up initial parameters for JavaScript rendering and interaction base_params = { "js_render": "true", "json_response": "true", "premium_proxy": "true", "markdown_response": "true" }
Der obige Code initiiert das Zenrow SDK mithilfe Ihres API-Schlüssels. Es richtet die URL-Variable für die Webseite ein, die Sie durchsuchen möchten, und richtet die Variable base_params für die erforderlichen Parameter ein. Sie können den Scraper mit dem Befehl ausführen:
python app.py
Dadurch erhalten Sie die HTML-Darstellung der Seite, die nur die Produkte auf der aktuellen Seite enthält.
.
Sie können immer noch einen Schritt weiter gehen.
Um Ihren Scraper zu verbessern, können Sie zusätzliche Parameter implementieren, um mit der Schaltfläche „Mehr laden“ unten auf der Webseite zu interagieren und weitere Produkte zu laden.
Ändern Sie zunächst Ihre Importe, um die erforderlichen Pakete einzuschließen, und fügen Sie eine parse_products-Funktion hinzu, die die Produktantwort filtert:
pip install zenrows python-dotenv
Als nächstes erstellen Sie eine While-Schleife, um kontinuierlich Produktinformationen von mehreren Seiten bis zu einem bestimmten Limit (max_products) zu extrahieren. Setzen Sie das Limit für dieses Tutorial auf 50:
# Import ZenRows SDK from zenrows import ZenRowsClient from dotenv import load_dotenv import os # Load environment variables load_dotenv() # Initialize ZenRows client with your API key client = ZenRowsClient(os.getenv("API_KEY")) # URL of the page you want to scrape url = "https://www.scrapingcourse.com/button-click" # Set up initial parameters for JavaScript rendering and interaction base_params = { "js_render": "true", "json_response": "true", "premium_proxy": "true", "markdown_response": "true" }
Diese Schleife verschrottet weiterhin Produkte, indem sie das Klicken auf die Schaltfläche „Mehr laden“ simuliert, bis das angegebene Limit erreicht ist.
Produktinformationen analysieren
Abschließend können Sie die Produktinformationen analysieren, die Sie im vorherigen Schritt erfasst haben. Extrahieren Sie für jedes Produkt den Produktnamen, den Bildlink, den Preis und die URL der Produktseite. Sie können auch den Gesamtpreis aller Produkte berechnen und die Ergebnisse wie folgt ausdrucken:
python app.py
Wenn Sie Ihre Antwort lieber in eine exportierte CSV-Datei analysieren möchten, erfahren Sie in den nächsten Schritten, wie Sie die Produktinformationen, die Sie geschabt haben, in eine CSV-Datei exportieren.
Zuerst müssen Sie das integrierte CSV-Modul von Python verwenden, um die Produktdaten zu speichern. In diesem Fall hat jedes Produkt vier Hauptattribute: Name, Bildlink, Preis und Produkt-URL.
Sie können sie als Kopfzeilen für Ihre CSV-Datei verwenden, die Liste der gelöschten Produkte durchlaufen und dann jedes Produkt als Zeile in die CSV-Datei schreiben.
import re import json import time def parse_products(response_json): try: data = json.loads(response_json) md_content = data.get('md', '') pattern = r'\[!\[([^\]]+)\]\(([^\)]+)\)\*\n([^\\n]+)\*\n\*\n$(\d+)\]\(([^\)]+)\)' matches = re.findall(pattern, md_content) products = [] for match in matches: product = { 'name': match[0], 'image_link': match[1], 'price': int(match[3]), 'product_url': match[4] } products.append(product) return products except json.JSONDecodeError: print("Error: Unable to parse JSON response") print("Response content:", response_json[:500]) return [] except Exception as e: print(f"Error parsing products: {str(e)}") return [] # Zenrow SDK code here
Nachdem Sie die Daten gelöscht haben, rufen Sie einfach die Funktion „save_to_csv(all_products)“ auf, um die Daten in einer CSV-Datei mit dem Namen „products.csv“ zu speichern.
Führen Sie den Befehl aus, um die Daten automatisch in einer CSV-Datei zu speichern, sobald der Scraping-Vorgang abgeschlossen ist.
# Zenrow SDK code goes here max_products = 50 all_products = [] page = 1 while len(all_products) < max_products: print(f"Scraping page {page}...") # Update parameters for each request params = base_params.copy() js_instructions = [{"click": "#load-more-btn"} for _ in range(page)] js_instructions.append({"wait": 5000}) params["js_instructions"] = json.dumps(js_instructions) try: # Send the GET request to ZenRows response = client.get(url, params=params) # Parse the response JSON new_products = parse_products(response.text) if not new_products: print("No more products found. Stopping.") break all_products.extend(new_products) print(f"Found {len(new_products)} products on this page.") print(f"Total products so far: {len(all_products)}") page += 1 # Add a delay to avoid overwhelming the server time.sleep(2) except Exception as e: print(f"Error occurred: {str(e)}") break
Da Sie nun alle Produkte in einem strukturierten Format haben, können Sie einen Schritt weiter gehen und die 5 Produkte mit dem höchsten Preis identifizieren. Außerdem müssen Sie jede Produktseite besuchen, um zusätzliche Details wie die Produktbeschreibung und die Artikelnummer zu extrahieren Code.
Sortieren der Produkte nach Preis: Mit der Funktion sorted() von Python können Sie die Produktliste in absteigender Reihenfolge nach dem Preis sortieren und die Top-5-Produkte abrufen.
Sie müssen jede Seite mit der Funktion „requests.get()“ besuchen, um die Produktdaten für jede Seite abzurufen. Aus der Antwort können Sie die Produktbeschreibung und den SKU-Code extrahieren.
Sie können auch die CSV-Datei aus dem letzten Schritt aktualisieren, um die zusätzlichen Details aufzunehmen.
Hier ist der Code, um das zu erreichen:
# Updated Params and while loop code goes here # Calculate the total price of all products total_sum = sum(product['price'] for product in all_products) print("\nAll products:") for product in all_products: print(product) # Print the total sum of the product prices print(f"\nTotal number of products: {len(all_products)}") print(f"Total sum of product prices: ${total_sum}")
Jetzt können Sie nach dem Scrapen die Produkte mit dem höchsten Preis identifizieren:
pip install zenrows python-dotenv
Nachdem Sie die zusätzlichen Informationen abgerufen haben, können Sie entweder die CSV-Datei ändern oder eine neue mit diesen Details erstellen.
So sollte Ihre vollständige app.py-Datei aussehen.
# Import ZenRows SDK from zenrows import ZenRowsClient from dotenv import load_dotenv import os # Load environment variables load_dotenv() # Initialize ZenRows client with your API key client = ZenRowsClient(os.getenv("API_KEY")) # URL of the page you want to scrape url = "https://www.scrapingcourse.com/button-click" # Set up initial parameters for JavaScript rendering and interaction base_params = { "js_render": "true", "json_response": "true", "premium_proxy": "true", "markdown_response": "true" }
So würde eine erfolgreiche Antwort aussehen.
python app.py
Sehen Sie sich die vollständige Codebasis auf GitHub an.
In diesem Tutorial haben Sie gelernt, wie Sie mithilfe der Schaltfläche „Mehr laden“ Produkte mit unendlichem Scrollen von einer Webseite entfernen. Indem Sie die beschriebenen Schritte befolgen, können Sie wertvolle Produktinformationen extrahieren und Ihre Schabetechniken mit ZenRows verbessern.
Um mehr darüber zu erfahren, wie Sie die Web-Scraping-Tools von Zenrow verwenden können, lesen Sie die folgenden Artikel in unserem Blog.
Das obige ist der detaillierte Inhalt vonSo erstellen Sie mit ZenRows Web Scraper einen Produkt-Scraper für Infinite-Scroll-Websites. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!