Heim > Backend-Entwicklung > Python-Tutorial > So erstellen Sie mit ZenRows Web Scraper einen Produkt-Scraper für Infinite-Scroll-Websites

So erstellen Sie mit ZenRows Web Scraper einen Produkt-Scraper für Infinite-Scroll-Websites

Patricia Arquette
Freigeben: 2024-11-22 15:17:19
Original
754 Leute haben es durchsucht

How to Build a Product Scraper for Infinite Scroll Websites using ZenRows Web Scraper

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.

Voraussetzungen

Um diesem Tutorial folgen zu können, benötigen Sie Folgendes:

  • Python: Sie sollten Python auf Ihrem Computer eingerichtet haben. Wenn nicht, können Sie es hier installieren.
  • Web Scraping Foundation: Sie sollten ein solides Verständnis dafür haben, wie Web Scraping funktioniert.
  • ZenRows SDK: Sie nutzen den ZenRows-Dienst, um Anti-Scraping-Maßnahmen zu umgehen und das Scraping dynamischer Inhalte zu vereinfachen. Sie können sich hier für ein kostenloses ZenRows-Konto anmelden.

Zugriff auf den Inhalt erhalten

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
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Einrichten Ihrer API

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"
}

Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

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
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

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.

Weitere Produkte werden geladen

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
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

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"
}

Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

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
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Parsen in eine CSV-Datei

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.

Ändern des Skripts zum Speichern von Daten

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
Nach dem Login kopieren

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

Nach dem Login kopieren

Identifizieren der 5 teuersten Produkte

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}")
Nach dem Login kopieren

Jetzt können Sie nach dem Scrapen die Produkte mit dem höchsten Preis identifizieren:

pip install zenrows python-dotenv
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Nachdem Sie die zusätzlichen Informationen abgerufen haben, können Sie entweder die CSV-Datei ändern oder eine neue mit diesen Details erstellen.

Der vollständige Code

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"
}

Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

So würde eine erfolgreiche Antwort aussehen.

python app.py
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Sehen Sie sich die vollständige Codebasis auf GitHub an.

Abschluss

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.

  • So analysieren Sie HTML mit PHP
  • So verwenden Sie Hrequests für Web Scraping
  • So verwenden Sie Dramatiker in Ruby Hier ist ein kurzes Video über einen No-Code-Ansatz zur Verwendung der Web-Scraping-Tools von Zenrows.

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!

Quelle:dev.to
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage