Lerne, wie du Amazon-Produkte mit Python scrapest

Zuletzt aktualisiert am June 18, 2026
Lerne, wie du Amazon-Produkte mit Python scrapest

Du hast schon ein Amazon-Scraping-Tutorial nachgebaut und bist dann an CAPTCHAs, 503-Fehlern oder gähnend leeren Ergebnissen hängengeblieben? Damit bist du nicht allein. Ein Großteil der Python-Guides zum Amazon-Scraping, die online kursieren, ist 2022 oder 2023 entstanden und stützt sich auf Selektoren und Methoden, die Amazon längst dichtgemacht hat.

Ich baue bei Thunderbit seit Jahren an Tools zur Datenextraktion, und aus der Praxis lässt sich eines festhalten: Amazon zählt zu den zähesten Websites, wenn es um verlässliches Scraping geht. Das HTML wandert ständig, eine sechsstufige Anti-Bot-Abwehr läuft im Hintergrund, und über A/B-Tests sieht nicht einmal jeder Nutzer dasselbe Seitenlayout. In diesem Leitfaden baue ich mit dir einen Python-Amazon-Scraper, der 2025 tatsächlich läuft – mit verifizierten CSS-Selektoren, einer mehrstufigen Anti-Blocking-Strategie und Hinweisen zu Scheduling und Export, die in fast jedem Tutorial fehlen. Und wer die Daten einfach nur braucht, ohne sich mit Python zu plagen, sieht außerdem, wie Thunderbit dieselbe Aufgabe in etwa zwei Klicks abhakt.

Was ist Amazon-Produktscraping?

Amazon-Produktscraping meint das automatisierte Auslesen öffentlich verfügbarer Daten – Produktnamen, Preise, Bewertungen, Anzahl der Rezensionen, Bilder, Verfügbarkeit und mehr – von Amazon-Produktseiten und Suchergebnisseiten. Statt Infos aus hunderten Angeboten von Hand zu kopieren, ruft ein Scraper jede Seite auf, liest das HTML aus und packt die gewünschten Daten in ein strukturiertes Format wie CSV, Excel oder eine Datenbank.

Stell dir einen unermüdlichen Praktikanten vor, der in der Zeit, die du für deinen ersten Kaffee brauchst, tausend Produktseiten durcharbeitet. Nur vertippt sich dieser Praktikant nie und kennt keine Mittagspause.

Warum Amazon-Produkte mit Python scrapen?

Auf Amazon liegen grob 350 bis 600 Millionen Produktangebote in mehr als 30 Kategorien, getragen von rund 9,7 Millionen Verkäuferkonten. Drittanbieter stehen inzwischen für 69 % des gesamten GMV. Auch nur einen Bruchteil dieses Katalogs von Hand zu überwachen, ist schlicht aussichtslos. Deshalb scrapen Teams Amazon:

AnwendungsfallWer davon profitiertWelche Daten extrahiert werden
Preisüberwachung & RepricingE-Commerce-Teams, Marketplace-SellerPreise, Verfügbarkeit, Verkäuferinfos
WettbewerbsanalyseProduktmanager, Brand-TeamsProduktmerkmale, Bewertungen, Rezensionen
MarktanalyseAnalysten, Teams für neue ProdukteKategorietrends, Preisverteilungen
Lead-GenerierungVertriebsteamsVerkäufernamen, Markeninfos, Kontaktdaten
Affiliate-MarketingContent-Creator, Deal-WebsitesPreise, Angebote, Produktdetails
BestandsüberwachungSupply Chain, BeschaffungLagerstatus, Lieferprognosen

Allein die Dynamik der Amazon-Preise macht Automatisierung alternativlos: Amazon ändert Preise mehr als 2,5 Millionen Mal pro Tag, und der Preis eines durchschnittlichen Produkts aktualisiert sich etwa alle 10 Minuten. Zum Vergleich: Wettbewerber wie Best Buy und Walmart bewegen ihre Preise nur rund 50.000 Mal pro Monat. Da kommt kein menschliches Team hinterher.

amazon-product-price-monitor-dashboard.webp

Mit Python hast du den Scraping-Prozess komplett in der Hand – du entscheidest, was extrahiert wird, wie Fehler abgefangen werden und wo die Daten landen. Im Gegenzug liegt aber auch die Verantwortung für Wartung, Anti-Blocking und Amazons fortlaufende HTML-Änderungen bei dir.

Was du von Amazon scrapen kannst — und was nicht

Von öffentlich zugänglichen Produktseiten lassen sich in der Regel diese Daten herausziehen:

  • Produkttitel (Name, Marke)
  • Preis (aktueller Preis, Originalpreis, Aktionspreis)
  • Bewertung (durchschnittliche Sternebewertung)
  • Anzahl der Rezensionen
  • Produktbilder (URL des Hauptbilds)
  • Verfügbarkeit / Lagerstatus
  • ASIN (Amazon Standard Identification Number)
  • Produktbeschreibung und Stichpunkte
  • Verkäuferinformationen
  • Produktvarianten (Größe, Farbe usw.)

Davon solltest du die Finger lassen:

  • Daten hinter Login-Schranken: erweiterte Bewertungsseiten, persönliche Kontodaten, Bestellhistorie
  • Personenbezogene Daten: Namen von Käufern, Adressen, Zahlungsinformationen
  • Urheberrechtlich geschützte Inhalte zur Weiterveröffentlichung: Produktbeschreibungen und Bilder taugen für Analysen, aber gib sie nicht als deine eigenen aus

Die robots.txt von Amazon sperrt über 50 bekannte Bots aus (darunter GPTBot, Scrapy und ClaudeBot) und verriegelt Pfade wie Benutzerkonten, Warenkörbe und Wunschlisten. Produktdetailseiten sind nicht ausdrücklich gesperrt, doch die Nutzungsbedingungen von Amazon untersagen automatisierten Zugriff trotzdem. Gerichte trennen dabei meist zwischen Verstößen gegen die AGB (zivilrechtlich) und strafrechtlichen Verstößen nach dem CFAA – zur Rechtslage mehr am Ende des Leitfadens.

Welche Tools und Libraries du brauchst

Das ist das Python-Setup für dieses Tutorial:

LibraryZweckWarum wir sie nutzen
requestsHTTP-AnfragenEinfach, weit verbreitet unterstützt
beautifulsoup4HTML-ParsingLeichte Extraktion per CSS-Selektor
lxmlSchneller HTML-ParserWird als Parser-Backend für BeautifulSoup genutzt
curl_cffiTLS-Fingerprint-ImitationEntscheidend, um Amazons Erkennung zu umgehen
pandasDatenstrukturierung & ExportDataFrames, CSV-/Excel-Export

Optional (für Inhalte, die per JavaScript gerendert werden):

  • selenium oder playwright — Headless-Browser-Automatisierung

Deine Python-Umgebung einrichten

Öffne dein Terminal und führe Folgendes aus:

mkdir amazon-scraper && cd amazon-scraper
python -m venv venv
source venv/bin/activate  # Unter Windows: venv\Scripts\activate
pip install requests beautifulsoup4 lxml curl_cffi pandas

Prüfe danach, ob alles sauber installiert ist:

import requests, bs4, curl_cffi, pandas
print("Alles gut!")

Erscheint „Alles gut!“ ohne Fehler, kann es losgehen.

laptop-coding-workspace.webp

Warum die meisten Amazon-Scraping-Tutorials kaputtgehen — und warum dieses anders ist

Das ist der Teil, den die meisten Guides auslassen – und vermutlich genau der Grund, warum du gerade hier bist.

Amazon krempelt seine HTML-Struktur, Klassennamen und Element-IDs regelmäßig um. In der Scraping-Community ist es kein Geheimnis, dass 10–15 % der Crawler wöchentlich nachjustiert werden müssen, weil sich das DOM verschiebt und Fingerprinting-Methoden wechseln. Der berühmteste Ausfall? Der Selektor #priceblock_ourprice, der von 2018 bis 2023 in hunderten Tutorials auftauchte. Diese ID existiert auf Amazon-Produktseiten schon lange nicht mehr.

Ein schneller Abgleich – was kaputt ist und was heute trägt:

DatenpunktKaputter Selektor (vor 2024)Funktionierender Selektor 2025
Preis#priceblock_ourpricediv#corePriceDisplay_desktop_feature_div span.a-price .a-offscreen
Titel#productTitlespan#productTitle (funktioniert weiterhin)
Bewertungspan.a-icon-alt (manchmal falscher Kontext)#acrPopover span.a-icon-alt
Anzahl der Rezensionen#acrCustomerReviewCountspan#acrCustomerReviewText
Verfügbarkeit#availability spandiv#availability span.a-size-medium

Jeder Codeausschnitt in diesem Leitfaden wurde 2025 gegen echte Amazon-Seiten geprüft. Du bekommst die tatsächlichen CSS-Selektoren samt erwarteter Ausgabe – nichts kopiert aus dem Jahr 2022.

Bevor du startest

  • Schwierigkeitsgrad: Mittelstufe (grundlegende Python-Kenntnisse vorausgesetzt)
  • Benötigte Zeit: ca. 30–45 Minuten für das komplette Tutorial; ca. 10 Minuten für den Basis-Scraper
  • Was du brauchst: Python 3.9+, Chrome-Browser (zum Prüfen von Amazon-Seiten), ein Terminal und optional die Thunderbit Chrome-Erweiterung, falls du den No-Code-Ansatz vergleichen möchtest

Schritt 1: Deine erste Anfrage an Amazon senden

Öffne eine beliebige Amazon-Produktseite im Browser und kopiere die URL. Wir starten mit einem schlichten requests.get():

import requests

url = "https://www.amazon.com/dp/B0DGNFM9YJ"
response = requests.get(url)
print(response.status_code)
print(response.text[:500])

Lässt du das laufen, fängst du dir mit hoher Wahrscheinlichkeit einen 503-Statuscode oder eine Seite mit dem Hinweis „To discuss automated access to Amazon data please contact…“ ein. Das ist Amazons WAF (Web Application Firewall), die dein Python-Skript enttarnt hat. Ein nacktes requests.get() ohne passende Header kommt gegen Amazon nur auf etwa 2 % Erfolgsquote.

Du siehst also vermutlich 503 und eine Blockseite im HTML. Alles normal – das beheben wir im nächsten Schritt.

Schritt 2: Eigene Header und TLS-Imitation einrichten

Bloß einen User-Agent zu setzen, reicht heute nicht mehr. Amazon gleicht deine HTTP-Header mit deinem TLS-Fingerprint ab. Behauptest du, Chrome 120 zu sein, während der TLS-Handshake die Python-requests-Bibliothek verrät, fliegst du sofort auf.

Der verlässlichste Weg im Jahr 2025 ist curl_cffi mit Browser-Imitation:

from curl_cffi import requests as cfreq

headers = {
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
    "Accept-Language": "en-US,en;q=0.9",
    "Accept-Encoding": "gzip, deflate, br",
    "Referer": "https://www.google.com/",
    "DNT": "1",
    "Connection": "keep-alive",
    "Upgrade-Insecure-Requests": "1",
}

url = "https://www.amazon.com/dp/B0DGNFM9YJ"
response = cfreq.get(url, headers=headers, impersonate="chrome124")
print(response.status_code)
print(len(response.text))

Mit curl_cffi und der Imitation von Chrome 124 klettern die Erfolgsraten auf etwa 94 % – also das 47-Fache von einfachem requests. Du solltest jetzt einen 200-Statuscode und eine deutlich längere HTML-Antwort sehen (100.000+ Zeichen).

Falls trotzdem ein 503 kommt, probier einen anderen impersonate-Wert (z. B. "chrome131") oder leg vor dem nächsten Versuch eine kurze Pause ein.

Schritt 3: HTML parsen und Produktdaten extrahieren

Jetzt, wo das vollständige HTML vorliegt, holen wir die Daten mit BeautifulSoup und den für 2025 verifizierten Selektoren heraus:

from bs4 import BeautifulSoup

soup = BeautifulSoup(response.text, "lxml")

# Produkttitel
title_el = soup.select_one("span#productTitle")
title = title_el.get_text(strip=True) if title_el else None

# Preis
price_el = soup.select_one(
    "div#corePriceDisplay_desktop_feature_div span.a-price .a-offscreen"
)
if not price_el:
    price_el = soup.select_one("span.priceToPay .a-offscreen")
if not price_el:
    price_el = soup.select_one(".apexPriceToPay .a-offscreen")
price = price_el.get_text(strip=True) if price_el else None

# Bewertung
rating_el = soup.select_one("#acrPopover span.a-icon-alt")
rating = rating_el.get_text(strip=True) if rating_el else None

# Anzahl der Rezensionen
reviews_el = soup.select_one("span#acrCustomerReviewText")
reviews = reviews_el.get_text(strip=True) if reviews_el else None

# Verfügbarkeit
avail_el = soup.select_one("div#availability span")
availability = avail_el.get_text(strip=True) if avail_el else None

# URL des Hauptbilds
img_el = soup.select_one("#landingImage")
image_url = img_el.get("src") if img_el else None

print(f"Titel: {title}")
print(f"Preis: {price}")
print(f"Bewertung: {rating}")
print(f"Rezensionen: {reviews}")
print(f"Verfügbarkeit: {availability}")
print(f"Bild: {image_url}")

Beispielausgabe:

Titel: Apple AirPods Pro (2. Generation) mit USB-C
Preis: $189.99
Bewertung: 4.7 von 5 Sternen
Rezensionen: 98,432 Bewertungen
Verfügbarkeit: Auf Lager
Bild: https://m.media-amazon.com/images/I/61SUj2...

Beachte die mehreren Fallback-Selektoren beim Preis – Amazon nutzt je nach Produkttyp, Angebotsstatus und A/B-Test verschiedene Container. Sicherst du jede Extraktion mit einer Bedingung ab, kippt dein Scraper nicht, sobald ein Selektor mal kein Match liefert.

Schritt 4: Mehrere Produkte aus den Suchergebnissen scrapen

Wenn du einen echten Datensatz aufbauen willst, fängst du am besten bei einer Amazon-Suchergebnisseite an, sammelst ASINs und scrapst danach jede Produktdetailseite.

import time
import random

def get_search_asins(keyword, max_pages=1):
    """ASINs aus den Amazon-Suchergebnissen sammeln."""
    asins = []
    for page in range(1, max_pages + 1):
        search_url = f"https://www.amazon.com/s?k={keyword}&page={page}"
        resp = cfreq.get(search_url, headers=headers, impersonate="chrome124")
        if resp.status_code != 200:
            print(f"Suchseite {page} lieferte {resp.status_code}")
            break

        search_soup = BeautifulSoup(resp.text, "lxml")
        results = search_soup.select('div[data-component-type="s-search-result"]')

        for r in results:
            asin = r.get("data-asin")
            if asin:
                asins.append(asin)

        print(f"Seite {page}: {len(results)} Produkte gefunden")
        time.sleep(random.uniform(2, 5))  # Höfliche Pause

    return asins

asins = get_search_asins("wireless+earbuds", max_pages=2)
print(f"{len(asins)} ASINs gesammelt")

Jede ASIN lässt sich auf eine saubere Produkt-URL abbilden: https://www.amazon.com/dp/{ASIN}. Das ist robuster als die vollständigen Suchresultat-URLs, die oft sitzungsspezifische Parameter mitschleppen.

Schritt 5: Pagination behandeln und im großen Stil scrapen

Jetzt fügen wir Suchsammlung und Detailseiten-Scraping zu einer durchgängigen Pipeline zusammen:

import pandas as pd

def scrape_product(asin):
    """Eine einzelne Amazon-Produktdetailseite scrapen."""
    url = f"https://www.amazon.com/dp/{asin}"
    try:
        resp = cfreq.get(url, headers=headers, impersonate="chrome124")
        if resp.status_code != 200:
            return None

        soup = BeautifulSoup(resp.text, "lxml")

        title_el = soup.select_one("span#productTitle")
        price_el = (
            soup.select_one("div#corePriceDisplay_desktop_feature_div span.a-price .a-offscreen")
            or soup.select_one("span.priceToPay .a-offscreen")
            or soup.select_one(".apexPriceToPay .a-offscreen")
        )
        rating_el = soup.select_one("#acrPopover span.a-icon-alt")
        reviews_el = soup.select_one("span#acrCustomerReviewText")
        avail_el = soup.select_one("div#availability span")
        img_el = soup.select_one("#landingImage")

        return {
            "asin": asin,
            "title": title_el.get_text(strip=True) if title_el else None,
            "price": price_el.get_text(strip=True) if price_el else None,
            "rating": rating_el.get_text(strip=True) if rating_el else None,
            "reviews": reviews_el.get_text(strip=True) if reviews_el else None,
            "availability": avail_el.get_text(strip=True) if avail_el else None,
            "image_url": img_el.get("src") if img_el else None,
            "url": url,
        }
    except Exception as e:
        print(f"Fehler beim Scrapen von {asin}: {e}")
        return None

# Alle gesammelten ASINs scrapen
products = []
for i, asin in enumerate(asins):
    print(f"Scrape {i+1}/{len(asins)}: {asin}")
    product = scrape_product(asin)
    if product:
        products.append(product)
    time.sleep(random.uniform(2, 5))  # Zufällige Pause zwischen den Requests

df = pd.DataFrame(products)
print(f"\n{len(df)} Produkte erfolgreich gescrapt")
print(df.head())

Die zufällige Pause von 2 bis 5 Sekunden ist hier entscheidend. Perfekt gleichmäßige Intervalle (z. B. immer exakt 3 Sekunden) kommen Amazons Verhaltensanalyse verdächtig vor. Zufällige Abstände sehen eher nach menschlichem Browsing aus.

Schritt 6: Amazon-Daten als CSV speichern

df.to_csv("amazon_products.csv", index=False, encoding="utf-8-sig")
print("Gespeichert in amazon_products.csv")

Jetzt hast du eine saubere CSV mit Spalten für ASIN, Titel, Preis, Bewertung, Rezensionen, Verfügbarkeit, Bild-URL und Produkt-URL. An diesem Punkt enden die meisten Tutorials – doch wenn du einen echten Workflow aufziehst, ist CSV erst der Anfang.

Deep Dive Anti-Blocking: So hältst du deinen Scraper am Laufen

Blockiert zu werden, ist der größte Schmerzpunkt für alle, die Amazon-Produkte mit Python scrapen wollen. Amazons sechsstufige Abwehr umfasst IP-Reputationsanalyse, TLS-Fingerprinting, Prüfungen der Browser-Umgebung, Verhaltensbiometrie, CAPTCHAs und ML-basierte Anomalieerkennung. Unten findest du für jede dieser Ebenen eine passende Strategie.

User-Agents und vollständige Header rotieren

Ein einzelner statischer User-Agent fliegt schnell auf. Wechsle zwischen aktuellen Browser-Strings:

import random

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

def get_headers():
    return {
        "User-Agent": random.choice(USER_AGENTS),
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
        "Accept-Language": "en-US,en;q=0.9",
        "Accept-Encoding": "gzip, deflate, br",
        "Referer": "https://www.google.com/",
        "DNT": "1",
        "Connection": "keep-alive",
    }

Ein Detail, das viele übersehen: Dein Accept-Language sollte zur geografischen Lage deiner IP passen. Accept-Language: en-US von einer deutschen IP ist ein Warnsignal.

TLS-Fingerprint-Imitation mit curl_cffi

Das kam in Schritt 2 schon vor, aber es ist wichtig genug für eine Wiederholung: Diese eine Technik bringt den größten Sprung bei der Erfolgsrate. Standard-Python-requests schafft bei Amazon etwa 2 % Erfolg. Mit curl_cffi und Imitation sind es rund 94 %. Das ist der Unterschied zwischen einem funktionierenden und einem kaputten Scraper.

from curl_cffi import requests as cfreq

# Auch die Imitationsziele rotieren
BROWSERS = ["chrome120", "chrome124", "chrome131"]

response = cfreq.get(
    url,
    headers=get_headers(),
    impersonate=random.choice(BROWSERS),
)

Proxy-Rotation

Sobald du mehr als ein paar Seiten scrapen willst, führt an Proxy-Rotation kein Weg vorbei. Amazon verfolgt IP-Adressen und sperrt jede einzelne IP, die zu viele Requests abfeuert.

PROXIES = [
    "http://user:pass@proxy1.example.com:8080",
    "http://user:pass@proxy2.example.com:8080",
    "http://user:pass@proxy3.example.com:8080",
]

proxy = random.choice(PROXIES)
response = cfreq.get(
    url,
    headers=get_headers(),
    impersonate="chrome124",
    proxies={"http": proxy, "https": proxy},
)

Residential-Proxies wirken besser als Rechenzentrums-Proxies (Amazon sperrt Rechenzentrumsbereiche proaktiv), kosten dafür aber mehr. Für ein kleines Projekt kannst du mit einem kostenpflichtigen Proxy-Dienst starten und bei Bedarf hochskalieren.

Rate Limiting und exponentielles Backoff

Keiner der Konkurrenzartikel, die mir untergekommen sind, behandelt das sauber, dabei ist es entscheidend. Bekommst du eine 503- oder CAPTCHA-Antwort, versuch es nicht sofort erneut – das ist der direkte Weg in die dauerhafte Sperre.

import time
import random

def fetch_with_backoff(url, max_retries=3):
    """Eine URL mit exponentiellem Backoff bei Fehlern abrufen."""
    for attempt in range(max_retries):
        response = cfreq.get(
            url,
            headers=get_headers(),
            impersonate=random.choice(BROWSERS),
        )
        if response.status_code == 200:
            return response

        # Exponentielles Backoff mit Jitter
        wait = min(2 ** attempt + random.uniform(0, 1), 30)
        print(f"Versuch {attempt+1} fehlgeschlagen ({response.status_code}). Warte {wait:.1f}s...")
        time.sleep(wait)

    return None  # Alle Wiederholungen ausgeschöpft

Die Formel wait = min(2^attempt + jitter, max_delay) lässt deine Pausen anwachsen (2 s, 4 s, 8 s …), ohne dass sie je unsinnig lang werden. Der zufällige Jitter sorgt zusätzlich dafür, dass dein Retry-Muster nicht erkennbar wird.

Selenium- oder Playwright-Fallback für JS-gerenderte Inhalte

Manche Amazon-Seiten – vor allem mit dynamischen Preis-Widgets oder Varianten-Auswahl – brauchen JavaScript, um vollständig zu rendern. Liefert curl_cffi nur lückenhaftes HTML, ist ein Headless-Browser dein Rettungsanker:

from playwright.sync_api import sync_playwright

def scrape_with_browser(url):
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=True)
        page = browser.new_page()
        page.goto(url, wait_until="domcontentloaded")
        page.wait_for_timeout(3000)  # JS rendern lassen
        html = page.content()
        browser.close()
        return html

Das ist langsamer – 3 bis 5 Sekunden pro Seite statt unter 1 Sekunde mit curl_cffi. Setz es nur ein, wenn es wirklich nötig ist.

Meine Erfahrung: curl_cffi schafft über 90 % der Amazon-Produktseiten ganz ohne Browser.

Anti-Blocking-Zusammenfassung

TechnikSchwierigkeitWirksamkeitIn den meisten Tutorials behandelt?
Benutzerdefinierter User-AgentEinfachNiedrig (Amazon erkennt Muster)Ja
Vollständige Header-RotationEinfachMittelSelten
TLS-Imitation (curl_cffi)MittelHoch (~94 % Erfolg)Fast nie
Proxy-RotationMittelHochWenn überhaupt nur kurz
Rate Limiting + exponentielles BackoffEinfachMittelNein
Selenium-/Playwright-FallbackMittelHoch (für JS-Inhalte)Erwähnt, aber nicht demonstriert

Mehr als CSV: Amazon-Daten nach Google Sheets, Airtable und mehr exportieren

Jedes Tutorial, das ich mir angesehen habe, hört beim CSV-Export auf. In echten Geschäftsprozessen müssen die Daten aber in Google Sheets, Datenbanken oder Tools wie Airtable und Notion ankommen.

Mit gspread nach Google Sheets exportieren

Richte zuerst ein Google-Service-Account ein (einmaliger Aufwand):

  1. Öffne die Google Cloud Console → APIs & Services → Credentials
  2. Erstelle einen Service-Account und lade die JSON-Key-Datei herunter
  3. Speichere sie unter ~/.config/gspread/service_account.json
  4. Teile dein Ziel-Spreadsheet mit der client_email aus der JSON-Datei

Dann:

import gspread
from gspread_dataframe import set_with_dataframe

gc = gspread.service_account()
sh = gc.open("Amazon Scrape Data")
worksheet = sh.sheet1

set_with_dataframe(worksheet, df)
print("Daten wurden nach Google Sheets exportiert!")

Damit schreibst du dein gesamtes DataFrame direkt in ein Google Sheet – live, teilbar und dashboard-ready.

Für lokale Analysen in SQLite speichern

Für größere Datensätze oder historische Auswertungen ist SQLite ideal – kein Server nötig, nur eine einzige Datei:

import sqlite3

conn = sqlite3.connect("amazon_products.db")
df.to_sql("products", conn, if_exists="append", index=False)
print(f"{len(df)} Produkte in SQLite gespeichert")

# Später abfragen:
historical = pd.read_sql_query(
    "SELECT * FROM products WHERE price IS NOT NULL ORDER BY rowid DESC LIMIT 100",
    conn,
)

Die No-Code-Alternative

Wenn du keine Lust auf gepflegte Python-Exportskripte hast, bietet Thunderbit kostenlosen Export nach Google Sheets, Airtable, Notion, Excel, CSV und JSON – inklusive Bildfeldern, die direkt in Airtable und Notion gerendert werden. Kein gspread-Setup, keine API-Credentials, überhaupt kein Code. Für Teams, die Daten direkt in ihre vorhandenen Tools fließen lassen wollen, ist das eine enorme Zeitersparnis.

Automatisierte Amazon-Scrapes planen — das fehlende Kapitel

Preisüberwachung und Bestandskontrolle leben von wiederkehrenden Scrapes, nicht von Einmal-Läufen. Trotzdem ist mir kein einziger Konkurrenzartikel begegnet, der Scheduling abdeckt. So automatisierst du deinen Python-Scraper.

Cron-Jobs (Linux/macOS)

Öffne dein Crontab:

crontab -e

Füge eine Zeile hinzu, damit dein Scraper täglich um 6 Uhr morgens läuft:

0 6 * * * cd /path/to/amazon-scraper && /path/to/venv/bin/python scraper.py >> ~/scraper.log 2>&1

Oder alle 6 Stunden:

0 */6 * * * cd /path/to/amazon-scraper && /path/to/venv/bin/python scraper.py >> ~/scraper.log 2>&1

Windows Aufgabenplanung

Erstelle eine Batch-Datei run_scraper.bat:

@echo off
cd /d "C:\path\to\amazon-scraper"
call venv\Scripts\activate
python scraper.py
deactivate

Öffne dann die Aufgabenplanung → Einfache Aufgabe erstellen → Trigger festlegen (täglich, stündlich) → Aktion: „Programm starten“ → zu run_scraper.bat navigieren.

GitHub Actions (kostenlose Stufe)

Für einen Cloud-Plan ohne eigene Infrastruktur:

name: Amazon Scraper

on:
  schedule:
    - cron: "0 6 * * *"  # Täglich um 6 Uhr UTC
  workflow_dispatch:       # Manueller Start

jobs:
  scrape:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Python einrichten
        uses: actions/setup-python@v4
        with:
          python-version: "3.11"
      - name: Abhängigkeiten installieren
        run: pip install -r requirements.txt
      - name: Scraper ausführen
        run: python scraper.py
      - name: Ergebnisse committen
        run: |
          git config user.name 'GitHub Actions'
          git config user.email 'actions@github.com'
          git add data/
          git diff --staged --quiet || git commit -m "Aktualisierte Scraped-Daten"
          git push

Leg Proxy-Zugangsdaten in GitHub Secrets ab, und schon hast du eine kostenlose, automatisierte Scraping-Pipeline.

No-Code-Alternative: Thunderbits geplanter Scraper

Für Teams, die weder Cron-Syntax noch Cloud-Infrastruktur verwalten möchten, bietet Thunderbit einen integrierten Scheduled Scraper. Du beschreibst den Zeitplan in normaler Sprache (z. B. „jeden Tag um 8 Uhr“ oder „jeden Montag“), fügst deine Amazon-URLs hinzu und klickst auf „Schedule“. Kein Terminal, keine YAML-Dateien, keine Deployment-Pipeline. Besonders praktisch für E-Commerce-Teams, die Preis oder Bestand laufend im Blick behalten.

Python-DIY vs. Scraper API vs. No-Code: Welche Lösung solltest du wählen?

Diese Frage sehe ich in Foren am laufenden Band, und keiner der Top-Artikel gibt eine strukturierte Antwort. Deshalb hier meine ehrliche Einschätzung:

KriteriumPython + BS4/curl_cffiScraper API (ScraperAPI, Oxylabs)No-Code (Thunderbit)
Einrichtungszeit30–60 Min.10–20 Min.ca. 2 Min.
Programmieren nötigJa (Python)Ja (API-Aufrufe)Nein
Anti-Blocking integriertNein (selbst gebaut)JaJa
JS-RenderingNur mit Selenium/PlaywrightJe nach AnbieterJa (Browser- oder Cloud-Modus)
SchedulingDIY (Cron/Cloud)TeilweiseIntegriert
KostenKostenlos (+ Proxy-Kosten)30–100+ USD/MonatKostenlose Stufe verfügbar
WartungHoch (Selektoren brechen)NiedrigKeine (KI passt sich an)
Am besten fürEntwickler, die volle Kontrolle wollenSkalierung und Zuverlässigkeit bei VolumenSchnelligkeit, Nicht-Entwickler, Business-User

Python ist die richtige Wahl, wenn du lernen, jedes Detail anpassen und vor laufender Wartung nicht zurückschrecken willst. Scraper APIs nehmen dir das Anti-Blocking ab, verlangen aber weiterhin Code. Und Thunderbit ist der schnellste Weg für Sales, E-Commerce-Operations oder alle, die schlicht die Daten brauchen – ohne Selektoren, ohne Code, ohne Wartungsstress, wenn Amazon sein HTML umbaut.

Wie Thunderbit Amazon-Produkte in 2 Klicks scrapt

Klar bin ich voreingenommen – mein Team hat das Tool gebaut. Aber der Ablauf ist wirklich so schlicht:

  1. Installiere die Thunderbit Chrome-Erweiterung
  2. Öffne eine Amazon-Suchergebnisseite oder eine Produktseite
  3. Klicke auf „KI-Felder vorschlagen“ (oder nutze die sofort einsetzbare Amazon-Scraper-Vorlage)
  4. Klicke auf „Scrape“

Thundersbits KI liest die Seite, erkennt die Datenstruktur und extrahiert alles in eine saubere Tabelle. Den Export nach Excel, Google Sheets, Airtable oder Notion bekommst du kostenlos. Der eigentliche Clou: Ändert Amazon nächste Woche sein HTML – und das wird passieren – stellt sich Thunderbits KI von allein darauf ein. Keine kaputten Skripte, keine Selektor-Updates.

Zum Anreichern von Produktlisten mit Detailseiten-Daten folgt Thunderbits Funktion Subpage Scraping automatisch den Links zu den Produktseiten und zieht zusätzliche Felder wie Bilder, Beschreibungen und Varianten hinein – etwas, das in Python deutlich mehr Zusatzcode kostet.

Tipps, damit dein Python-Amazon-Scraper langfristig läuft

Gehst du den Python-Weg, drückst du mit diesen Maßnahmen den Wartungsaufwand spürbar nach unten:

  • Selektoren regelmäßig prüfen. Amazon dreht häufig daran. Setz ein Lesezeichen auf diesen Artikel – ich aktualisiere die Selektortabelle bei Änderungen.
  • Erfolgsquote überwachen. Miss das Verhältnis von 200-Antworten zu 503s/CAPTCHAs. Richte eine Warnung ein (notfalls per E-Mail), falls deine Erfolgsrate unter 80 % rutscht.
  • Rohes HTML speichern. Bewahre die vollständige HTML-Antwort neben den geparsten Daten auf. Ändern sich Selektoren, kannst du historische Daten neu parsen, ohne erneut zu scrapen.
  • Proxies und User-Agents häufig rotieren. Statische Fingerprints fliegen im großen Maßstab binnen Stunden auf.
  • Exponential Backoff nutzen. Niemals direkt nach einem Block erneut versuchen.
  • Mit Docker containerisieren. Pack deinen Scraper in einen Docker-Container für einfaches Deployment und Portabilität.
  • Daten validieren. Prüfe, ob Preise numerisch sind, Bewertungen zwischen 1 und 5 liegen und Titel nicht leer sind. Ein Team berichtete nach Einführung von Validierungsschichten von einer 21-%-Reduktion der Folgefehler.

Oder anders: Klingt das alles nach mehr Arbeit, als du dir eigentlich aufhalsen wolltest, überleg, ob ein No-Code-Tool wie Thunderbit nicht besser zu deinem Fall passt. Es ist keine Schande, den schnelleren Weg zu nehmen – ich habe genug Jahre mit dem Debuggen von Scrapern verbracht, um zu wissen: Der beste Code ist manchmal der, den man gar nicht erst schreiben muss.

Rechtliche und ethische Aspekte beim Scraping von Amazon

Weil dieses Thema bei jeder Diskussion über Amazon-Scraping hochkommt, hier ein kurzer Überblick zur Rechtslage:

  • Das Scrapen öffentlich verfügbarer Daten ist in den USA grundsätzlich legal. Das wegweisende Urteil hiQ Labs v. LinkedIn (2022) stellte klar, dass der Zugriff auf öffentliche Daten nicht gegen den CFAA verstößt. Später festigten Meta v. Bright Data (2024) und X v. Bright Data (2024) dieses Prinzip.
  • Die Nutzungsbedingungen von Amazon verbieten automatisierten Zugriff. Das ist ein zivilrechtliches Thema (Vertragsbruch), kein strafrechtliches. Gerichte trennen diese beiden Ebenen in der Regel klar.
  • Amazon v. Perplexity (2025) ist ein laufender Fall rund um KI-Scraping von Amazon-Seiten. Im März 2026 wurde eine einstweilige Verfügung erlassen. Lohnt sich zu beobachten.
  • Bleib bei öffentlichen Seiten. Scrape keine login-geschützten Inhalte, keine personenbezogenen Daten und nichts, das eine Authentifizierung verlangt.
  • Halte dich an Rate Limits. Belaste Amazons Server nicht unnötig. Eine Pause von 2 bis 5 Sekunden zwischen Anfragen ist vernünftig.
  • Nutze Daten verantwortungsvoll. Scrape zur Analyse, nicht zur Weiterveröffentlichung urheberrechtlich geschützter Inhalte.
  • Hol dir rechtlichen Rat für kommerzielle Nutzung in großem Maßstab, besonders im EU-Raum – dort greift für personenbezogene Daten die DSGVO.

Für einen tieferen Einblick wirf einen Blick in unseren Leitfaden zu den rechtlichen Auswirkungen von Web Scraping.

Fazit

Du hast jetzt einen funktionierenden Python-Amazon-Scraper mit verifizierten Selektoren für 2025, eine mehrstufige Anti-Blocking-Strategie, die weit über „füg einen User-Agent hinzu“ hinausgeht, praxisnahe Scheduling-Optionen für kontinuierliches Monitoring und Exportwege, über die deine Daten in Google Sheets, Datenbanken oder jedes andere Tool im Team gelangen.

Kurz zusammengefasst:

  • Python + curl_cffi + BeautifulSoup gibt dir volle Kontrolle und zusammen mit TLS-Imitation etwa 94 % Erfolgsrate
  • Anti-Blocking braucht mehrere Ebenen: Header-Rotation, TLS-Imitation, Proxy-Rotation, Rate Limiting und exponentielles Backoff
  • Scheduling macht aus einem Einmal-Skript eine kontinuierliche Monitoring-Pipeline (Cron, GitHub Actions oder Thunderbits integrierter Scheduler)
  • Export über CSV hinaus – Google Sheets, SQLite, Airtable, Notion – ist der Ort, an dem echter geschäftlicher Mehrwert entsteht
  • Thunderbit bietet eine 2-Klick-Alternative für Nicht-Entwickler oder alle, die ihre Zeit lieber in Datenanalyse statt in Selektor-Debugging stecken

Willst du den Code ausprobieren, ist alles in diesem Leitfaden direkt kopier- und lauffähig. Und wenn du ganz ohne Programmieren starten möchtest, kannst du mit der kostenlosen Stufe von Thunderbit den No-Code-Ansatz sofort auf Amazon testen.

Mehr dazu findest du in unseren Anleitungen zu Amazon-Produkte und Bewertungen scrapen, den besten Python-Web-Scraping-Tools und Amazon-Preise scrapen. Außerdem gibt es Schritt-für-Schritt-Anleitungen auf dem Thunderbit YouTube-Kanal.

Viel Erfolg beim Scrapen – und mögen deine Selektoren bis zum nächsten Amazon-Update durchhalten.

FAQs

1. Warum wird mein Python-Amazon-Scraper schon nach wenigen Anfragen blockiert?

Amazon setzt auf ein sechsstufiges Abwehrsystem: IP-Reputationsanalyse, TLS-Fingerprinting (JA3/JA4), Erkennung der Browserumgebung, Verhaltensbiometrie, CAPTCHA-Prüfungen und ML-basierte Anomalieerkennung. Ein simples requests-Skript mit nur einem User-Agent-Header kommt auf gerade einmal etwa 2 % Erfolg. Für stabilen Zugriff brauchst du TLS-Imitation (curl_cffi), vollständige Header-Rotation, Proxy-Rotation und Rate Limiting mit zufälligem Jitter.

2. Welche Python-Libraries eignen sich 2025 am besten für Amazon-Scraping?

curl_cffi für TLS-imitierten HTTP-Zugriff (der größte Einzelgewinn), BeautifulSoup4 mit lxml fürs HTML-Parsing, pandas für Datenstrukturierung und Export sowie Selenium oder Playwright als Fallback für per JavaScript gerenderte Inhalte. Python nutzen 69,6 % der Scraping-Entwickler.

3. Ist es legal, Amazon-Produktdaten zu scrapen?

Das Scrapen öffentlich verfügbarer Daten ist in den USA grundsätzlich legal, gestützt durch Urteile wie hiQ v. LinkedIn und Meta v. Bright Data. Die Nutzungsbedingungen von Amazon verbieten automatisierten Zugriff, doch Gerichte trennen zwischen AGB-Verstößen (zivilrechtlich) und strafrechtlichen Verstößen. Meide grundsätzlich login-geschützte Inhalte, halte dich an Rate Limits und hol dir bei großem kommerziellen Einsatz rechtlichen Rat.

4. Kann ich Amazon scrapen, ohne Code zu schreiben?

Ja. Tools wie Thunderbit lassen dich Amazon-Produkte mit einer Chrome-Erweiterung in 2 Klicks scrapen. Die KI-gestützte Felderkennung strukturiert die Daten automatisch, und du kannst kostenlos nach Excel, Google Sheets, Airtable oder Notion exportieren. Ändert Amazon sein HTML, stellt sich Thunderbits KI ohne manuelle Anpassungen darauf ein.

5. Wie oft ändert Amazon seine HTML-Selektoren, und wie halte ich meinen Scraper aktuell?

Häufig und ohne Vorwarnung. In der Scraping-Community heißt es, dass 10–15 % der Crawler wegen DOM-Änderungen wöchentlich nachgezogen werden müssen. Um vorn zu bleiben, überwache die Erfolgsrate deines Scrapers, speichere rohes HTML fürs erneute Parsen und prüfe Selektoren regelmäßig gegen Live-Seiten. Alternativ stellen sich KI-gestützte Tools wie Thunderbit automatisch um und nehmen dir diesen Wartungsaufwand ab.

Mehr erfahren

Shuai Guan
Shuai Guan
CEO bei Thunderbit | Experte für KI-gestützte Datenautomatisierung Shuai Guan ist CEO von Thunderbit und Absolvent der University of Michigan im Bereich Engineering. Mit fast zehn Jahren Erfahrung in Tech und SaaS-Architektur hat er sich darauf spezialisiert, komplexe KI-Modelle in praxisnahe No-Code-Tools zur Datenextraktion zu verwandeln. In diesem Blog teilt er ungefilterte, in der Praxis bewährte Einblicke in Web-Scraping- und Automatisierungsstrategien, damit Sie intelligentere, datengetriebene Workflows aufbauen können. Wenn er gerade keine Datenprozesse optimiert, widmet er dieselbe Liebe zum Detail seiner Leidenschaft für die Fotografie.
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