So scrape ich Amazon-Bewertungen mit Python – trotz Login-Sperre

Zuletzt aktualisiert am June 18, 2026
So scrape ich Amazon-Bewertungen mit Python – trotz Login-Sperre

Sechs Wochen lang lief mein Amazon-Bewertungs-Scraper wie geschmiert – und dann kam eines Morgens zwar weiterhin 200 OK zurück, aber die Seite war leer. Kein Fehler, kein CAPTCHA, nur nacktes HTML ohne einen einzigen Inhalt, wo vorher Hunderte Rezensionen standen.

Klingt vertraut? Dann sitzt du im selben Boot wie viele andere. Ende 2025 hat Amazon seine vollständigen Bewertungsseiten hinter eine Login-Sperre verlegt und damit über Nacht unzählige Python-Skripte lahmgelegt. Ich habe die letzten Monate bei Thunderbit von beiden Seiten an diesem Problem gesessen – wir bauen unseren AI Scraper, und parallel betreibe ich meine eigene Python-Pipeline für Bewertungen. Genau deshalb wollte ich den Leitfaden schreiben, den ich selbst gebraucht hätte, als mein Skript plötzlich ins Leere lief. Hier zeige ich den Ansatz, der tatsächlich trägt: Cookie-basierte Authentifizierung, stabile Selektoren, die Amazons CSS-Verschleierung überstehen, Workarounds fürs 10-Seiten-Limit, Anti-Bot-Maßnahmen und als Bonus einen Teil zur Sentiment-Analyse, der rohe Rezensionen in echte Business-Insights übersetzt. Und falls du zwischendurch denkst „eigentlich will ich diesen ganzen Code gar nicht warten“, zeige ich dir auch, wie Thunderbit dieselbe Aufgabe in etwa zwei Minuten ganz ohne Python erledigt.

Was ist Amazon Review Scraping – und warum ist es wichtig?

Amazon Review Scraping meint das programmatische Auslesen von Kundenbewertungen – Sternebewertungen, Bewertungstext, Autorennamen, Datum, Hinweise auf verifizierte Käufe und mehr – direkt von Amazon-Produktseiten. Da Amazon die Bewertungsinhalte bereits 2010 aus seiner Product Advertising API entfernt hat und nie wieder zurückgeholt hat, bleibt Web Scraping der einzige programmatische Weg zu diesen Daten.

Die Zahlen sind eindeutig. 95 % der Käufer lesen vor dem Kauf Bewertungen, und 94 % nennen Amazon als ihre wichtigste Quelle für Produktbewertungen. Schon 5 Bewertungen auf einer Produktseite können die Conversion um 270 % steigern. Unternehmen, die Bewertungsstimmungen systematisch auswerten, verzeichnen bis zu 15 % höhere Kundenbindung. Das ist keine abstrakte Data-Science-Spielerei – das sind Wettbewerbsinformationen, Signale für Produktverbesserungen und Marketing-Sprache, im Klartext direkt auf Amazons Servern.

Warum Amazon-Bewertungen mit Python scrapen?

Für diese Aufgabe bleibt Python die erste Wahl. Es ist die am meisten gewünschte Sprache im Stack Overflow Developer Survey 2024, und das Ökosystem rund um requests, BeautifulSoup, pandas und Scrapy öffnet Web Scraping auch für alle, die nicht hauptberuflich entwickeln.

Verschiedene Teams setzen diese Daten unterschiedlich ein:

TeamAnwendungsfallWelche Daten sie extrahieren
Produkt / F&EWiederkehrende Beschwerden erkennen, Prioritäten setzen1–2-Sterne-Bewertungen, Keyword-Häufigkeiten
SalesStimmungsbild zu Wettbewerbsprodukten beobachtenBewertungen, Trends im Bewertungsvolumen
MarketingFormulierungen von Kunden für Anzeigen nutzenPositive Bewertungsaussagen, Feature-Erwähnungen
E-Commerce OpsEigene Produktstimmung über Zeit verfolgenSterneverteilung, Anteil verifizierter Käufe
MarktforschungKategorien führender Produkte vergleichenReview-Datasets über mehrere ASINs

Eine Marke für Küchenutensilien wertete negative Bewertungen aus, stellte fest, dass 22 % „die Antihaftbeschichtung nutzt sich ab“ erwähnten, passte die Rezeptur an und holte sich innerhalb von 60 Tagen wieder Platz 1 unter den Bestsellern zurück. Ein Fitness-Tracker-Anbieter identifizierte „Reizungen durch das Armband“ in Rezensionen, erkannte ein Latexproblem, brachte eine hypoallergene Variante auf den Markt und drückte die Retouren um 40 %. Genau diese Art von ROI rechtfertigt den technischen Aufwand.

Login-Sperre: Warum dein Amazon-Review-Scraper nicht mehr funktioniert

Am 14. November 2024 begann Amazon, für die vollständige Produkt-Bewertungsseite eine Anmeldung zu verlangen. Bestätigt wurde die Änderung sowohl in Community-Foren als auch in Blogs von Scraping-Anbietern. Rufst du /product-reviews/{ASIN}/ in einem Inkognito-Fenster auf, landest du inzwischen auf einer Login-Seite statt bei den Bewertungen.

python-web-scraping-diagram.webp

Die Symptome sind heimtückisch: Dein Skript bekommt zwar einen 200 OK-Status, aber im HTML-Body steht ein Login-Formular (name="email", id="ap_password") statt der Rezensionen. Kein Fehlercode. Kein CAPTCHA. Einfach … nichts Verwertbares.

Amazon zieht diese Linie aus Anti-Bot-Gründen und wegen regionaler Compliance-Anforderungen. Die Durchsetzung ist allerdings nicht immer einheitlich – manchmal lädt ein frisches Browserfenster noch ein paar Bewertungen, bevor die Sperre greift, vor allem auf der ersten Seite. Bei Scrapern im größeren Maßstab solltest du aber davon ausgehen, dass die Sperre durchgehend aktiv ist.

Die verschiedenen Amazon-Länderdomains (.de, .co.uk, .co.jp) setzen diese Sperre jeweils eigenständig durch. Ein Foren-Nutzer brachte es auf den Punkt: „Für jedes Land ist ein eigener Login nötig.“ Deine .com-Cookies greifen also nicht auf .co.uk.

Featured Reviews vs. vollständige Bewertungen: Was ohne Login noch zugänglich ist

Amazon-Produktseiten (/dp/{ASIN}/) zeigen weiterhin ungefähr 8 „Featured Reviews“ ohne Anmeldung an. Die wählt Amazons Algorithmus aus, und für einen schnellen Stimmungscheck reichen sie – sortieren, filtern oder über mehrere Seiten blättern kannst du sie jedoch nicht.

Die vollständigen Bewertungsseiten (/product-reviews/{ASIN}/) – mit Sortierung nach Neuheit, Filterung nach Sternebewertung und Pagination über Hunderte Rezensionen – setzen einen Login voraus.

Brauchst du nur ein paar Bewertungen für einen schnellen Eindruck, reicht die Produktseite. Geht es um Hunderte oder Tausende, musst du die Authentifizierung sauber lösen.

Was du vor dem Start brauchst: Python-Setup und Bibliotheken

Bevor wir Code schreiben, hier das Setup:

  • Schwierigkeitsgrad: Mittelstufe (Python-Kenntnisse, grundlegendes HTML-Verständnis)
  • Zeitbedarf: ca. 45 Minuten für die komplette Pipeline; ca. 10 Minuten für einen einfachen Scrape
  • Benötigt: Python 3.8+, Chrome-Browser, ein gültiges Amazon-Konto

Installiere die Kernbibliotheken:

pip install requests beautifulsoup4 lxml pandas textblob

Optional (für fortgeschrittene Sentiment-Analyse):

pip install transformers torch

Was ist eine ASIN? Das ist Amazons 10-stellige Produkt-ID. Du findest sie in jeder Produkt-URL – in amazon.com/dp/B0BCNKKZ91 ist die ASIN etwa B0BCNKKZ91. Genau diesen Wert brauchst du später für die Bewertungs-URL.

Schritt 1: Mit Cookie-basierter Authentifizierung an der Login-Sperre vorbeikommen

Am verlässlichsten klappt das so: in deinem Browser bei Amazon anmelden, die Session-Cookies kopieren und sie in deine Python-requests.Session() übernehmen. Damit umgehst du CAPTCHA-Abfragen und SMS-2FA, die bei Selenium-basierten Login-Automationen oft Ärger machen.

Du brauchst diese sieben Cookies:

Cookie-NameZweck
session-idRotierende Session-ID
session-id-timeZeitstempel der Session
session-tokenRotierendes Session-Token
ubid-mainBrowser-Identifikator des Nutzers
at-mainPrimäres Auth-Token
sess-at-mainAuthentifizierung innerhalb der Session
x-mainE-Mail-gebundener Nutzer-Identifikator

So extrahierst du Cookies aus Chrome DevTools

  1. Melde dich in Chrome bei amazon.com an
  2. Öffne die DevTools (F12 oder Rechtsklick → Untersuchen)
  3. Gehe zu ApplicationStorageCookieshttps://www.amazon.com
  4. Suche jeden Cookie-Namen aus der Tabelle und kopiere den jeweiligen Wert
  5. Formatiere sie als durch Semikolon getrennte Zeichenkette für Python

So richtest du deine Session ein:

import requests

session = requests.Session()

# Hier deine Cookie-Werte einfügen
cookies = {
    "session-id": "YOUR_SESSION_ID",
    "session-id-time": "YOUR_SESSION_ID_TIME",
    "session-token": "YOUR_SESSION_TOKEN",
    "ubid-main": "YOUR_UBID_MAIN",
    "at-main": "YOUR_AT_MAIN",
    "sess-at-main": "YOUR_SESS_AT_MAIN",
    "x-main": "YOUR_X_MAIN",
}

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
    "Accept-Language": "en-US,en;q=0.5",
}

session.cookies.update(cookies)
session.headers.update(headers)

Wichtig: Verwende für alle Requests dasselbe session-Objekt. So bleiben die Cookies konsistent und das Verhalten ähnelt einer echten Browser-Session. Cookies halten unter Scraping-Last meist Tage bis Wochen, doch sobald wieder Login-Weiterleitungen auftauchen, musst du sie im Browser neu ziehen.

Bei Marktplätzen außerhalb von .com ändern sich die Cookie-Namen leicht – amazon.de nutzt at-acbde statt at-main, amazon.co.uk verwendet at-acbuk usw. Jeder Marktplatz braucht seine eigene, unabhängige Session.

Schritt 2: Den Request bauen und Review-HTML mit BeautifulSoup parsen

Die Amazon-Bewertungs-URL folgt diesem Muster:

https://www.amazon.com/product-reviews/{ASIN}/ref=cm_cr_arp_d_viewopt_srt?sortBy=recent&pageNumber=1

Die zentrale Funktion:

from bs4 import BeautifulSoup
import time, random

def get_soup(session, url):
    time.sleep(random.uniform(2, 5))  # Freundliche Pause
    response = session.get(url, timeout=15)

    # Login-Sperre erkennen
    if "ap_email" in response.text or "Amazon Sign-In" in response.text:
        raise Exception("Login-Sperre erkannt — bitte Cookies erneuern")

    if response.status_code != 200:
        raise Exception(f"HTTP {response.status_code}")

    return BeautifulSoup(response.text, "lxml")

Ein kleiner Kniff, der hilft: Bevor du die Bewertungsseite aufrufst, besuch zuerst die Produktseite. Das erzeugt ein natürlicheres Browsing-Muster in deiner Session.

# Zuerst Produktseite besuchen (wirkt wie normales Browsing)
product_url = f"https://www.amazon.com/dp/{asin}"
session.get(product_url, timeout=15)
time.sleep(random.uniform(1, 3))

# Dann die Bewertungsseite aufrufen
reviews_url = f"https://www.amazon.com/product-reviews/{asin}/ref=cm_cr_arp_d_viewopt_srt?sortBy=recent&pageNumber=1"
soup = get_soup(session, reviews_url)

Schritt 3: Stabile Selektoren nutzen, um Bewertungsdaten zu extrahieren (nicht auf CSS-Klassen setzen)

Genau hier scheitern die meisten Tutorials von 2022–2023. Amazon verschleiert seine CSS-Klassennamen – sie wechseln regelmäßig, und wie ein frustrierter Entwickler in einem Forum schrieb: „Keiner von ihnen hatte ein einziges konsistentes Muster bei den Klassennamen der span-Tags.“

Der Ausweg: Amazon vergibt auf den Bewertungs-Elementen data-hook-Attribute, und die sind erstaunlich stabil. Es sind semantische Kennungen, auf die auch Amazons Frontend-Code angewiesen ist, deshalb werden sie nicht willkürlich verändert.

BewertungsfeldStabiler Selektor (data-hook)Anfälliger Selektor (class)
Bewertungstext[data-hook="review-body"].review-text-content (ändert sich)
Sternebewertung[data-hook="review-star-rating"].a-icon-alt (mehrdeutig)
Titel der Bewertung[data-hook="review-title"].review-title (manchmal)
Autorennamespan.a-profile-nameRelativ stabil
Bewertungsdatum[data-hook="review-date"].review-date (regionsabhängig)
Verifizierter Kauf[data-hook="avp-badge"]span.a-size-mini

Der Extraktionscode mit data-hook-Selektoren:

import re

def extract_reviews(soup):
    reviews = []
    review_divs = soup.select('[data-hook="review"]')

    for div in review_divs:
        # Sternebewertung
        rating_el = div.select_one('[data-hook="review-star-rating"]')
        rating = None
        if rating_el:
            rating_text = rating_el.get_text(strip=True)
            match = re.search(r'(\d\.?\d?)', rating_text)
            if match:
                rating = float(match.group(1))

        # Titel
        title_el = div.select_one('[data-hook="review-title"]')
        title = title_el.get_text(strip=True) if title_el else ""

        # Text
        body_el = div.select_one('[data-hook="review-body"]')
        body = body_el.get_text(strip=True) if body_el else ""

        # Autor
        author_el = div.select_one('span.a-profile-name')
        author = author_el.get_text(strip=True) if author_el else ""

        # Datum und Land
        date_el = div.select_one('[data-hook="review-date"]')
        date_text = date_el.get_text(strip=True) if date_el else ""
        # Format: "Reviewed in the United States on January 15, 2025"
        country_match = re.search(r'Reviewed in (.+?) on', date_text)
        date_match = re.search(r'on (.+)$', date_text)
        country = country_match.group(1) if country_match else ""
        date = date_match.group(1) if date_match else ""

        # Verifizierter Kauf
        verified_el = div.select_one('[data-hook="avp-badge"]')
        verified = bool(verified_el)

        reviews.append({
            "author": author,
            "rating": rating,
            "title": title,
            "content": body,
            "date": date,
            "country": country,
            "verified": verified,
        })

    return reviews

Ich setze genau diese Selektoren jetzt seit Monaten gegen mehrere ASINs ein, und die data-hook-Attribute haben sich kein einziges Mal verändert. Die CSS-Klassen dagegen sind im selben Zeitraum mindestens zweimal durchrotiert worden.

Schritt 4: Pagination und Amazons 10-Seiten-Limit behandeln

Amazon deckelt den pageNumber-Parameter bei 10 Seiten mit jeweils 10 Bewertungen – also eine harte Obergrenze von rund 100 Bewertungen pro Filterkombination. Der „Nächste Seite“-Button verschwindet nach Seite 10 schlicht.

Einfache Pagination-Schleife:

all_reviews = []

for page in range(1, 11):
    url = f"https://www.amazon.com/product-reviews/{asin}/ref=cm_cr_arp_d_viewopt_srt?sortBy=recent&pageNumber={page}"
    soup = get_soup(session, url)
    page_reviews = extract_reviews(soup)

    if not page_reviews:
        break  # Keine weiteren Bewertungen auf dieser Seite

    all_reviews.extend(page_reviews)
    print(f"Seite {page}: {len(page_reviews)} Bewertungen")

Wie man mehr als 10 Seiten Amazon-Bewertungen bekommt

Der Workaround heißt Filter-Bucketing. Jede Kombination aus filterByStar und sortBy bekommt ihr eigenes, unabhängiges 10-Seiten-Fenster.

Sternfilter-Werte: one_star, two_star, three_star, four_star, five_star
Sortierwerte: recent, helpful (Standard)

Kombinierst du alle 5 Sternfilter × 2 Sortierungen, kommst du auf bis zu 100 Seiten bzw. 1.000 Bewertungen pro Produkt – und bei Produkten mit ungleichmäßiger Sterneverteilung näherst du dich damit oft dem vollständigen Review-Satz.

star_filters = ["one_star", "two_star", "three_star", "four_star", "five_star"]
sort_orders = ["recent", "helpful"]
all_reviews = []
seen_titles = set()  # Einfache Duplikaterkennung

for star in star_filters:
    for sort in sort_orders:
        for page in range(1, 11):
            url = (
                f"https://www.amazon.com/product-reviews/{asin}"
                f"?filterByStar={star}&sortBy={sort}&pageNumber={page}"
            )
            soup = get_soup(session, url)
            page_reviews = extract_reviews(soup)

            if not page_reviews:
                break

            for review in page_reviews:
                # Duplikate über Titel + Autor erkennen
                key = (review["title"], review["author"])
                if key not in seen_titles:
                    seen_titles.add(key)
                    all_reviews.append(review)

            print(f"[{star}/{sort}] Seite {page}: {len(page_reviews)} Bewertungen")

print(f"Gesamtzahl eindeutiger Bewertungen: {len(all_reviews)}")

Zwischen den Buckets gibt es Überschneidungen, deshalb ist Deduplizierung wichtig. Als schnellen Schlüssel nehme ich eine Kombination aus Bewertungstitel und Autorenname – nicht perfekt, aber damit fängt man den Großteil der Duplikate ab.

Schritt 5: Anti-Bot-Schutz austricksen (rotieren, drosseln, wiederholen)

Amazon setzt auf AWS WAF Bot Control, und das System ist inzwischen merklich aggressiver geworden. Einlagige Gegenmaßnahmen (nur User-Agents rotieren, nur Verzögerungen einbauen) reichen längst nicht mehr.

TechnikUmsetzung
User-Agents rotierenZufällige Auswahl aus 10+ echten Browser-Strings
Exponential BackoffRetry-Verzögerungen von 2s → 4s → 8s bei 503-Fehlern
Request-Drosselungrandom.uniform(2, 5) Sekunden zwischen Seiten
Proxy-RotationWechsel zwischen Residential Proxies
Session-FingerprintKonsistente Cookies + Header pro Session
TLS-ImpersonationFür Produktion curl_cffi statt Standard-requests verwenden

Ein produktionsreifer Retry-Wrapper:

import time, random

USER_AGENTS = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:149.0) Gecko/20100101 Firefox/149.0",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 15_7_5) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0 Safari/605.1.15",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36",
]

def scrape_with_retries(session, url, max_retries=3):
    for attempt in range(max_retries):
        try:
            session.headers["User-Agent"] = random.choice(USER_AGENTS)
            time.sleep(random.uniform(2, 5))

            response = session.get(url, timeout=15)

            # Blocks erkennen
            if "validateCaptcha" in response.url or "Robot Check" in response.text:
                wait = (2 ** attempt) * 5
                print(f"CAPTCHA erkannt. Warte {wait}s...")
                time.sleep(wait)
                continue

            if response.status_code in (429, 503):
                wait = (2 ** attempt) * 2
                print(f"Rate-Limit ({response.status_code}). Warte {wait}s...")
                time.sleep(wait)
                continue

            if "ap_email" in response.text:
                raise Exception("Login-Sperre — Cookies abgelaufen")

            return BeautifulSoup(response.text, "lxml")

        except Exception as e:
            if attempt == max_retries - 1:
                raise
            print(f"Versuch {attempt + 1} fehlgeschlagen: {e}")

    return None

Noch ein Hinweis zu Proxys: Amazon sperrt bekannte Rechenzentrums-IP-Bereiche (AWS, GCP, Azure, DigitalOcean) auf Netzwerkebene. Scrapst du mehr als ein paar Hundert Seiten, sind Residential Proxies praktisch Pflicht – rechne je nach Volumen mit etwa 50–200+ US-Dollar pro Monat. Für kleinere Projekte (unter 100 Requests pro Tag) reicht ein sauber gedrosselter Abruf von deiner Heim-IP oft noch aus.

Amazon prüft außerdem TLS-Fingerprints. Das Standard-requests-Paket in Python hat einen bekannten JA3-Hash, den WAFs oft vorab blockieren. Für produktive Scraper lohnt sich curl_cffi, weil es echte Browser-TLS-Stacks nachbildet. Im Tutorial-Umfang (ein paar Hundert Seiten) genügt requests mit guten Headern meist.

Schritt 6: Deine Amazon-Bewertungen als CSV oder Excel exportieren

Sobald die Bewertungen gesammelt sind, geht der Export in ein nutzbares Format mit pandas mühelos:

import pandas as pd

df = pd.DataFrame(all_reviews)
df.to_csv("amazon_reviews.csv", index=False)
print(f"{len(df)} Bewertungen nach amazon_reviews.csv exportiert")

Beispielausgabe:

authorratingtitlecontentdatecountryverified
Sarah M.5.0Bester Kauf dieses JahresDer Akku hält den ganzen Tag, das Display ist wunderschön...January 15, 2025the United StatesTrue
Mike T.2.0Nach 2 Wochen enttäuschtDer Ladeanschluss hat aufgehört zu funktionieren...February 3, 2025the United StatesTrue
Priya K.4.0Starkes Preis-Leistungs-VerhältnisMacht alles, was ich brauche, nur leichte Verzögerungen bei schweren Apps...March 10, 2025the United StatesFalse

Für den Excel-Export: df.to_excel("amazon_reviews.xlsx", index=False) (dafür ist openpyxl nötig).

Für Google Sheets funktioniert die gspread-Bibliothek, doch sie verlangt mehr als 8 Schritte Google-Cloud-Konfiguration – Projekt anlegen, zwei APIs aktivieren, Service-Account-Zugangsdaten erzeugen, Tabellenblatt freigeben. Falls dir das nach mehr Aufwand klingt als das eigentliche Scraping, liegst du nicht daneben. (Genau hier wirkt ein Tool wie Thunderbit, das mit einem Klick nach Google Sheets exportiert, plötzlich sehr verlockend.)

Bonus: In 5 Zeilen Python Sentiment-Analyse zu deinen Scraped Reviews hinzufügen

Die meisten Scraping-Tutorials hören beim CSV-Export auf. Doch erst mit Sentiment-Werten werden aus Rohdaten echte Entscheidungen.

Der schnellste Baseline-Ansatz nutzt TextBlob:

from textblob import TextBlob

df["sentiment"] = df["content"].apply(lambda x: TextBlob(str(x)).sentiment.polarity)

Damit bekommt jede Bewertung einen Polaritätswert von -1.0 (sehr negativ) bis +1.0 (sehr positiv). Beispielausgabe:

content (gekürzt)ratingsentiment
"Battery lasts all day, screen is gorgeous..."5.00.65
"The charging port stopped working after..."2.0-0.40
"Does everything I need, minor lag on..."4.00.25
"Absolute garbage. Returned immediately."1.0-0.75
"It's okay. Nothing special but works."3.00.10

Am spannendsten sind die Ausreißer – etwa eine 3-Sterne-Bewertung mit positivem Text oder eine 5-Sterne-Bewertung mit negativer Sprache. Solche Abweichungen verraten oft nuancierte Kundenmeinungen, die Sterne allein nicht abbilden.

ai-review-analysis.webp

Für präzisere Ergebnisse in Produktionsqualität empfehlen sich Hugging Face Transformers. VADER wurde auf Tweets trainiert, nicht auf Produktbewertungen, und Transformer-Modelle erreichen über 98 % Genauigkeit bei der Review-Klassifikation – deutlich mehr als lexikonbasierte Tools. Das Modell nlptown/bert-base-multilingual-uncased-sentiment kann sogar direkt 1–5 Sterne vorhersagen:

from transformers import pipeline

clf = pipeline("sentiment-analysis",
               model="nlptown/bert-base-multilingual-uncased-sentiment")
df["predicted_stars"] = df["content"].apply(
    lambda x: int(clf(str(x)[:512])[0]["label"][0])
)

Amazon-Bewertungen folgen einer J-förmigen Verteilung – ein großer Peak bei 5 Sternen, ein kleinerer bei 1 Stern und ein Tal in der Mitte. Deshalb ist der Durchschnittswert oft ein schwacher Indikator für die tatsächliche Produktqualität. Schau dir den 1-Stern-Cluster genauer an und such nach wiederkehrenden Themen – dort steckt häufig der eine, behebbare Defekt.

Die ehrliche Abwägung: DIY-Python vs. bezahlte Scraping-APIs vs. Thunderbit

Ich habe Python-Scraper für Amazon selbst gepflegt, und ehrlich gesagt: Sie gehen kaputt. Selektoren wandern, Cookies laufen ab, Amazon rollt eine neue Bot-Erkennung aus – und schon verbringst du deinen Samstagmorgen mit Debugging statt mit Datenanalyse. Auch in Foren liest man dieselbe Frustration: DIY-Skripte, die „letzten Monat noch liefen“, brauchen heute laufend Patches.

So schneiden die drei Hauptansätze im Vergleich ab:

KriteriumDIY Python (BS4/Selenium)Bezahlte Scraping-APIThunderbit (No-Code)
Einrichtungszeit1–3 Stunden30 Min. (API-Key)2 Minuten
KostenKostenlos (+ Proxy-Kosten)50–200+ $/MonatKostenloser Tarif verfügbar
Umgang mit Login-SperrenManuelle Cookie-VerwaltungMeist abgedecktAutomatisch abgedeckt
WartungHoch (Selektoren brechen)Niedrig (Anbieter wartet)Keine (AI passt sich an)
PaginationEigener Code nötigIntegriertIntegriert
Multi-Länder-SupportSeparate Sessions pro DomainMeist unterstütztBrowser-basiert = deine Locale
Sentiment-AnalyseEigener Code nötigTeilweise enthaltenNach Google Sheets exportieren und beliebig analysieren
Am besten fürLernen, volle KontrolleSkalierung, Produktions-PipelinesSchnelle Exporte, Nicht-Entwickler-Teams

Python gibt dir volle Kontrolle und ist der beste Weg, Web Scraping wirklich von Grund auf zu durchdringen. Bezahlte APIs (ScrapingBee, Oxylabs, Bright Data) lohnen sich für produktive Pipelines, bei denen Verfügbarkeit schwerer wiegt als Kosten. Und für Teams, die Bewertungsdaten ohne Entwicklungsaufwand brauchen – etwa E-Commerce-Teams, die wöchentlich Wettbewerbsprodukte überwachen, oder Marketing-Teams auf der Suche nach Kundensprache für Anzeigen – gibt es einen dritten Weg.

So scrapt man Amazon-Bewertungen mit Thunderbit – ganz ohne Code und Wartung

Wir haben Thunderbit genau für die Fälle gebaut, in denen sich ein Python-Scraper wie unnötiger Ballast anfühlt. Der Ablauf sieht so aus:

  1. Installiere die Thunderbit Chrome Extension
  2. Öffne die Amazon-Produktbewertungsseite im Browser (du bist bereits eingeloggt, die Login-Sperre ist also kein Thema)
  3. Klicke auf „AI Suggest Fields“ – Thunderbit liest die Seite und schlägt Spalten wie Autor, Bewertung, Titel, Bewertungstext, Datum und Verifizierter Kauf vor
  4. Klicke auf „Scrape“ – die Daten werden sofort extrahiert, inklusive eingebauter Pagination
  5. Exportiere nach Excel, Google Sheets, Airtable oder Notion

Der größte Pluspunkt: Die AI von Thunderbit liest die Seitenstruktur jedes Mal neu ein. Keine CSS-Selektoren, die du pflegen müsstest, keine Cookie-Verwaltung, kein Anti-Bot-Code. Ändert Amazon sein HTML, stellt sich die AI darauf ein. Für Leser, die programmgesteuerten Zugriff ohne kompletten DIY-Aufwand möchten, bietet Thunderbit zusätzlich eine Extract API – strukturierte Datenerfassung per API mit AI-gestützter Felderkennung, ganz ohne Selektorpflege.

Für tiefere Einblicke in Amazon-Daten findest du auch unsere Anleitungen zu Amazon-Produkte und Bewertungen scrapen und Amazon-Verkaufsdaten extrahieren und analysieren.

Tipps für das Scrapen von Amazon-Bewertungen in großem Umfang mit Python

Willst du Bewertungen über viele ASINs hinweg scrapen, ersparen dir diese Praktiken viel Ärger:

  • Verarbeite ASINs in Batches mit Pausen zwischen den Produkten, nicht nur zwischen den Seiten. Ich lege 10–15 Sekunden Pause zwischen ASINs ein.
  • Dedupliziere aggressiv. Kombinierst du mehrere Sternfilter- und Sortierkombinationen, bekommst du Überschneidungen. Nimm (title, author, date)-Tuples als Deduplizierungs-Schlüssel.
  • Protokolliere Fehler. Halte fest, welche ASIN-, Seiten- und Filterkombinationen fehlgeschlagen sind, damit du nur diese erneut scrapen musst.
  • Nutze für größere Projekte eine Datenbank. Eine einfache SQLite-Datenbank skaliert deutlich besser als immer weiter wachsende CSV-Dateien:
import sqlite3

conn = sqlite3.connect("reviews.db")
df.to_sql("reviews", conn, if_exists="append", index=False)
  • Plane wiederkehrende Scrapes. Fürs laufende Monitoring kannst du einen Cronjob einrichten oder Thundebits Scheduled-Scraper-Funktion nutzen – URL und Zeitplan angeben, den Rest erledigt das Tool ohne Server.

Weitere Ansätze findest du in unseren Beiträgen zu besten automatisierten Web-Scraping-Tools und Daten von Websites nach Excel scrapen.

Ein kurzer Hinweis zu rechtlichen und ethischen Aspekten

Amazons Nutzungsbedingungen verbieten ausdrücklich „den Einsatz von Robotern, Spider, Scraper oder anderen automatisierten Mitteln, um auf Amazon Services zuzugreifen“. Zugleich ist die aktuelle US-Rechtsprechung bei öffentlich zugänglichen Daten eher scraperfreundlich. In Meta Platforms v. Bright Data (Januar 2024) entschied ein Bundesgericht, dass das Scrapen öffentlich zugänglicher Daten nicht gegen die Nutzungsbedingungen verstößt, solange der Scraper kein eingeloggter „User“ ist.

Der feine Unterschied: Scraping hinter einem Login – also genau das, worum es in diesem Tutorial geht – bewegt sich im Vertragsrecht, weil du beim Anlegen des Kontos Amazons AGB akzeptiert hast. Öffentlich sichtbare Featured Reviews zu scrapen ist rechtlich weniger riskant als Scraping hinter der Login-Sperre. Wer aus dem DACH-Raum personenbezogene Daten verarbeitet, sollte zudem die DSGVO im Blick behalten.

Praktische Regeln: Veröffentliche Scraped Daten nicht kommerziell weiter, sammle keine personenbezogenen Daten über das öffentlich Sichtbare hinaus, respektiere robots.txt und hol dir bei großen oder kommerziellen Vorhaben juristischen Rat. Das ist keine Rechtsberatung. Mehr zum Thema findest du in unserem Überblick über rechtliche Implikationen von Web Scraping.

Fazit: Amazon-Bewertungen mit Python scrapen – oder den Code ganz weglassen

Kurz zusammengefasst, was dieser Leitfaden gezeigt hat:

  • Die Login-Sperre ist real, aber mit Cookie-basierter Authentifizierung lösbar – kopiere 7 Cookies aus deinem Browser und injiziere sie in eine requests.Session()
  • Verwende data-hook-Selektoren statt CSS-Klassen, damit dein Scraper nicht alle paar Wochen auseinanderfällt
  • Kombiniere Sternfilter und Sortierungen, um das 10-Seiten-Limit zu umgehen und mehr als 500 Bewertungen pro Produkt zu erreichen
  • Ergänze Sentiment-Analyse mit TextBlob für einen schnellen Baseline-Wert oder Hugging Face Transformers für produktionsreife Genauigkeit
  • Pflege Anti-Bot-Maßnahmen: Drosselung, Rotation der User-Agents, Exponential Backoff und Residential Proxies bei größerem Umfang

Python gibt dir volle Kontrolle und ist der beste Weg, zu verstehen, was unter der Haube passiert. Aber wenn dein Anwendungsfall eher „Ich brauche bis Freitag Wettbewerbsbewertungen in einer Tabelle“ lautet als „Ich will eine Produktions-Datenpipeline bauen“, ist der Wartungsaufwand eines eigenen Scrapers womöglich schlicht zu hoch.

Thunderbit übernimmt Authentifizierung, Selektoren, Pagination und Export mit wenigen Klicks – probier den kostenlosen Tarif aus und schau, ob er zu deinem Workflow passt. Während Amazon seine Anti-Bot-Maßnahmen weiter hochschraubt, werden KI-gestützte Tools, die sich in Echtzeit anpassen, immer weniger zum Nice-to-have und immer mehr zur Notwendigkeit.

Du kannst dir auch unseren Thunderbit YouTube-Kanal ansehen, dort findest du Video-Tutorials zu Scraping-Workflows.

FAQs

1. Kann man Amazon-Bewertungen ohne Login scrapen?

Ja, aber nur die etwa 8 „Featured Reviews“, die auf der Produktdetailseite (/dp/{ASIN}/) erscheinen. Die vollständigen Bewertungsseiten mit Sortierung, Filtern und Pagination setzen seit Ende 2024 eine Anmeldung voraus. Für die meisten Business-Anwendungsfälle musst du die Login-Sperre also umgehen.

2. Ist es legal, Amazon-Bewertungen zu scrapen?

Amazons Nutzungsbedingungen verbieten automatisiertes Scraping. Die jüngere US-Rechtsprechung (Meta v. Bright Data, 2024; hiQ v. LinkedIn) stützt allerdings das Scrapen öffentlich zugänglicher Daten. Scraping hinter einem Login ist rechtlich riskanter, weil du Amazons AGB bereits zugestimmt hast. Für kommerzielle Nutzung solltest du rechtlichen Rat einholen.

3. Wie viele Amazon-Bewertungen kann ich pro Produkt scrapen?

Amazon deckelt die Bewertungsseiten bei 10 pro Sortier- und Sternfilter-Kombination. Nutzt du alle 5 Sternfilter × 2 Sortierungen, kommst du auf bis zu 100 Seiten bzw. rund 1.000 Bewertungen pro Produkt. Mit Keyword-Filtern liegt die theoretische Obergrenze deutlich höher, allerdings mit erheblicher Duplikatmenge.

4. Welche Python-Bibliothek ist am besten für Amazon Review Scraping?

requests + BeautifulSoup für statisches HTML ist die häufigste und zuverlässigste Kombination. Selenium hilft, wenn JavaScript-Rendering nötig ist. Als No-Code-Alternative, die Login-Sperren und Pagination automatisch übernimmt, probiere Thunderbit.

5. Wie verhindere ich Blockierungen beim Scrapen von Amazon?

Rotiere User-Agent-Strings aus einem Pool von 10+ echten Browser-Strings, füge zufällige Pausen von 2–5 Sekunden zwischen Requests ein, implementiere Exponential Backoff bei 503/429-Fehlern, verwende für größeren Umfang Residential Proxies (Rechenzentrums-IPs werden oft direkt blockiert) und halte die Session-Cookies über alle Requests hinweg konsistent. Für einen wartungsfreien Ansatz übernimmt Thunderbit den Anti-Bot-Schutz automatisch über deine Browser-Session.

Mehr erfahren

Fawad Khan
Fawad Khan
Fawad verdient seinen Lebensunterhalt mit Schreiben und liebt es ehrlich gesagt ziemlich. Seit Jahren beschäftigt er sich damit, was gute Texte einprägsam macht – und was dazu führt, dass Leser einfach weiterscrollen. Frag ihn nach Marketing, und er redet stundenlang. Frag ihn nach Carbonara, und er redet noch länger.
Inhaltsverzeichnis

Eine Webseite einfach per Anfrage scrapen

Sag einfach in normalem Deutsch, was du brauchst. Oder noch besser: sag gar nichts.

Thunderbit ausprobieren kostenlos
Daten mit KI extrahieren
Daten einfach zu Google Sheets, Airtable oder Notion übertragen
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week