Office Depot ist einer der größten Büroartikeleinzelhändler in den Vereinigten Staaten. Das Unternehmen betreibt mehr als 1.400 Filialen, beschäftigt über 38.000 Mitarbeiter und besitzt neben seinem Hauptsortiment an Stühlen, Schreibtischen, Schreibwaren, Druckern und Schulbedarf die Marken OfficeMax und Grand & Toy. Sein öffentliches Schaufenster listet Preise, Bewertungen, Rezensionsanzahlen und Lagerstatus für Tausende von SKUs auf, was es zu einer nützlichen Quelle für die Verfolgung von Wettbewerberpreisen, Sortimentsrecherchen und Bestandsüberwachung macht.

Diese Anleitung zeigt Ihnen, wie Sie Office Depot scrapen können, und zwar mit Python auf zuverlässige Weise. Sie bauen einen kleinen, lauffähigen Scraper, der eine gerenderte Produktseite über die Crawling API abruft, sie mit BeautifulSoup parst und für jedes Produkt einen sauberen Datensatz extrahiert: Produktname, Preis, SKU oder Modellnummer, Bewertung, Rezensionsanzahl, Verfügbarkeit und die Produkt-URL. Die gesamte Anleitung beschränkt sich auf öffentliche Katalogdaten, und der Abschnitt zur Rechtslage am Ende ist kein Boilerplate, also lesen Sie ihn, bevor Sie dies auf ein echtes Volumen anwenden.

Was Sie bauen werden

Ein Python-Skript, das eine Office Depot-Produkt-URL nimmt, die gerenderte Seite über die Crawling API abruft und einen strukturierten Datensatz extrahiert. Wir verwenden den Epson Expression Home XP-4200 Wireless-Drucker als laufendes Beispiel und extrahieren diese Felder:

  • Produktname der Listentitel, zum Beispiel "Epson Expression Home XP-4200 Wireless Color Inkjet All-In-One Printer".
  • Preis der auf der Seite angezeigte Listenpreis.
  • SKU / Modell die Artikelnummer, die das Produkt im Katalog von Office Depot identifiziert.
  • Bewertung die durchschnittliche Sternebewertung, wenn das Produkt eine hat.
  • Rezensionsanzahl die Anzahl der Kundenrezensionen hinter dieser Bewertung.
  • Verfügbarkeit ob der Artikel als vorrätig oder nicht vorrätig angezeigt wird.
  • Produkt-URL der kanonische Link zur Detailseite des Produkts.

Warum eine einfache Anfrage bei Office Depot scheitert

Wenn Sie eine Office Depot-URL mit einem einfachen HTTP-Client anfordern, erhalten Sie in der Regel eine Antwort mit Status 200, aber kaum Produktdaten im Body. Zwei Dinge arbeiten gegen Sie. Erstens baut die Website einen Großteil ihrer Produkt- und Preisinhalte clientseitig auf: Der Preisblock und mehrere andere Felder werden per JavaScript befüllt, nachdem das anfängliche HTML geladen wurde, sodass ein einfacher Abruf Platzhalter statt Werte sieht. Zweitens kennzeichnet Office Depot automatisierten Datenverkehr. Datacenter-IPs und Anfragemuster, die nicht wie ein echter Browser aussehen, werden mit einem CAPTCHA herausgefordert, ratenbegrenzt oder blockiert, bevor sie die fertige Seite erreichen.

Ein funktionierender Office Depot-Scraper benötigt daher zwei Dinge in einer Anfrage: einen Browser, der die Seite tatsächlich rendert, und eine IP, die die Plattform als echten Käufer liest. Sie können das selbst mit einem Headless-Browser plus einem Pool rotierender residentieller Proxys zusammenstellen, aber das Gesundhalten dieses Stacks ist der größte Teil der Arbeit. Die Crawling API faltet beides in einen einzigen Aufruf: Sie senden ihr die URL mit einem JavaScript-Token, sie rendert die Seite hinter einer vertrauenswürdigen residentiellen IP und gibt fertiges HTML zum Parsen zurück. Mehr darüber, warum clientseitig gerenderte Seiten einen einfachen Abruf überlisten, erfahren Sie unter wie man JavaScript-Websites crawlt.

Warum das JS-Token

Crawlbase bietet zwei Token-Typen an. Das normale Token ruft statisches HTML ab; das JavaScript (JS)-Token rendert die Seite zuerst in einem echten Browser. Office Depot befüllt seinen Preis und mehrere Felder clientseitig, daher möchten Sie hier das JS-Token. Das normale Token gibt die vorgerenderte Shell zurück, die den Preis und die Lagerfelder leer lässt, wenn BeautifulSoup nach ihnen sucht.

Voraussetzungen

Vor dem Schreiben von Code müssen einige Dinge eingerichtet sein. Keines davon dauert lange.

Grundlegendes Python. Sie sollten damit vertraut sein, ein Python-Skript zu schreiben und auszuführen sowie Pakete mit pip zu installieren. Wenn Sie neu in der Sprache sind, deckt unser Leitfaden zu Web-Scraping mit Python die Grundlagen ab, die dieses Tutorial voraussetzt.

Python 3.8 oder höher. Bestätigen Sie Ihre Version mit python --version. Falls Sie es nicht haben, installieren Sie es von python.org oder über eine Distribution wie Anaconda.

Ein Crawlbase-Konto und JS-Token. Registrieren Sie sich, öffnen Sie Ihr Dashboard und kopieren Sie Ihr JavaScript (JS)-Token von der Konto-Docs-Seite. Behandeln Sie das Token wie ein Passwort: Es authentifiziert Ihre Anfragen, halten Sie es daher aus der Versionskontrolle heraus.

Projekt einrichten

Erstellen Sie eine virtuelle Umgebung, damit Projektabhängigkeiten isoliert bleiben, und installieren Sie dann die Bibliotheken, die der Scraper benötigt.

bash
python --version

python -m venv office_depot_env
source office_depot_env/bin/activate

pip install crawlbase beautifulsoup4 pandas

Aktivieren Sie unter Windows die Umgebung mit office_depot_env\Scripts\activate anstelle der source-Zeile. Drei Abhängigkeiten erledigen die Arbeit: crawlbase ist der offizielle Client für die Crawling API, beautifulsoup4 parst das zurückgegebene HTML, sodass Sie jedes Feld per CSS-Selektor herausziehen können, und pandas schreibt die Datensätze am Ende als CSV.

Die Office Depot-Produktseite verstehen

Eine Office Depot-Produktseite bietet dieselbe Handvoll Felder, die Sie interessieren: einen Titel in einer Überschrift, einen Preis in einem dedizierten Preiselement, eine Artikelnummer, die als SKU dient, eine Sternebewertung mit einer Rezensionsanzahl und eine Liefermeldung, die Ihnen angibt, ob der Artikel vorrätig ist. Darunter befinden sich eine Beschreibung und eine Spezifikationstabelle.

Öffnen Sie vor dem Schreiben von Selektoren eine Produktseite in Ihrem Browser, klicken Sie mit der rechten Maustaste auf den Titel und wählen Sie Untersuchen. Office Depot setzt die meisten seiner Klassennamen mit od- ab, zum Beispiel od-heading für den Titel und od-graphql-price-big-price für den Preis. Diese Klassennamen sind Ihre Ziele. Sie ändern sich von Zeit zu Zeit, also behandeln Sie die nachstehenden Selektoren als aktuellen Schnappschuss und nicht als dauerhaften Vertrag.

Schritt 1: Die gerenderte Produktseite abrufen

Beginnen Sie damit, die fertige Seite zu holen. Importieren Sie die Klasse CrawlingAPI, initialisieren Sie sie mit Ihrem JS-Token und fordern Sie die Produkt-URL an. Die Statuscode-Prüfung vor dem Parsen sorgt dafür, dass Fehler laut statt still bleiben.

python
from crawlbase import CrawlingAPI

api = CrawlingAPI({"token": "YOUR_CRAWLBASE_JS_TOKEN"})

def crawl(page_url):
    options = {"ajax_wait": "true", "page_wait": 5000}
    response = api.get(page_url, options)
    if response["status_code"] == 200:
        return response["body"].decode("utf-8")
    print(f"Request failed: {response['status_code']}")
    return None

if __name__ == "__main__":
    url = "https://www.officedepot.com/a/products/8761287/Epson-Expression-Home-XP-4200-Wireless/"
    html = crawl(url)
    print(html[:500] if html else "No HTML returned")

Die beiden Warteopionen sind bei einem clientseitig gerenderten Ziel wie diesem wichtig. ajax_wait weist die API an, auf das Fertigladen asynchroner Inhalte zu warten, und page_wait hält eine festgelegte Anzahl von Millisekunden nach dem Laden an, damit die spät rendernden Preis- und Lagerfelder erscheinen, bevor die Seite erfasst wird. Fünf Sekunden sind ein vernünftiger Ausgangspunkt; erhöhen Sie den Wert, wenn Felder leer zurückkommen. Führen Sie das Skript aus, und Sie sollten echtes Produkt-Markup sehen, nicht die vorgerenderte Shell, die ein einfacher Abruf zurückgibt. Das bestätigt, dass das Rendering funktioniert, bevor Sie einen einzigen Selektor schreiben.

Crawlbase Crawling API

Office Depot benötigt eine gerenderte Seite hinter einer vertrauenswürdigen IP, in einem Aufruf, damit die Preis- und Lagerfelder tatsächlich vorhanden sind, wenn Sie parsen. Die Crawling API nimmt ein JS-Token, führt die Seite in einem echten Browser aus, rotiert serverseitig durch residentielle IPs und übergibt Ihnen fertiges HTML, sodass Sie selbst keine Headless-Flotte und keinen Proxy-Pool betreiben müssen. Richten Sie es zunächst auf eine einzelne Produkt-URL im kostenlosen Tarif.

Schritt 2: Die Felder mit BeautifulSoup parsen

Mit gerendertem HTML laden Sie es in BeautifulSoup und ziehen jedes Feld per Selektor heraus. Office Depot bietet den Titel in h1.od-heading.sku-heading, den Preis in span.od-graphql-price-big-price und die Liefermeldung in span.od-delivery-message-text. Ein kleiner Helfer, der einen Fallback zurückgibt, wenn ein Element fehlt, verhindert, dass die Extraktion bei einem auf einer bestimmten Seite fehlenden Feld abstürzt.

python
from bs4 import BeautifulSoup

def text_of(soup, selector, default="N/A"):
    el = soup.select_one(selector)
    return el.get_text(strip=True) if el else default

def parse_rating(soup):
    el = soup.select_one(".od-stars-inner")
    if not el or not el.get("style"):
        return None
    # style is like "width: 86%"; map percent of 5 stars
    percent = el["style"].split(":")[-1].strip().rstrip("%")
    try:
        return round(float(percent) / 20, 1)
    except ValueError:
        return None

def extract_product(html, url):
    soup = BeautifulSoup(html, "html.parser")
    reviews = text_of(soup, ".od-reviews-count-number").strip("()")
    sku = text_of(soup, ".od-product-card-region-product-number").split("#")[-1]
    delivery = text_of(soup, "span.od-delivery-message-text", "").lower()
    availability = "In Stock" if "in stock" in delivery else "Out of Stock"
    return {
        "name": text_of(soup, "h1.od-heading.sku-heading"),
        "price": text_of(soup, "span.od-graphql-price-big-price"),
        "sku": sku,
        "rating": parse_rating(soup),
        "review_count": reviews,
        "availability": availability,
        "product_url": url,
    }

Der text_of-Helfer gibt einen Fallback zurück, wenn ein Element fehlt, anstatt bei einem .get_text()-Aufruf auf nichts zu werfen. Die SKU kommt aus .od-product-card-region-product-number, aufgeteilt am #, sodass Sie nur die Artikelnummer behalten. Office Depot kodiert die Sternebewertung als CSS-Breiten-Prozentsatz auf .od-stars-inner, daher liest parse_rating diesen Prozentsatz und dividiert durch 20, um einen Wert aus fünf zu erhalten. Die Rezensionsanzahl liegt in .od-reviews-count-number, umhüllt von Klammern, die strip("()") entfernt, und die Verfügbarkeit wird aus dem Text der Liefermeldung abgeleitet. Für eine Auffrischung zum Auswählen von Elementen lesen Sie wie man BeautifulSoup in Python verwendet.

Eine Sache, die Sie erwarten sollten: Die od--Klassennamen von Office Depot (das Preiselement od-graphql-price-big-price, der Bewertungsbalken od-stars-inner) ändern sich ohne Ankündigung, und das Seitenlayout verschiebt sich gelegentlich ebenfalls. Behandeln Sie die obigen Selektoren als Ausgangspunkt, nicht als Vertrag. Wenn ein Feld als N/A oder None zurückkommt auf einer Seite, von der Sie wissen, dass sie den Wert hat, überprüfen Sie die Live-Seite in den Entwicklertools Ihres Browsers und aktualisieren Sie den Selektor. Regelmäßige Selektor-Wartung ist bei jedem Produktionsscraper normal, kein Zeichen für einen Defekt.

Schritt 3: Alles zusammenfügen

Verbinden Sie nun den Abruf, das Parsen und einen CSV-Schreibvorgang zu einem einzigen lauffähigen Skript. Holen Sie die gerenderte Seite, übergeben Sie sie an den Extraktor, drucken Sie den Datensatz und speichern Sie ihn mit pandas.

python
import json
import pandas as pd
from crawlbase import CrawlingAPI
from bs4 import BeautifulSoup

api = CrawlingAPI({"token": "YOUR_CRAWLBASE_JS_TOKEN"})

def crawl(page_url):
    options = {"ajax_wait": "true", "page_wait": 5000}
    response = api.get(page_url, options)
    if response["status_code"] == 200:
        return response["body"].decode("utf-8")
    print(f"Request failed: {response['status_code']}")
    return None

def text_of(soup, selector, default="N/A"):
    el = soup.select_one(selector)
    return el.get_text(strip=True) if el else default

def parse_rating(soup):
    el = soup.select_one(".od-stars-inner")
    if not el or not el.get("style"):
        return None
    percent = el["style"].split(":")[-1].strip().rstrip("%")
    try:
        return round(float(percent) / 20, 1)
    except ValueError:
        return None

def extract_product(html, url):
    soup = BeautifulSoup(html, "html.parser")
    reviews = text_of(soup, ".od-reviews-count-number").strip("()")
    sku = text_of(soup, ".od-product-card-region-product-number").split("#")[-1]
    delivery = text_of(soup, "span.od-delivery-message-text", "").lower()
    availability = "In Stock" if "in stock" in delivery else "Out of Stock"
    return {
        "name": text_of(soup, "h1.od-heading.sku-heading"),
        "price": text_of(soup, "span.od-graphql-price-big-price"),
        "sku": sku,
        "rating": parse_rating(soup),
        "review_count": reviews,
        "availability": availability,
        "product_url": url,
    }

def main():
    url = "https://www.officedepot.com/a/products/8761287/Epson-Expression-Home-XP-4200-Wireless/"
    html = crawl(url)
    if not html:
        return
    product = extract_product(html, url)
    print(json.dumps(product, indent=2))
    pd.DataFrame([product]).to_csv("office_depot_products.csv", index=False)
    print("Saved to office_depot_products.csv")

if __name__ == "__main__":
    main()

Wie die Ausgabe aussieht

Führen Sie das vollständige Skript mit python scraper.py aus und Sie erhalten einen sauberen Datensatz, bereit zum Schreiben in JSON, CSV oder eine Datenbank. Der JSON-Ausdruck sieht so aus:

json
{
  "name": "Epson Expression Home XP-4200 Wireless Color Inkjet All-In-One Printer",
  "price": "$99.99",
  "sku": "8761287",
  "rating": 4.3,
  "review_count": "512",
  "availability": "In Stock",
  "product_url": "https://www.officedepot.com/a/products/8761287/Epson-Expression-Home-XP-4200-Wireless/"
}

Auf eine Suchseite und Paginierung skalieren

Ein Produkt ist eine Demo; ein echter Job sammelt viele. Office Depot-Suchergebnisse zeigen ein Raster von Produktkarten, von denen jede einen Titel, einen Preis, eine Bewertung, eine Rezensionsanzahl, eine Artikelnummer und einen Link zur Produktseite enthält. Sie scrapen dieses Raster auf die gleiche Weise: Wählen Sie jede Karte aus, ziehen Sie dieselben Felder pro Karte heraus und folgen Sie dann den Links zu Produktseiten, wenn Sie die tieferen Details benötigen. Die Suche paginiert mit einem &page=-Parameter, also durchlaufen Sie die Seiten durch Inkrementierung und stoppen, wenn eine Seite keine Karten zurückgibt.

python
import time

def extract_cards(html):
    soup = BeautifulSoup(html, "html.parser")
    grid = ".od-search-browse-products-vertical-grid-product"
    products = []
    for card in soup.select(grid):
        link_el = card.select_one(".od-product-card-region-description a")
        href = link_el["href"] if link_el else ""
        products.append({
            "name": text_of(card, ".od-product-card-region-description a"),
            "price": text_of(card, ".od-graphql-price-big-price"),
            "review_count": text_of(card, ".od-reviews-count-number").strip("()"),
            "product_url": "https://www.officedepot.com" + href if href else "N/A",
        })
    return products

def scrape_all_pages(base_url, max_pages=5):
    all_products = []
    for page in range(1, max_pages + 1):
        html = crawl(f"{base_url}&page={page}")
        if not html:
            break
        products = extract_cards(html)
        if not products:
            break
        all_products.extend(products)
        print(f"Page {page}: {len(products)} products")
        time.sleep(2)
    return all_products

Die max_pages-Begrenzung hält einen Lauf begrenzt, damit eine breite Abfrage nicht endlos läuft, und der Abbruch bei leeren Ergebnissen stoppt Sie frühzeitig, wenn die Suche keine weiteren Seiten mehr hat. Das time.sleep(2) zwischen Seiten verteilt Anfragen, damit Sie die Suche nicht in einer engen Schleife bombardieren, was der schnellste Weg ist, gedrosselt zu werden. Mehr über die Strukturierung von mehrseitigen Retail-Crawls erfahren Sie in unserem Leitfaden zu E-Commerce-Web-Scraping.

Strukturierte Ausgabe bevorzugen?

Wenn Sie CSS-Selektoren gar nicht pflegen möchten, gibt die Crawling API mit Auto-Parse vorgefertigtes strukturiertes JSON für gängige E-Commerce-Seiten zurück, sodass Sie Felder wie Name, Preis und Bewertung erhalten, ohne Extraktionscode schreiben zu müssen. Sie ist gut geeignet, wenn Sie die Datenstruktur für Sie verwaltet haben möchten und der Selektordrift aufwärts behandelt wird.

Nicht blockiert bleiben

Auch wenn das Rendering übernommen wurde, überwacht Office Depot Datenverkehr mit Scraper-förmigen Mustern. Einige Gewohnheiten halten einen Lauf gesund, und sie gelten für jedes schwere kommerzielle Ziel.

  • Verteilen Sie Ihre Anfragen. Verteilen Sie Anfragen mit einer Verzögerung zwischen Seiten und variieren Sie Ihre Abfragen, anstatt einen Begriff mit voller Geschwindigkeit zu crawlen. Das time.sleep in der Paginierungsschleife ist der Boden, nicht die Decke.
  • Setzen Sie auf Rotation. Ein Pool residentieller IPs verteilt Anfragen auf viele echte Benutzeradressen, sodass keine einzelne ein Ratenlimit auslöst. Die Crawling API kümmert sich darum; wenn Sie Ihren eigenen Stack betreiben, ist das der Teil, den Sie richtig hinbekommen müssen.
  • Lesen Sie die Statuscodes. Ein Lauf, der beginnt, Herausforderungen oder Fehler zurückzugeben, teilt Ihnen mit, dass die aktuelle Rate oder IP-Ebene nicht mehr ausreicht. Behandeln Sie das als Signal zum Zurückziehen, nicht als Rauschen, das Sie ignorieren.

Das breite Playbook finden Sie unter wie man Websites scrapt, ohne blockiert zu werden. Wenn Sie Ihren eigenen Datenverkehr lieber durch einen rotierenden Pool leiten möchten, anstatt die verwaltete API zu verwenden, bietet der Smart AI Proxy (auch als AI Proxy bezeichnet) dieselbe residentielle IP-Rotation als Drop-in-Proxy-Endpunkt.

Ob das Scrapen von Office Depot erlaubt ist, hängt von den Nutzungsbedingungen von Office Depot, Ihrer Rechtsordnung und dem ab, was Sie mit den Daten tun. Die Bedingungen von Office Depot beschränken den automatisierten Zugriff, daher kann das Scrapen gegen diese Bedingungen verstoßen, unabhängig davon, wie sorgfältig Ihr Tooling ist. Keiner der hier gezeigten Codes ändert das; er macht nur den technischen Teil funktionstüchtig. Lesen Sie die Nutzungsbedingungen von Office Depot und seine robots.txt und behandeln Sie beide als Grenze für das, was Sie sammeln.

Einige Grundsätze, an die Sie sich halten sollten. Sammeln Sie nur öffentliche Katalogdaten: die Produktnamen, Preise, SKUs, Bewertungen, Rezensionsanzahlen, Verfügbarkeiten und Listing-Links, die jeder ohne ein Konto sehen kann. Halten Sie Ihr Anfragevolumen niedrig genug, dass Sie die Server von Office Depot nicht belasten. Vermeiden Sie personenbezogene Daten, einschließlich alles, was mit identifizierbaren Käufern, Rezensenten oder Filialmitarbeitern verbunden ist, und verteilen Sie keine urheberrechtlich geschützten Produktfotos oder -beschreibungen als ob sie Ihre eigenen wären. Das Scrapen für interne Forschung oder Preisvergleiche ist ein weit einfacherer Fall als das Scrapen, um den Katalog im Großen und Ganzen weiterzuveröffentlichen oder weiterzuverkaufen.

Diese Anleitung ist bewusst auf öffentliche Produkt- und Suchseiten beschränkt, weil das die Grenze ist, die die Arbeit vertretbar macht. Sie deckt nichts hinter einem Login, Konto- oder Bestelldaten, Zahlungs- oder Checkout-Abläufe oder Versuche ab, die Authentifizierung zu umgehen. Für lizenzierten oder volumenmäßigen Zugriff ist der richtige Weg ein offizieller Feed, eine API oder eine Datenvereinbarung mit Office Depot und nicht ein ausgefeilterer Scraper. Wenn Ihr Projekt garantierte Struktur, große Volumen oder kommerzielle Rechte benötigt, fragen Sie zuerst nach sanktioniertem Zugriff; ein verwaltetes Crawling-Tool übernimmt nur den Abruf, nicht die Erlaubnis zur Nutzung der Daten.

Zusammenfassung

Wichtigste Erkenntnisse

  • Office Depot befüllt wichtige Felder clientseitig. Ein einfacher Abruf gibt eine vorgerenderte Shell mit leerem Preis und Lager zurück, daher müssen Sie die Seite rendern, bevor Sie sie parsen.
  • Sie benötigen Rendering und eine vertrauenswürdige IP zusammen. Die Crawling API mit einem JS-Token erledigt beides in einem Aufruf; ajax_wait und page_wait steuern, wie lange sie auf die späten Felder wartet.
  • BeautifulSoup erledigt die Extraktion. Ordnen Sie Name, Preis, SKU, Bewertung, Rezensionsanzahl, Verfügbarkeit und die Produkt-URL den aktuellen od--Selektoren zu und erwarten Sie, dass diese Selektoren driften.
  • Skalieren Sie mit Suche und Paginierung. Durchlaufen Sie das Ergebniskartenraster, durchlaufen Sie &page=, bis eine Seite keine Karten zurückgibt, verteilen Sie Anfragen mit einer Verzögerung und begrenzen Sie die Seitenanzahl.
  • Bleiben Sie bei öffentlichen Daten. Respektieren Sie die Nutzungsbedingungen und robots.txt von Office Depot, bevorzugen Sie einen offiziellen Feed oder eine API für lizenzierte oder Massendaten und berühren Sie niemals Konten, Bestellungen oder personenbezogene Informationen.

Häufig gestellte Fragen

Warum gibt eine einfache Anfrage keinen Preis von Office Depot zurück?

Weil Office Depot seinen Preis und mehrere andere Felder clientseitig mit JavaScript befüllt. Das anfängliche HTML ist eine vorgerenderte Shell, sodass eine einfache HTTP-Anfrage Status 200 zurückgibt, aber die Preis- und Lagerfelder leer sind. Um echte Werte zu erhalten, müssen Sie die Seite zuerst rendern, was das JS-Token der Crawling API für Sie übernimmt.

Brauche ich das normale Token oder das JS-Token für Office Depot?

Das JS-Token. Das normale Token ruft statisches HTML ab, was bei Office Depot die Preis- und Verfügbarkeitsfelder leer lässt. Das JS-Token rendert die Seite in einem echten Browser, bevor es das HTML zurückgibt, sodass diese Felder vorhanden sind, wenn BeautifulSoup sie parst.

Welche Felder kann ich von einer Office Depot-Produktseite extrahieren?

Die öffentlichen, die auf der Seite angezeigt werden: Produktname, Preis, die Artikelnummer, die als SKU oder Modell dient, die Sternebewertung, die Rezensionsanzahl, die Verfügbarkeit und die kanonische Produkt-URL. Suchergebnis-Karten zeigen die meisten der gleichen Felder pro Listing, was ermöglicht, viele Produkte zu sammeln, bevor man in einzelne Seiten einsteigt.

Wie scrape ich jede Seite einer Office Depot-Suche?

Die Suche paginiert mit einem &page=-Parameter in der URL. Inkrementieren Sie ihn in einer Schleife, scrapen Sie jede Seite mit demselben Karten-Parser und stoppen Sie, wenn eine Seite keine Produkte zurückgibt. Begrenzen Sie die Seitenanzahl und fügen Sie eine kurze Verzögerung zwischen Anfragen hinzu, damit Sie den Lauf verteilen und nicht gedrosselt werden.

Meine Selektoren geben N/A zurück. Was hat sich geändert?

Höchstwahrscheinlich das Markup von Office Depot. Seine od--Klassennamen wie od-graphql-price-big-price für den Preis und od-stars-inner für den Bewertungsbalken ändern sich ohne Ankündigung, und das Seitenlayout verschiebt sich gelegentlich ebenfalls. Untersuchen Sie eine Live-Seite in den Entwicklertools Ihres Browsers und aktualisieren Sie die Selektoren. Regelmäßige Wartung ist bei jedem Produktionsscraper normal.

Kann ich Konto- oder Bestelldaten von Office Depot scrapen?

Nein, und diese Anleitung deckt das nicht ab. Kontodetails, Bestellhistorie und Checkout-Abläufe liegen hinter einem Login und sind daher keine öffentlichen Daten. Das Scrapen von login-geschützten Inhalten oder das Umgehen der Authentifizierung, um daran zu gelangen, liegt außerhalb des Umfangs hier und verstößt gegen die Bedingungen von Office Depot. Für sanctionierten Zugriff auf reichhaltigere Daten ist der richtige Weg ein offizieller Feed, eine API oder eine Datenvereinbarung.

Jetzt loslegen

Crawlen Sie jede Website im großen Maßstab, ohne gegen die Infrastruktur zu kämpfen.

Crawlbase übernimmt Proxys, Fingerprints und CAPTCHAs, damit Ihr Team Datenpipelines ausliefert, statt Crawl-Infrastruktur zu pflegen. 1.000 Anfragen kostenlos, keine Karte erforderlich.

Self-Service · Kein Verkaufsgespräch erforderlich · Enterprise-Crawl-Volumen verfügbar