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

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.

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.