Auf jeder Amazon-Produktseite mit mehr als einem Verkäufer gewinnt genau ein Angebot den Hauptplatz neben den Schaltflächen „In den Warenkorb" und „Jetzt kaufen". Dieser Platz ist die Buy Box, und er trägt den überwältigenden Großteil der Verkäufe eines Angebots. Studien beziffern rund 90 % der Amazon-Käufe über die Buy Box statt über die weiter unten auf der Seite vergrabene Liste „Andere Verkäufer". Für einen Verkäufer, der auf einem geteilten Angebot konkurriert, ist das Gewinnen oder Verlieren der Buy Box der Unterschied zwischen einem stetigen Auftragsstrom und nahezu Stille.
Diese Anleitung zeigt Ihnen, wie Sie Amazon-Buy-Box-Daten mit Python scrapen, um das Gewinnerangebot im Laufe der Zeit zu verfolgen. Sie entwickeln einen kleinen, lauffähigen Scraper, der eine gerenderte Produktseite über die Crawling API abruft, sie mit BeautifulSoup parst und die Felder extrahiert, die die aktuelle Buy Box definieren: den Gewinnpreis, den Verkäufer, wer die Bestellung ausführt, und die Verfügbarkeit. Die gesamte Anleitung beschränkt sich auf öffentliche Produktseitendaten. Der Abschnitt zur Rechtslage am Ende ist es wert, gelesen zu werden, bevor Sie dies auf größere Datenmengen ansetzen.
Was Sie entwickeln werden
Ein Python-Skript, das eine Amazon-Produkt-URL entgegennimmt, die gerenderte Seite über die Crawling API abruft und einen strukturierten Datensatz extrahiert, der den aktuellen Buy-Box-Gewinner beschreibt. Als laufendes Beispiel verwenden wir ein einzelnes Motorola-Telefonangebot und lesen folgende Felder:
- Produkttitel der Name des in der Buy Box enthaltenen Produkts.
- Preis der aktuelle Preis des Gewinnerangebots, der sich ändert, wenn Verkäufer konkurrieren.
- Verkäufername wer derzeit die Buy Box hält, ob Amazon selbst oder ein Drittanbieter.
- Versandname wer die Bestellung ausführt, was Ihnen FBA (Versand durch Amazon) versus händlererfülltem Versand anzeigt.
- Verfügbarkeit der Auf-Lager-Status, der neben dem Angebot angezeigt wird.
- Jetzt kaufen / In den Warenkorb ob die Kaufschaltflächen vorhanden sind, was eine aktive Buy Box bestätigt, statt eines nicht verfügbaren Angebots.
Was die Amazon-Buy-Box ist und warum Verkäufer sie verfolgen
Die Buy Box ist das gerahmte Angebot auf der rechten Seite einer Produktseite, das den Preis, die Verkäufer- und Erfüllungsdetails, die Verfügbarkeitszeile und die Schaltflächen „In den Warenkorb" und „Jetzt kaufen" enthält. Wenn mehrere Händler dasselbe Produkt auf einem Angebot verkaufen, wählt Amazon ein Angebot aus, das dort vorgestellt wird. Die meisten Käufer klicken auf „In den Warenkorb", ohne jemals zu „Andere Verkäufer auf Amazon" oder „Mit ähnlichen Artikeln vergleichen" zu scrollen, sodass das vorgestellte Angebot den Verkauf erzielt. Amazon nennt dies jetzt offiziell das Featured Offer, obwohl die meisten Verkäufer noch Buy Box sagen.
Welches Angebot gewinnt, entscheidet ein Algorithmus, der Preis, Versandgeschwindigkeit und -kosten, Verkäufer-Performance-Metriken, Erfüllungsmethode und Lagerbestand abwägt, und er bewertet kontinuierlich neu. Ein Konkurrent, der Ihren Preis um ein paar Cent unterbietet oder auf schnelleren Versand umstellt, kann Ihnen die Buy Box innerhalb einer Stunde abnehmen. Da die Position sich in Echtzeit verschiebt, überwachen Verkäufer sie programmatisch statt manuell:
- Echtzeit-Überwachung. Die Buy Box ändert sich ständig. Ein Scraper, der ein Angebot nach einem Zeitplan sampelt, sagt Ihnen, wer es gerade hält und wie oft es wechselt, was über einen Katalog hinweg unmöglich manuell zu verfolgen ist.
- Preisintelligenz. Der Preis ist einer der stärksten Faktoren bei der Entscheidung, also erlaubt das Kennen des aktuellen Gewinnpreises, den eigenen anzupassen, um zu konkurrieren. Lesen Sie unsere Anleitung zum Web Scraping für Preisintelligenz für das breitere Muster.
- Wettbewerbsanalyse. Das Verfolgen, welche Verkäufer gewinnen, zu welchem Preis und mit welcher Erfüllungsmethode, zeigt Ihnen, was es braucht, um auf einem bestimmten Angebot zu konkurrieren.
- Strategie in großem Maßstab. Über Hunderte von Angeboten hinweg ist die automatisierte Erfassung der einzige praktische Weg, jedes Produkt zu beobachten und schnell genug zu reagieren.
Warum eine einfache Anfrage bei Amazon scheitert
Wenn Sie eine Amazon-Produkt-URL mit einem gewöhnlichen HTTP-Client aufrufen, erhalten Sie einen Status 200 und eine Seite mit fast keinen Buy-Box-Daten. Zwei Faktoren arbeiten gegen Sie. Erstens lädt Amazon einen Großteil des Angebotsblocks, einschließlich der Verkäufer-, Erfüllungs- und Verfügbarkeitsdetails, dynamisch durch JavaScript und AJAX nach dem Eintreffen des initialen HTML. Ein roher Abruf erfasst die Hülle, bevor diese Teile gerendert werden. Zweitens erkennt Amazon automatisierten Datenverkehr schnell: Rechenzentrum-IPs und Nicht-Browser-Anfragemuster werden mit einem CAPTCHA, einem Rate-Limit oder einer vollständigen IP-Blockierung konfrontiert, bevor sie das gerenderte Angebot erreichen.
Ein funktionierender Amazon-Scraper benötigt also zwei Dinge in einer Anfrage: einen echten Browser, der die Seite rendert, und eine IP, die die Plattform als gewöhnlichen Käufer liest. Das lässt sich zwar selbst mit einem Headless-Browser und einem Pool rotierender Residential-Proxies zusammenstellen, aber das Zusammenfügen und Aufrechterhalten ist der Großteil der Arbeit. Die Crawling API fasst beides in einem einzigen Aufruf zusammen: Sie senden ihr die URL mit einem JavaScript-Token, sie rendert die Seite hinter einer vertrauenswürdigen Residential-IP und gibt fertiges HTML zum Parsen zurück.
Crawlbase bietet zwei Token-Typen. Das normale Token ruft statisches HTML ab; das JavaScript-Token (JS) rendert die Seite zuerst in einem echten Browser. Amazon lädt seinen Angebotsblock clientseitig, daher benötigen Sie hier das JS-Token. Das normale Token gibt dieselbe partielle Hülle zurück wie ein einfacher Abruf, und die Buy-Box-Felder sind darin nicht zum Parsen vorhanden.
Voraussetzungen
Bevor Sie mit dem Programmieren beginnen, müssen einige Dinge vorbereitet sein. Keines davon nimmt viel Zeit in Anspruch.
Python-Grundkenntnisse. Sie sollten mit dem Schreiben und Ausführen von Python-Skripten sowie der Installation von Paketen mit pip vertraut sein. Wenn Sie neu in der Sprache sind, decken unsere Einführung ins Scrapen mit Python und die offiziellen Dokumentationen das Niveau ab, das dieses Tutorial voraussetzt.
Python 3.8 oder höher. Überprüfen Sie Ihre Version mit python --version. Falls Sie es noch nicht installiert haben, laden Sie es von python.org herunter oder installieren Sie es über eine Distribution wie Anaconda.
Ein Crawlbase-Konto und JS-Token. Melden Sie sich an, öffnen Sie Ihr Dashboard und kopieren Sie Ihr JavaScript-Token (JS). Crawlbase gibt Ihnen bis zu 5.000 kostenlose Crawling API-Anfragen zum Starten, keine Kreditkarte erforderlich. Behandeln Sie das Token wie ein Passwort: Es authentifiziert Ihre Anfragen, halten Sie es also aus der Versionskontrolle fern.
Projekt einrichten
Erstellen Sie eine virtuelle Umgebung, damit Projektabhängigkeiten isoliert bleiben, und installieren Sie dann die drei Bibliotheken, die der Scraper benötigt.
python --version python -m venv buybox_env source buybox_env/bin/activate pip install crawlbase beautifulsoup4 pandas
Unter Windows aktivieren Sie die Umgebung mit buybox_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, damit Sie jedes Feld per CSS-Selector extrahieren können, und pandas schreibt am Ende die Datensätze als CSV, sodass Sie Samples über die Zeit anhängen können.
Schritt 1: Die gerenderte Produktseite abrufen
Beginnen Sie mit dem Abruf der fertigen Seite. Importieren Sie die CrawlingAPI-Klasse, initialisieren Sie sie mit Ihrem JS-Token und fordern Sie die Produkt-URL an. Die beiden Wait-Optionen sind hier wichtig, da der Angebotsblock spät rendert. Die Überprüfung des Statuscodes vor dem Parsen sorgt dafür, dass Fehler auffallen statt still zu scheitern.
from crawlbase import CrawlingAPI api = CrawlingAPI({"token": "YOUR_CRAWLBASE_TOKEN"}) def crawl(product_url): options = {"page_wait": 2000, "ajax_wait": "true"} response = api.get(product_url, options) if response["status_code"] == 200: return response["body"].decode("latin1") print(f"Request failed: {response['status_code']}") return None if __name__ == "__main__": product_url = "https://www.amazon.com/Motorola-Stylus-Battery-Unlocked-Emerald/dp/B0BFYRV4CD" html = crawl(product_url) print(html[:500] if html else "No HTML returned")
Die beiden Wait-Optionen sind das, was ein dynamisches Ziel wie dieses zum Funktionieren bringt. ajax_wait weist die API an, auf den Abschluss des asynchronen Ladens zu warten, und page_wait hält für eine feste Anzahl Millisekunden nach dem Laden inne, sodass der spät gerenderte Angebotsblock erscheint, bevor die Seite erfasst wird. Der Body wird als latin1 dekodiert, da Amazon-Seiten Zeichen einmischen, an denen eine strenge UTF-8-Dekodierung scheitern kann. Führen Sie dies aus, und Sie sollten echtes Produkt-Markup sehen, nicht die partielle Hülle eines einfachen Abrufs. Das bestätigt, dass das Rendering funktioniert, bevor Sie einen einzigen Selector schreiben.
Dieser Angebotsblock hat sich nur befüllt, weil die Seite hinter einer vertrauenswürdigen IP gerendert wurde. Die Crawling API nimmt ein JS-Token, führt die Seite in einem echten Browser aus, rotiert serverseitig durch Residential-IPs und übergibt Ihnen fertiges HTML. So entfällt das Betreiben einer Headless-Flotte und eines Proxy-Pools selbst. Probieren Sie es zunächst mit einer Produkt-URL im kostenlosen Tarif aus.
Schritt 2: Die Seite untersuchen und Selectors zuordnen
Bevor Sie den Parser schreiben, öffnen Sie eine Produktseite in Ihrem Browser, klicken Sie mit der rechten Maustaste auf den Angebotsblock und wählen Sie Untersuchen. Jedes Buy-Box-Feld befindet sich in einem stabilen Element, das Sie per CSS-Selector ansteuern können. Bewegen Sie den Mauszeiger über Elemente im Entwicklertools-Panel, um zu sehen, welchen Teil der Seite sie abdecken, und kopieren Sie dann den Selector. Dies sind die dauerhaften Selectors für die Buy-Box-Felder, portiert von einer Live-Amazon-Produktseite:
-
Produkttitel
#productTitle -
Preis
.a-price .a-offscreen(die Barrierefreiheitskopie des Preisstrings) -
Verfügbarkeit
#availability span -
Versandname
#fulfillerInfoFeature_feature_div span.offer-display-feature-text-message -
Verkäufername
#merchantInfoFeature_feature_div span.offer-display-feature-text-message -
Jetzt kaufen-Schaltfläche
span#submit.buy-nowund In den Warenkorb-Schaltflächespan#submit.add-to-cart
Die Versand- und Verkäufer-Selectors sind die beiden, die Ihnen verraten, wie ein Angebot gewinnt. Wenn beide „Amazon.com" lauten, wird die Bestellung von Amazon verkauft und versandt. Wenn der Verkäufer ein Drittanbieter ist, aber der Versender Amazon ist, handelt es sich um ein FBA-Angebot (Versand durch Amazon). Wenn der Drittanbieter-Verkäufer auch versendet, ist das Angebot händlererfüllt. Diese zwei Felder im Laufe der Zeit zu verfolgen zeigt Ihnen nicht nur den Preiskampf auf einem Angebot, sondern auch die Erfüllungsstrategie desjenigen, der ihn gewinnt.
Schritt 3: Buy-Box-Daten mit BeautifulSoup parsen
Mit dem gerenderten HTML laden Sie es in BeautifulSoup und extrahieren jedes Feld anhand seines Selectors. Zwei kleine Helpers halten die Extraktion sauber: einer gibt den Text eines Elements oder einen Standard zurück, wenn es fehlt, und einer meldet, ob ein Schaltflächenelement vorhanden ist. Beachten Sie, dass die IDs mit Punkten (submit.buy-now und submit.add-to-cart) im CSS-Selector als submit\.buy-now escaped werden, da ein nackter Punkt als Klasse gelesen würde.
from bs4 import BeautifulSoup def scrape_buy_box(html_content): soup = BeautifulSoup(html_content, "html.parser") buy_box = {} def text_or_default(selector, default="Not found"): el = soup.select_one(selector) return el.text.strip() if el else default def is_present(selector): return "Present" if soup.select_one(selector) else "Not Present" buy_box["Buy Now Button"] = is_present("span#submit\\.buy-now") buy_box["Add to Cart Button"] = is_present("span#submit\\.add-to-cart") buy_box["Availability"] = text_or_default("#availability span") buy_box["Product Title"] = text_or_default("#productTitle") buy_box["Price"] = text_or_default(".a-price .a-offscreen") buy_box["Shipper Name"] = text_or_default( "#fulfillerInfoFeature_feature_div span.offer-display-feature-text-message" ) buy_box["Seller Name"] = text_or_default( "#merchantInfoFeature_feature_div span.offer-display-feature-text-message" ) return buy_box
Jede Abfrage läuft durch text_or_default, sodass ein fehlendes Element "Not found" zurückgibt, statt bei einem .text-Aufruf auf nichts zu werfen. Diese Robustheit ist hier wichtig: wenn ein Angebot gerade keine aktive Buy Box hat oder nicht vorrätig ist, fehlen mehrere dieser Felder, und Sie möchten einen sauberen Datensatz, der das aussagt, statt eines Absturzes. Der Helper is_present wandelt das Vorhandensein der Kaufschaltflächen in ein einfaches Flag um, was Ihr schnellstes Signal ist, dass ein Angebot gerade wirklich kaufbar ist.
Schritt 4: Das vollständige Skript zusammenstellen
Verbinden Sie jetzt den Abruf, das Parsen und die Speicherung zu einem lauffähigen Skript. Es crawlt die Produktseite, extrahiert den Buy-Box-Datensatz, gibt ihn als JSON aus und hängt ihn an eine CSV an, sodass Sie eine Historie von Samples über die Zeit aufbauen können.
import json import os from datetime import datetime, timezone from crawlbase import CrawlingAPI from bs4 import BeautifulSoup import pandas as pd api = CrawlingAPI({"token": "YOUR_CRAWLBASE_TOKEN"}) def crawl(product_url): options = {"page_wait": 2000, "ajax_wait": "true"} response = api.get(product_url, options) if response["status_code"] == 200: return response["body"].decode("latin1") print(f"Request failed: {response['status_code']}") return None def scrape_buy_box(html_content): soup = BeautifulSoup(html_content, "html.parser") buy_box = {} def text_or_default(selector, default="Not found"): el = soup.select_one(selector) return el.text.strip() if el else default def is_present(selector): return "Present" if soup.select_one(selector) else "Not Present" buy_box["Buy Now Button"] = is_present("span#submit\\.buy-now") buy_box["Add to Cart Button"] = is_present("span#submit\\.add-to-cart") buy_box["Availability"] = text_or_default("#availability span") buy_box["Product Title"] = text_or_default("#productTitle") buy_box["Price"] = text_or_default(".a-price .a-offscreen") buy_box["Shipper Name"] = text_or_default( "#fulfillerInfoFeature_feature_div span.offer-display-feature-text-message" ) buy_box["Seller Name"] = text_or_default( "#merchantInfoFeature_feature_div span.offer-display-feature-text-message" ) return buy_box def save_to_csv(record, path="buy_box_history.csv"): record["Captured At"] = datetime.now(timezone.utc).isoformat() df = pd.DataFrame([record]) write_header = not os.path.exists(path) df.to_csv(path, mode="a", header=write_header, index=False) def main(): product_url = "https://www.amazon.com/Motorola-Stylus-Battery-Unlocked-Emerald/dp/B0BFYRV4CD" html = crawl(product_url) if not html: return buy_box = scrape_buy_box(html) print(json.dumps(buy_box, indent=2)) save_to_csv(buy_box) if __name__ == "__main__": main()
Das Skript crawlt die Seite, parst die Buy Box und hängt pro Lauf eine zeitgestempelte Zeile an buy_box_history.csv an. Das Feld Captured At ist das, was einen einzelnen Snapshot zu einem Tracking verwandelt: Führen Sie dies nach einem Zeitplan aus (cron, ein Task-Runner oder ein Async Crawler-Callback), und jede Zeile erfasst, wer die Buy Box zu einem bekannten Zeitpunkt hielt, zu welchem Preis und mit welcher Erfüllung. Das Vergleichen dieser Zeilen über Tage oder Wochen zeigt Ihnen, wie oft der Gewinner wechselt und welchen Preis es braucht, den Platz zu halten.
Wie die Ausgabe aussieht
Führen Sie das vollständige Skript mit python scraper.py aus und erhalten Sie einen strukturierten Datensatz für die aktuelle Buy Box, als JSON ausgegeben und an die CSV angehängt.
{ "Buy Now Button": "Present", "Add to Cart Button": "Present", "Availability": "In Stock", "Product Title": "Motorola Moto G Stylus 5G | 2021 | 2-Day Battery | Unlocked | Made for US 4/128GB | 48MP Camera | Cosmic Emerald", "Price": "$149.99", "Shipper Name": "Amazon.com", "Seller Name": "Amazon.com", "Captured At": "2024-01-15T09:30:00+00:00" }
In diesem Beispiel lauten sowohl der Verkäufer als auch der Versender „Amazon.com", also hält Amazon selbst die Buy Box und erfüllt die Bestellung. Bei einem Angebot, das von einem Drittanbieter gewonnen wird, würden Sie einen Händlernamen unter Seller Name sehen und entweder „Amazon.com" unter Shipper Name (ein FBA-Angebot) oder denselben Händler erneut (händlererfüllt). Der Vergleich dieser beiden Felder über Captures hinweg ist das, was Ihnen die Erfüllungsgeschichte hinter jedem Buy-Box-Gewinn erzählt.
Skalierung auf einen Katalog von Angeboten
Eine URL ist eine Demo; ein echter Tracker beobachtet viele Produkte. Da jeder Buy-Box-Capture ein unabhängiger Seitenabruf ist, skalieren Sie, indem Sie eine Liste von Produkt-URLs durchlaufen und die Anfragen dosieren, damit Sie Amazon nicht in einer engen Schleife überlasten.
import time def track_listings(product_urls): for url in product_urls: html = crawl(url) if not html: continue buy_box = scrape_buy_box(html) buy_box["Product URL"] = url save_to_csv(buy_box) print(f"{buy_box['Seller Name']} @ {buy_box['Price']} -> {url}") time.sleep(2)
Das time.sleep(2) zwischen Anfragen dosiert den Lauf, damit Sie nicht aufeinanderfolgende Abrufe an ein Ziel senden, was der schnellste Weg zur Drosselung ist. Für größere Kataloge lässt der Async Crawler Sie viele URLs pushen und Ergebnisse auf einem Callback empfangen, anstatt auf jeden zu warten. Wenn Sie nur wenige Felder benötigen und das Schreiben von Selectors überspringen möchten, kann die Crawling API Amazon-Produktseiten automatisch in strukturiertes JSON für Sie parsen.
Nicht geblockt bleiben
Auch mit gehandhabtem Rendering beobachtet Amazon scraper-ähnlichen Datenverkehr. Ein paar Gewohnheiten halten einen Lauf gesund, und sie gelten für jedes schwere kommerzielle Ziel.
-
Anfragen dosieren. Verteilen Sie Abrufe mit einer Verzögerung zwischen Angeboten, anstatt mit voller Geschwindigkeit zu crawlen. Das
time.sleepin der Schleife ist der Boden, nicht die Decke. - Auf Rotation setzen. Ein Pool von Residential-IPs verteilt Anfragen auf viele Adressen echter Nutzer, sodass keine einzelne einen Rate-Limit auslöst. Die Crawling API erledigt das für Sie; wenn Sie Ihren eigenen Stack aufbauen, ist dies der Teil, den Sie richtig machen müssen.
- Statuscodes lesen. Ein Lauf, der beginnt, Herausforderungen oder Nicht-200-Codes zurückzugeben, signalisiert Ihnen, dass die aktuelle Rate oder IP-Stufe nicht mehr ausreicht. Behandeln Sie das als Signal zum Zurückrudern, nicht als Rauschen, das Sie ignorieren.
Für das breitere Vorgehen lesen Sie wie man Websites scrapt, ohne blockiert zu werden. Wenn Sie das gesamte Angebot und nicht nur die Buy Box scrapen möchten, deckt die begleitende Anleitung zum Scrapen von Amazon-Produktdaten den Rest der Seite ab, und unser Amazon-Bestseller-Walkthrough zeigt, wie man Angebote sammelt, um sie in einen Tracker wie diesen einzuspeisen.
Ist das Scrapen von Amazon legal?
Ob das Scrapen von Amazon erlaubt ist, hängt von Amazons Nutzungsbedingungen, Ihrer Rechtsordnung und dem ab, was Sie mit den Daten machen. Amazons Nutzungsbedingungen schränken den automatisierten Zugriff und die Datenerfassung ein, sodass Scraping unabhängig von der Sorgfalt Ihrer Werkzeuge gegen diese Bedingungen verstoßen kann. Keiner der hier aufgeführten Codes ändert daran etwas; er macht nur den technischen Teil möglich. Lesen Sie Amazons Nutzungsbedingungen und seine robots.txt und behandeln Sie beides als Grenze dessen, was Sie sammeln dürfen.
Ein paar Grundsätze, an denen es sich lohnt festzuhalten. Sammeln Sie nur öffentliche Daten: den Produkttitel, den Angebotspreis, die Verkäufer- und Erfüllungskennzeichnungen und die Verfügbarkeit, die jeder auf einer Produktseite ohne Konto sehen kann. Halten Sie Ihr Anfragevolumen niedrig genug, dass Sie Amazons Server nicht belasten, und dosieren Sie den Lauf wie oben gezeigt. Vermeiden Sie personenbezogene Daten, einschließlich allem, was mit identifizierbaren Käufern oder Rezensenten über den öffentlichen Rezensionstext hinaus verknüpft ist. Verbreiten Sie keine urheberrechtlich geschützten Medien wie Produktbilder oder -beschreibungen so, als wären sie Ihre eigenen. Diese Anleitung beschränkt sich bewusst auf den öffentlichen Angebotsblock, sie deckt also nichts hinter einem Login ab: Kontodaten, Bestellhistorie, Verkäufer-Central-Dashboards oder Zahlungs- und Checkout-Abläufe sind alle außerhalb des Umfangs, und das Umgehen der Authentifizierung, um sie zu erreichen, ist nichts, was ein Scraper tun sollte.
Wenn Sie Amazon-Verkäufer sind, ist der genehmigte Weg zu Ihren eigenen Buy-Box- und Preisdaten Amazons offizielle Selling Partner API, die Ihnen strukturierten, lizenzierten Zugriff ohne Scraping gewährt. Für Wettbewerbsüberwachung im großen Maßstab oder jede Nutzung mit kommerzieller Weiterverbreitung ist eine offizielle API oder eine Datenvereinbarung das richtige Werkzeug, wenn Sie garantierte Struktur, Volumen oder Rechte benötigen. Verwenden Sie Scraping für das, was es gut kann: leichtgewichtiges, öffentliches, schreibgeschütztes Sampling von Seiten, die Sie selbst in einem Browser öffnen könnten.
Wichtigste Erkenntnisse
- Die Buy Box ist das Angebot, das den Verkauf gewinnt. Rund 90 % der Amazon-Käufe laufen darüber, daher verfolgen Verkäufer, wer sie hält, zu welchem Preis und mit welcher Erfüllung.
- Amazon rendert den Angebotsblock clientseitig. Ein einfacher Abruf gibt eine partielle Hülle zurück, daher müssen Sie die Seite mit einem JS-Token rendern, bevor die Verkäufer-, Versand- und Verfügbarkeitsfelder zum Parsen vorhanden sind.
- Verkäufer plus Versender erzählt die Erfüllungsgeschichte. Beide lauten „Amazon.com" bedeutet Amazon-erfüllt; ein Drittanbieter-Verkäufer mit Amazon als Versender ist FBA; derselbe Händler in beiden ist händlererfüllt.
-
Zeitstempel verwandeln Snapshots in Tracking. Das Anhängen einer Zeile
Captured Atpro Lauf nach einem Zeitplan lässt Sie Buy-Box-Gewinne und Preisbewegungen im Laufe der Zeit vergleichen. - Bleiben Sie bei öffentlichen Daten. Respektieren Sie Amazons Bedingungen und robots.txt, bevorzugen Sie die offizielle Selling Partner API für lizenzierte oder Verkäuferdaten und berühren Sie niemals Konten, Bestellungen oder irgendetwas hinter einem Login.
Häufig gestellte Fragen
Was ist die Amazon-Buy-Box und warum ist sie wichtig?
Die Buy Box ist das vorgestellte Angebot auf einer Produktseite, das den Preis, die Verkäufer- und Erfüllungsdetails und die Schaltflächen „In den Warenkorb" und „Jetzt kaufen" enthält. Wenn mehrere Händler dasselbe Produkt verkaufen, stellt Amazon eines davon dort vor, und die meisten Käufer kaufen von diesem Angebot, ohne die anderen zu vergleichen. Rund 90 % der Amazon-Verkäufe laufen über die Buy Box, sodass das Gewinnen der wichtigste Hebel für einen Verkäufer auf einem geteilten Angebot über sein Bestellvolumen ist.
Warum gibt ein einfacher Abruf keine Buy-Box-Daten zurück?
Weil Amazon einen Großteil des Angebotsblocks, einschließlich der Verkäufer-, Versand- und Verfügbarkeitsfelder, dynamisch durch JavaScript und AJAX nach dem Eintreffen des initialen HTML lädt. Eine rohe HTTP-Anfrage erfasst die Hülle, bevor diese Teile gerendert werden, sodass die gewünschten Felder leer sind. Das vorherige Rendern der Seite, was das JS-Token der Crawling API erledigt, ist das, was die Buy-Box-Daten im zu parsenden HTML erscheinen lässt.
Wie unterscheide ich FBA von einem händlererfüllten Angebot?
Vergleichen Sie die Felder Seller Name und Shipper Name. Wenn beide „Amazon.com" lauten, verkauft und versendet Amazon den Artikel. Wenn der Verkäufer ein Drittanbieter ist, der Versender aber „Amazon.com" ist, ist das Angebot FBA (Versand durch Amazon). Wenn derselbe Drittanbietername in beiden erscheint, erfüllt der Verkäufer die Bestellung selbst. Die beiden Selectors für diese Felder sind #merchantInfoFeature_feature_div bzw. #fulfillerInfoFeature_feature_div.
Wie verfolge ich die Buy Box im Laufe der Zeit statt eines einzelnen Snapshots?
Hängen Sie jeden Capture als zeitgestempelte Zeile an eine CSV an, wie es das vollständige Skript mit dem Feld Captured At tut, und führen Sie den Scraper nach einem Zeitplan aus. Cron, ein Task-Scheduler oder der Async Crawler-Callback funktionieren alle. Sobald Sie eine Historie haben, vergleichen Sie aufeinanderfolgende Zeilen, um zu sehen, wann der Gewinner-Verkäufer, Preis oder die Erfüllungsmethode für ein Angebot geändert hat.
Benötige ich das normale Token oder das JS-Token für Amazon?
Das JS-Token. Das normale Token ruft statisches HTML ab, das bei Amazon den dynamisch geladenen Angebotsblock auslässt. Das JS-Token rendert die Seite zuerst in einem echten Browser, sodass die Buy-Box-Felder vorhanden sind, wenn BeautifulSoup sie parst. Amazon ist JavaScript-lastig, daher ist das JS-Token der richtige Standard für seine Produktseiten.
Meine Selectors geben „Not found" zurück. Was hat sich geändert?
Meist eines von zwei Dingen. Entweder hat Amazon sein Markup aktualisiert, in diesem Fall untersuchen Sie eine Live-Produktseite in den Entwicklertools Ihres Browsers und aktualisieren den Selector, oder der Angebotsblock hat das Rendering nicht abgeschlossen, in diesem Fall erhöhen Sie den page_wait-Wert, damit die API länger wartet, bevor sie das HTML erfasst. Periodische Selector-Pflege ist bei jedem Produktions-Scraper normal, kein Zeichen dafür, dass etwas kaputt ist.
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.
