Wie man Amazon-Produktdaten in großem Maßstab mit Python scrapt

Das dreizeilige BeautifulSoup-Tutorial funktioniert einmal, dann serviert Amazon Ihnen ein CAPTCHA. Hier ist, was tatsächlich im großen Maßstab bricht — sich ändernde Preisselektoren, geografische Preisgestaltung, IP-Sperren — und die Pipeline, die dem standhält.

Amazon-Produktdaten zu scrapen sieht in jedem Anfänger-Tutorial trivial aus: requests, BeautifulSoup, Titel und Preis abrufen, fertig. Das funktioniert genau bis zu dem Punkt, an dem Sie es ein paar hundert Mal ausführen, dann gibt Ihnen Amazon eine Roboter-Überprüfungsseite und Ihr Preisselektor gibt None zurück. Dieser Leitfaden handelt von der Version, die den Kontakt mit der echten Seite überlebt — eine ASIN-zuerst-Pipeline, die Selektoren, die tatsächlich brechen, warum dasselbe Produkt einem anderen Preis bei verschiedenen IPs zeigt, und die Proxy-Einrichtung, die Sie von der CAPTCHA-Wand fernhält. Es geht um öffentliche Produktdaten (Titel, Preise, Bewertungen, Verfügbarkeit), nicht um etwas hinter einem Login.

Die URL-Struktur: ASINs sind der Schlüssel

Jedes Amazon-Produkt hat eine ASIN — eine 10-stellige Kennung wie B08N5WRWNW — und der gesamte Katalog hängt davon ab. Eine Produktseite ist einfach https://www.amazon.com/dp/<ASIN>, und dieselbe ASIN wird über Marktplätze hinweg abgebildet (amazon.co.uk/dp/<ASIN>, amazon.de/dp/<ASIN>). Such- und Kategorieseiten befinden sich unter /s? mit Abfrage- und Browse-Node-Parametern. Eine skalierbare Pipeline hat also zwei Stufen: ASINs von Such- oder Bestseller-Seiten entdecken und dann jede von ihrer /dp/-Seite hydratisieren. Ein Vorbehalt — eine "Eltern"-ASIN (ein Produkt mit Größen- oder Farbvarianten) löst sich in eine automatisch ausgewählte Kindervariante auf, also erfassen Sie die Varianten-ASIN, auf der Sie tatsächlich gelandet sind.

import requests
from bs4 import BeautifulSoup

PROXY = "http://USER:PASS@gate.quantumproxies.io:8000"
HEADERS = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
           "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36",
           "Accept-Language": "en-US,en;q=0.9"}

def product(asin, domain="com"):
    url = f"https://www.amazon.{domain}/dp/{asin}"
    r = requests.get(url, headers=HEADERS,
                     proxies={"http": PROXY, "https": PROXY}, timeout=20)
    soup = BeautifulSoup(r.text, "html.parser")
    return parse(soup, asin)

Der Selektor, den jeder kopiert und den Amazon eingestellt hat

Fast jedes alte Tutorial liest den Preis von span#priceblock_ourprice. Amazon bietet mehrere Preisblock-Layouts und testet sie A/B, sodass diese einzelne ID auf den meisten Seiten heute leer ist. Der dauerhafte Ansatz besteht darin, mehrere bekannte Preiscontainer in der Reihenfolge zu versuchen und den ersten zu nehmen, der passt — und einen fehlenden Preis als echten Zustand zu behandeln (normalerweise nicht vorrätig), nicht als Absturz.

def parse(soup, asin):
    title = soup.select_one("#productTitle")
    price = None
    for sel in ["span.a-price span.a-offscreen",   # current layout
                "#priceblock_ourprice",             # legacy
                "#priceblock_dealprice",            # deal layout
                "#corePrice_feature_div .a-offscreen"]:
        el = soup.select_one(sel)
        if el and el.get_text(strip=True):
            price = el.get_text(strip=True)
            break
    rating = soup.select_one("span.a-icon-alt")
    return {
        "asin": asin,
        "title": title.get_text(strip=True) if title else None,
        "price": price,                 # None -> likely out of stock
        "rating": rating.get_text(strip=True) if rating else None,
    }
Diagramm einer ASIN-zuerst Amazon-Scraping-Pipeline: Suchseiten entdecken ASINs, Wohnproxy setzt Liefergeo, Produktseiten liefern Details, Ausgabe in CSV
Entdecken Sie ASINs aus der Suche, hydratisieren Sie jede von ihrer /dp/ Seite und fixieren Sie die Exit-IP auf den Markt, dessen Preis Sie möchten.

Warum dasselbe Produkt zwei Preise zeigt

Dies ist die Tatsache, die Preisdaten leise ruiniert. Amazon lokalisiert Preis und Verfügbarkeit auf den Lieferort des Käufers — die "Liefer an"-Einstellung — die es hauptsächlich aus Ihrer IP ableitet. Scrapen Sie amazon.com von einer deutschen Rechenzentrums-IP und Sie erhalten möglicherweise Euro-Preise, andere Angebote oder einen anderen Buy Box-Gewinner als ein US-Käufer sieht. Wenn Sie wettbewerbsfähige Preisdaten sammeln, ist die Exit-IP-Geografie das Experiment: Um den Preis zu erfassen, den ein US-Käufer sieht, leiten Sie über einen US-Wohnproxy; für den britischen Markt, ein britischer Exit. Ein Produkt, viele Preise, einer pro Markt, den Sie abtasten.

Holen Sie sich geo-targeted Wohnproxies

Warum naive Scraper blockiert werden

Amazon betreibt automatisierte Anfragemanagementsysteme: Wenn Sie zu schnell von einer IP aus platzen, erhalten Sie ein CAPTCHA, ein IP-Verbot oder eine abgespeckte Seite. Drei Dinge halten einen Scraper am Leben bei Volumen. Erstens, rotieren Sie IPs, damit keine einzelne Adresse die gesamte Last trägt — ein rotierender Wohnpool verteilt Anfragen über viele echte Verbraucher-IPs. Zweitens, mäßigen Sie sich: zufällige Verzögerungen und eine Gleichzeitigkeitssperre, nicht eine durchgehende Schleife. Drittens, senden Sie kohärente Header — ein echter Browser User-Agent und Accept-Language, nicht der Standard-Python-String. Wenn eine Seite verdächtig kurz zurückkommt oder einen Roboter-Check-Marker enthält, verwerfen Sie sie und versuchen Sie es mit einer neuen IP erneut, anstatt Müll zu parsen.

import time, random

def fetch_many(asins, domain="com"):
    rows = []
    for asin in asins:
        for attempt in range(3):
            data = product(asin, domain)
            if data["title"]:            # got a real page
                rows.append(data)
                break
            time.sleep(1.5 + random.random())  # back off, rotate, retry
        time.sleep(random.uniform(1, 3))         # pace between products
    return rows

Suche, Bestseller und Paginierung

Produktseiten sind das Detail; Such- und Bestseller-Seiten sind, wie Sie entdecken, was abgerufen werden soll. Eine Stichwortsuche ist /s?k=<query>&page=<n>; Bestseller hängen von Kategorie-Browse-Nodes ab. Gehen Sie die Seiten durch, ziehen Sie die ASINs von jeder Ergebniskarte und füttern Sie sie dann in die oben genannte Produktstufe ein. Halten Sie die beiden Stufen getrennt — es ermöglicht Ihnen, ASINs zu deduplizieren, einen Crawl fortzusetzen und eine bekannte ASIN-Liste nach einem Zeitplan neu zu bepreisen, ohne sie bei jedem Lauf neu zu entdecken. Für einen breiteren Aufbau behandelt unser Leitfaden zu den besten Proxies für Web-Scraping die Poolseite davon.

Für die Ausgabe selbst halten Sie das Zeilenschema flach und stabil: eine asin, die Quell-url, title, price, rating, Bewertungsanzahl, eine image_url und die Marktplatz-domain, von der Sie abgerufen haben. Schreiben Sie die Domain in jede Zeile, damit ein gemischter Marktdatensatz niemals einen US-Preis mit einem britischen verwechselt. Erfassen Sie die ASIN auch, wenn der Preis leer ist — eine Nicht-vorrätig-Lesung ist ein Datenpunkt, kein Lücke, und das Verfolgen, wann ein Produkt ein- und ausverkauft ist, ist oft genauso wertvoll wie der Preis. Eine CSV- oder Datenbanktabelle mit diesen Spalten fügt sich sauber in Preisverfolgung, Verfügbarkeitswarnungen oder eine Buy Box-Studie ein, ohne weitere Umformung.

Checkliste, die abbildet, was einen naiven Amazon-Scraper bricht (fehlende Preis-ID, CAPTCHA, IP-Verbot, falsche Währung) auf die Lösung für jedes
Fast jeder Amazon-Scraping-Fehler ist einer dieser fünf — und jeder hat eine konkrete Lösung.

Proxies vs eine Scraping-API: wann wechseln

Handgerollte requests plus ein guter Wohnpool ist die richtige Wahl, solange Sie das Volumen kontrollieren und das Ziel kooperativ bleibt. Sobald Sie rotierende Selektoren, CAPTCHA-Handling, Geo-Pinning und Retry-Logik über Tausende von ASINs pro Tag pflegen, wird diese Wartung zum Job. Eine Scraper API vereinfacht es: Senden Sie eine Amazon-URL, erhalten Sie strukturierte Produktdaten mit Rotation, Rendering und Geo, die für Sie gehandhabt werden. Die ehrliche Regel — DIY, solange die Reibung gering ist, wechseln Sie, wenn die Anti-Bot-Wartung mehr Ingenieurzeit kostet als die Daten wert sind. Unser Build-vs-Buy-Breakdown setzt Zahlen auf diese Linie.

Häufig gestellte Fragen

Wie scrapt man Amazon-Produktdaten mit Python?

Rufen Sie die Produktseite unter /dp/<ASIN> mit requests und einem echten Browser User-Agent ab, dann parsen Sie Titel, Preis, Bewertung und Verfügbarkeit mit BeautifulSoup. Versuchen Sie mehrere Preisselektoren, nicht nur den eingestellten priceblock_ourprice. Leiten Sie über einen rotierenden Wohnproxy, damit Bursts keine Sperre auslösen, und fixieren Sie das Exit-Geo auf den Markt, dessen Preisgestaltung Sie möchten.

Ist es legal, Amazon-Produktdaten zu scrapen?

Das Sammeln öffentlich sichtbarer Produktdaten — Titel, Preise, Bewertungen — wird im Allgemeinen anders behandelt als das Umgehen von Logins oder das Kopieren geschützten Inhalts, aber die Amazon-Bedingungen beschränken den automatisierten Zugriff und das rechtliche Bild variiert je nach Gerichtsbarkeit und Nutzung. Dies ist allgemeine Information, keine Rechtsberatung: Scrapen Sie nur öffentliche Daten, respektieren Sie Ratenlimits und holen Sie sich Rat für alles Kommerzielle oder Grenzwertige.

Warum erhält mein Amazon-Scraper einen anderen Preis als die Website?

Amazon lokalisiert Preisgestaltung und Verfügbarkeit auf den Lieferort, den es aus Ihrer IP ableitet. Wenn Ihr Proxy in einem anderen Land als dem Markt, den Sie untersuchen, endet, sehen Sie die falsche Währung und Angebote. Fixieren Sie die Exit-IP auf den Zielmarkt — eine US-Wohn-IP für US-Preise, eine britische IP für britische Preise — damit die Daten mit dem übereinstimmen, was ein echter Käufer dort sieht.

Wie vermeide ich es, beim Scrapen von Amazon blockiert zu werden?

Rotieren Sie über viele Wohn-IPs, damit keine einzelne Adresse die Last trägt, drosseln Sie mit zufälligen Verzögerungen und einer Gleichzeitigkeitssperre und senden Sie kohärente Browser-Header. Validieren Sie jede Antwort — ein 200 kann immer noch eine Roboter-Überprüfungsseite sein — und versuchen Sie es mit einer neuen IP erneut, anstatt eine blockierte zu parsen. Bei hohem Volumen übernimmt eine Scraper API all das für Sie.

Amazon im großen Maßstab ist nicht schwer, weil das Parsen schwer ist — es ist schwer, weil die Seite zurückschlägt und der Preis davon abhängt, wo Sie stehen. Bauen Sie ASIN-zuerst, passen Sie mehrere Preiscontainer an, fixieren Sie Ihr Geo, rotieren Sie Ihre IPs und behandeln Sie eine kurze Antwort als Block, nicht als Daten. Machen Sie das richtig und das Anfänger-Tutorial skaliert endlich.

Scrapen Sie Amazon mit der QuantumProxies Scraper API