AliExpress ist einer der größten Verbraucher-Marktplätze im Web, und jede Produktseite enthält genau die strukturierten Daten, die Preisverfolgung, Marktforschung und Wettbewerbsanalyse antreiben: einen Titel, einen aktuellen Preis, eine Bewertung, die Anzahl verkaufter Einheiten, den Shop hinter dem Angebot und die Versandbedingungen. Das Problem ist, dass AliExpress diese Seiten im Browser rendert und automatisierten Traffic aggressiv abwehrt, sodass eine einfache HTTP-Anfrage Ihnen eine nahezu leere Hülle statt der gesuchten Felder liefert.
Dieser Leitfaden zeigt Ihnen, wie Sie AliExpress mit Python zuverlässig scrapen. Sie bauen einen kleinen, lauffähigen Scraper, der eine vollständig gerenderte Produktseite über die Crawling API abruft, die gewünschten Felder mit BeautifulSoup parst und einen sauberen strukturierten Datensatz ausgibt. Das gesamte Tutorial beschränkt sich auf öffentliche Produktdaten, und der Abschnitt zur Rechtslage am Ende ist kein Boilerplate, also lesen Sie ihn, bevor Sie dies auf echtes Volumen loslassen.
Was Sie bauen werden
Ein Python-Skript, das eine öffentliche AliExpress-Produkt-URL nimmt, das gerenderte HTML über die Crawling API abruft und einen strukturierten Datensatz des Angebots extrahiert. Als laufendes Beispiel verwenden wir eine einzelne Produktseite und ziehen diese Felder heraus:
- Titel der vollständige Produktname wie im Angebot angezeigt.
- Preis der aktuelle Preis, zum Beispiel "US $3.45".
- Bewertung die durchschnittliche Kundenbewertung, z. B. "4.8".
- Verkaufte Einheiten wie viele Einheiten das Angebot als verkauft meldet.
- Shop-Name der Verkäufer-Shop hinter dem Produkt.
- Versand die auf der Seite angezeigten Versandkosten oder -bedingungen.
Warum ein einfacher Fetch bei AliExpress scheitert
Wenn Sie eine AliExpress-Artikel-URL mit einem einfachen HTTP-Client anfragen, erhalten Sie normalerweise eine Antwort mit Status 200 und fast keinen Produktdetails im Body. Zwei Kräfte arbeiten gegen Sie. Erstens baut AliExpress seinen Produktinhalt im Browser mit JavaScript auf, sodass das initiale HTML nur eine Hülle ist, die sich erst nach dem Ausführen der Seitenscripts füllt. Zweitens markiert AliExpress automatisierten Traffic schnell: Rechenzentrums-IPs und Anfragemuster, die nicht wie ein echter Browser aussehen, werden herausgefordert, geo-umgeleitet oder blockiert, bevor sie den gerenderten Inhalt erreichen.
Ein funktionierender AliExpress-Scraper benötigt also zwei Dinge in einer einzigen Anfrage: einen Browser, der die Seite tatsächlich rendert, und eine IP, die die Plattform als echten Käufer liest. Sie können das selbst mit einem Headless-Browser plus einem Pool aus rotierenden Residential Proxys zusammenbauen, aber das Zusammenfügen und Gesundhalten dieser Teile ist der Hauptteil der Arbeit. Die Crawling API fasst beides in einem einzigen Aufruf zusammen: Sie senden die URL mit einem JavaScript-Token, sie rendert die Seite hinter einer vertrauenswürdigen IP und gibt fertiges HTML zum Parsen zurück. Wer zuerst den breiteren E-Commerce-Kontext verstehen möchte, findet ihn in unserem Überblick über E-Commerce-Web-Scraping.
Crawlbase bietet zwei Token-Typen. Das normale Token ruft statisches HTML ab; das JavaScript-Token (JS) rendert die Seite zuerst in einem echten Browser. AliExpress wird clientseitig gerendert, daher benötigen Sie hier das JS-Token. Das normale Token zu verwenden, gibt ungefähr dieselbe Hülle zurück wie ein einfacher Fetch, und es gibt wenig daraus zu parsen.
Voraussetzungen
Bevor Sie Code schreiben, müssen einige Dinge eingerichtet sein. Keines davon dauert lange.
Python-Grundkenntnisse. Sie sollten in der Lage sein, ein Skript zu schreiben und auszuführen und Pakete mit pip zu installieren. Wenn Sie neu im HTML-Parsen sind, behandelt unser Primer zu Verwendung von BeautifulSoup in Python die Selector-Grundlagen, auf die sich dieses Tutorial stützt.
Python 3.8 oder neuer. Überprüfen Sie Ihre Version mit python --version. Falls nicht vorhanden, installieren Sie Python von python.org oder ü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) von der Kontodokumentationsseite. Behandeln Sie das Token wie ein Passwort: Es authentifiziert Ihre Anfragen, halten Sie es also aus der Versionsverwaltung heraus.
Das Projekt einrichten
Erstellen Sie eine virtuelle Umgebung, damit Projektabhängigkeiten isoliert bleiben, und installieren Sie dann die zwei Bibliotheken, die der Scraper benötigt.
python --version python -m venv aliexpress_env source aliexpress_env/bin/activate pip install crawlbase beautifulsoup4
Unter Windows aktivieren Sie die Umgebung mit aliexpress_env\Scripts\activate statt der source-Zeile. Zwei Abhängigkeiten übernehmen die Arbeit: crawlbase ist der offizielle Client für die Crawling API, und beautifulsoup4 parst das zurückgegebene HTML, sodass Sie einzelne Felder per CSS-Selektor herausziehen können.
Schritt 1: Die gerenderte Produktseite abrufen
Beginnen Sie damit, die fertige Seite zu laden. Importieren Sie die Klasse CrawlingAPI, initialisieren Sie sie mit Ihrem JS-Token und fragen Sie die Artikel-URL ab. Das Prüfen des Status-Codes vor dem Parsen hält Fehler laut statt stumm.
from crawlbase import CrawlingAPI api = CrawlingAPI({"token": "YOUR_CRAWLBASE_JS_TOKEN"}) def crawl(page_url): options = {"ajax_wait": "true", "page_wait": 8000, "country": "US"} response = api.get(page_url, options) if response["status_code"] == 200: return response["body"].decode("utf-8") print(f"Request failed: {response['status_code']}") return None if __name__ == "__main__": page_url = "https://www.aliexpress.com/item/1005006597796136.html" html = crawl(page_url) print(html[:500] if html else "No HTML returned")
Die Optionen sind bei einem clientseitig gerenderten Ziel wie diesem wichtig. ajax_wait weist die API an, auf das Abschließen asynchroner Inhalte zu warten, und page_wait hält nach dem Laden für eine feste Anzahl von Millisekunden an, damit spät rendernde Preis- und Versandblöcke erscheinen, bevor die Seite erfasst wird. Acht Sekunden sind ein vernünftiger Ausgangswert für AliExpress; erhöhen Sie diesen Wert, wenn Felder leer zurückkommen. Die Option country fixiert die Anfrage auf eine Region, sodass Preise und Versand in einer stabilen Locale gerendert werden, statt je nach IP zu variieren. Führen Sie das Skript mit python scraper.py aus, und Sie sollten echtes Produkt-Markup sehen, nicht die Hülle, die ein einfacher Fetch zurückgibt. Das bestätigt, dass das Rendering funktioniert, bevor Sie einen einzigen Selektor schreiben.
AliExpress benötigt eine gerenderte Seite hinter einer vertrauenswürdigen, region-fixierten IP, in einem einzigen Aufruf. Die Crawling API nimmt ein JS-Token, führt die Seite in einem echten Browser aus, rotiert serverseitig durch Residential IPs und gibt fertiges HTML zurück, sodass Sie keinen eigenen Headless-Fleet und keinen Proxy-Pool betreiben müssen. Richten Sie es zuerst auf eine öffentliche Produktseite im kostenlosen Tarif aus.
Schritt 2: Die Produktfelder mit BeautifulSoup parsen
Mit dem gerenderten HTML laden Sie es in BeautifulSoup und ziehen jedes Feld per Selektor heraus. AliExpress legt die Kernproduktdetails in einer vorhersagbaren Struktur an, sodass Sie Titel, Preis, Bewertung, verkaufte Einheiten, Shop-Name und Versand einzelnen Selektoren zuordnen können. Kapseln Sie die Extraktion in einem Helfer, damit ein fehlendes Feld den Lauf nicht zum Absturz bringt.
from bs4 import BeautifulSoup def text_of(soup, selector): el = soup.select_one(selector) return el.get_text(strip=True) if el else None def scrape_product(html): soup = BeautifulSoup(html, "html.parser") return { "title": text_of(soup, "h1[data-pl='product-title']"), "price": text_of(soup, ".product-price-current"), "rating": text_of(soup, "[data-pl='product-reviewer'] strong"), "orders_sold": text_of(soup, "[data-pl='product-reviewer'] span"), "store_name": text_of(soup, "a[data-pl='store-name']"), "shipping": text_of(soup, ".dynamic-shipping-line strong"), }
Der Helfer text_of erledigt auf einmal zwei nützliche Dinge: Er fragt ein einzelnes Element ab und gibt None zurück, wenn das Element fehlt, statt bei einem .get_text()-Aufruf auf nichts zu werfen. Das macht die Extraktion robust, wenn ein Feld bei einem bestimmten Angebot fehlt, was häufig vorkommt, da nicht jedes Produkt eine Verkaufsanzahl oder eine Versandzeile meldet. Verkaufte Einheiten und Bewertung teilen sich oft denselben Bewertungsblock, daher werden sie aus geschwistrigen Elementen darin gelesen.
AliExpress-Klassennamen und data-pl-Marker ändern sich ohne Vorankündigung und unterscheiden sich je nach Produktvorlage und Locale. Behandeln Sie die obigen Selektoren als Ausgangssvorlage, nicht als Vertrag. Wenn ein Feld als None zurückkommt, untersuchen Sie die Live-Seite in den Dev-Tools Ihres Browsers und aktualisieren Sie den Selektor. Periodische Selektor-Wartung ist bei jedem Produktions-Scraper normal, kein Zeichen dafür, dass etwas kaputt ist.
Schritt 3: Alles zusammenfügen
Verbinden Sie nun den Fetch und das Parsen zu einem lauffähigen Skript. Rufen Sie das gerenderte HTML ab, übergeben Sie es an den Parser und geben Sie den strukturierten Datensatz aus.
import json from crawlbase import CrawlingAPI from bs4 import BeautifulSoup api = CrawlingAPI({"token": "YOUR_CRAWLBASE_JS_TOKEN"}) def crawl(page_url): options = {"ajax_wait": "true", "page_wait": 8000, "country": "US"} response = api.get(page_url, options) if response["status_code"] == 200: return response["body"].decode("utf-8") print(f"Request failed: {response['status_code']}") return None def text_of(soup, selector): el = soup.select_one(selector) return el.get_text(strip=True) if el else None def scrape_product(html): soup = BeautifulSoup(html, "html.parser") return { "title": text_of(soup, "h1[data-pl='product-title']"), "price": text_of(soup, ".product-price-current"), "rating": text_of(soup, "[data-pl='product-reviewer'] strong"), "orders_sold": text_of(soup, "[data-pl='product-reviewer'] span"), "store_name": text_of(soup, "a[data-pl='store-name']"), "shipping": text_of(soup, ".dynamic-shipping-line strong"), } def main(): page_url = "https://www.aliexpress.com/item/1005006597796136.html" html = crawl(page_url) if not html: return data = scrape_product(html) print(json.dumps(data, indent=2)) if __name__ == "__main__": main()
Wie die Ausgabe aussieht
Führen Sie das vollständige Skript mit python scraper.py aus und Sie erhalten einen sauberen strukturierten Datensatz für das Produkt, bereit zum Schreiben in JSON, CSV oder eine Datenbank.
{ "title": "Wireless Bluetooth Earbuds Noise Cancelling Touch Control", "price": "US $12.74", "rating": "4.7", "orders_sold": "3,210 sold", "store_name": "TechGear Official Store", "shipping": "Free shipping" }
Auf viele Produkte skalieren
Ein Produkt ist ein Demo; ein echter Job läuft über eine Liste von Artikeln. Die Form bleibt dieselbe: pflegen Sie eine Liste von Produkt-URLs, rufen Sie jede über die Crawling API ab, parsen Sie sie mit derselben Funktion und sammeln Sie die Zeilen. Da jede Produktseite dieselbe Struktur hat, funktioniert der von Ihnen bereits geschriebene Parser für alle ohne Änderungen. Die einzige Gewohnheit, die hinzugefügt werden muss, ist Pacing, damit Sie die Liste nicht in einer engen Schleife durchlaufen.
import time import random products = [ "https://www.aliexpress.com/item/1005006597796136.html", "https://www.aliexpress.com/item/1005005899876543.html", ] results = [] for url in products: html = crawl(url) if html: results.append(scrape_product(html)) time.sleep(random.uniform(2, 5)) with open("products.json", "w") as f: json.dump(results, f, indent=2)
Der randomisierte sleep zwischen Anfragen verteilt Ihren Traffic, statt ihn in einem vorhersagbaren Rhythmus abzufeuern. Um Produkt-URLs im großen Maßstab zu sammeln, scrapen Sie AliExpress-Such- und Kategorieseiten mit demselben Fetch-then-Parse-Muster, sammeln Sie die Artikel-Links und besuchen Sie dann jeden einzelnen. Halten Sie das Volumen vernünftig und beachten Sie die unten beschriebenen Rate-Limits.
Nicht gesperrt bleiben
Selbst mit behandeltem Rendering achtet AliExpress auf Scraper-ähnlichen Traffic. Einige Gewohnheiten halten einen Lauf gesund, und sie gelten für jedes schwierige kommerzielle Ziel.
- Drosseln Sie Ihre Anfragen. Artikel-Seiten in einer engen Schleife zu hämmern ist der schnellste Weg, gedrosselt zu werden. Verteilen Sie Anfragen, fügen Sie Jitter hinzu und variieren Sie Ihre Ziele, statt einen Pfad mit voller Geschwindigkeit zu crawlen.
- Setzen Sie auf Rotation. Ein Pool von Residential IPs verteilt Anfragen über viele echte Nutzer-Adressen, sodass keine einzelne ein Rate-Limit auslöst. Die Crawling API erledigt das für Sie; wenn Sie Ihren eigenen Stack aufbauen, ist das der Teil, den Sie richtig machen müssen.
-
Fixieren Sie die Region. AliExpress ändert Preise, Währung und Versand je nach Standort. Das Setzen eines einheitlichen
countryhält Ihre Datensätze vergleichbar und vermeidet die Weiterleitungsschleifen, die bei nicht übereinstimmenden IPs auftreten. - Lesen Sie die Status-Codes. Ein Lauf, der beginnt, Herausforderungen oder Fehler zurückzugeben, teilt Ihnen mit, dass die aktuelle Rate oder IP-Tier nicht mehr ausreicht. Behandeln Sie das als Signal zum Zurückziehen, nicht als Rauschen, das ignoriert werden soll.
Das breitere Spielbuch finden Sie in Wie man Websites scrapt, ohne gesperrt zu werden und im tieferen Einblick in Wie man CAPTCHAs beim Web-Scraping umgeht. Es gibt auch eine fokussierte Anleitung zur Verwendung von AliExpress-Proxy-Scraping für mehr zur Proxy-Seite. Wenn Sie Ihren eigenen Traffic lieber durch einen rotierenden Pool leiten möchten, statt die verwaltete API zu verwenden, bietet der Smart AI Proxy (auch AI Proxy genannt) dieselbe Residential-IP-Rotation als Drop-in-Proxy-Endpunkt.
Ist es legal, AliExpress zu scrapen?
Ob das Scrapen von AliExpress erlaubt ist, hängt von AliExpress's Nutzungsbedingungen, Ihrer Rechtsprechung und der Verwendung der Daten ab. Die Nutzungsbedingungen von AliExpress beschränken den automatisierten Zugriff, sodass das Scrapen gegen diese Bedingungen verstoßen kann, unabhängig davon, wie sorgfältig Ihr Tooling ist. Kein Code hier ändert das; er macht nur den technischen Teil funktionieren. Lesen Sie die AliExpress-Nutzungsbedingungen und seine robots.txt und behandeln Sie beide als Grenze dessen, was Sie sammeln.
Einige Linien, die es wert sind einzuhalten. Sammeln Sie nur öffentliche Produktdaten: den Titel, den aktuellen Preis, die Bewertung, die verkauften Einheiten, den Shop-Namen und die Versandbedingungen, die jeder ohne Konto sehen kann. Respektieren Sie die angegebenen Rate-Erwartungen von AliExpress und halten Sie Ihr Anfragevolumen niedrig genug, um die Server nicht zu belasten. Vermeiden Sie alles, was mit identifizierbaren Personen zusammenhängt, einschließlich persönlicher Käufer- oder Verkäuferdaten über den öffentlichen Shop-Namen auf einem Angebot hinaus. Wenn Sie die Daten kommerziell wiederverwenden möchten, holen Sie eine Erlaubnis oder eine offizielle Vereinbarung ein, statt Schweigen als Zustimmung zu werten.
Dieser Leitfaden beschränkt sich bewusst auf öffentliche Produktseiten, weil das die Linie ist, die die Arbeit vertretbar hält. Er deckt nichts hinter einem Login ab, keine persönlichen Käufer- oder Verkäuferdaten, keine privaten Bestell- oder Kontodaten und keinen Versuch, Authentifizierung zu umgehen. Für lizenzierten oder Massen-Zugriff bieten AliExpress und die breitere Alibaba-Plattform offizielle APIs und Datenvereinbarungen, und das ist das richtige Werkzeug, wenn Sie große Volumina, garantierte Struktur oder kommerzielle Rechte benötigen. Wenn Ihr Projekt mehr als öffentliche Produktdaten benötigt, ist eine offizielle API oder eine Datenvereinbarung der richtige Weg, kein cleverer Scraper.
Wichtigste Erkenntnisse
- AliExpress wird clientseitig gerendert. Ein einfacher Fetch gibt eine nahezu leere Hülle zurück, Sie müssen die Seite daher vor dem Parsen rendern.
-
Sie benötigen Rendering und eine vertrauenswürdige IP zusammen. Die Crawling API mit einem JS-Token erledigt beides in einem Aufruf;
ajax_wait,page_waitundcountrysteuern das Warten und den Rendering-Ort. - BeautifulSoup übernimmt die Extraktion. Ordnen Sie Titel, Preis, Bewertung, verkaufte Einheiten, Shop-Name und Versand aktuellen Selektoren zu und erwarten Sie, dass diese Selektoren driften.
- Skalieren Sie durch Schleifen über URLs mit Pacing. Derselbe Parser funktioniert für jedes Produkt, also ist ein echter Job nur eine Liste von Artikel-Links plus jittierte Verzögerungen und Rotation.
- Bleiben Sie bei öffentlichen Daten. Respektieren Sie AliExpress's Nutzungsbedingungen und robots.txt, bevorzugen Sie für lizenzierte oder Massen-Daten eine offizielle API und berühren Sie niemals Logins, Bestelldaten oder persönliche Informationen.
Häufig gestellte Fragen
Warum gibt ein einfacher Fetch keine Produktdaten von AliExpress zurück?
Weil AliExpress seinen Produktinhalt im Browser mit JavaScript aufbaut. Das initiale HTML ist eine Hülle, die sich erst füllt, nachdem die Seitenscripts ausgeführt wurden, sodass eine rohe HTTP-Anfrage Status 200 mit leerem Preis, Bewertung und Versand zurückgibt. Um echte Daten zu erhalten, müssen Sie die Seite zuerst rendern, was das JS-Token der Crawling API für Sie erledigt.
Benötige ich das normale Token oder das JS-Token für AliExpress?
Das JS-Token. Das normale Token ruft statisches HTML ab, das bei AliExpress ungefähr dieselbe Hülle ist, die ein einfacher Fetch zurückgibt. Das JS-Token rendert die Seite in einem echten Browser, bevor das HTML zurückgegeben wird, sodass die Produktfelder vorhanden sind, wenn BeautifulSoup sie parst.
Meine Selektoren geben None zurück. Was hat sich geändert?
Fast sicher das Markup von AliExpress. Klassennamen und data-pl-Marker ändern sich ohne Vorankündigung und unterscheiden sich je nach Produktvorlage und Locale, sodass Selektoren, die letzten Monat funktioniert haben, jetzt kaputt sein können. Untersuchen Sie eine Live-Produktseite in den Dev-Tools Ihres Browsers und aktualisieren Sie die Selektoren. Periodische Selektor-Wartung ist bei jedem Produktions-Scraper normal.
Wie halte ich Preise und Versand über Läufe hinweg konsistent?
Fixieren Sie die Region mit der Option country bei jeder Anfrage. AliExpress variiert Preis, Währung und Versand nach Standort, sodass ein nicht fixierter Lauf, der über Länder rotiert, Datensätze produziert, die Sie nicht vergleichen können. Das Setzen eines einheitlichen Landes vermeidet auch die Geo-Weiterleitungsschleifen, die bei nicht übereinstimmenden IPs auftreten.
Wie vermeide ich Sperren beim Scrapen von AliExpress?
Halten Sie Ihre Per-IP-Anfragerate niedrig, fügen Sie zwischen Anfragen Jitter hinzu, variieren Sie Ihre Ziele statt einen Pfad zu schleifen und routen Sie durch rotierende Residential IPs, damit keine einzelne Adresse ein Rate-Limit auslöst. Die Crawling API verwaltet Rotation und einen vertrauenswürdigen IP-Pool für Sie; wenn Sie Ihren eigenen Stack aufbauen, ist das der Teil, in den Sie investieren sollten. Achten Sie auf die Status-Codes und ziehen Sie sich zurück, wenn Herausforderungen beginnen.
Kann ich AliExpress-Preise scrapen, um meine eigenen Produkte zu bepreisen?
Die Verwendung öffentlicher Preisdaten für Marktanalysen ist ein häufiger Anwendungsfall, liegt aber innerhalb der Nutzungsbedingungen von AliExpress und Ihrer lokalen Vorschriften, also bestätigen Sie beides, bevor Sie darauf aufbauen. Bleiben Sie bei öffentlichen Produktdaten, halten Sie Ihr Volumen bescheiden, und für lizenzierten oder Massen-Zugriff verwenden Sie eine offizielle API oder eine Datenvereinbarung statt im großen Maßstab zu scrapen.
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.
