Warum AliExpress-Scraping anders ist als du denkst
Wenn du AliExpress scrapen willst, steht du vor einer grundlegenden Entscheidung: HTML-Rendering vs. API-Endpoints. Die Desktop-Website liefert server-side gerendertes HTML — langsam, schwer zu parsen, voller A/B-Tests und dynamischer Klassen. Die Mobile-API hingegen liefert sauberes JSON mit mehr Datenfeldern als die Oberfläche überhaupt anzeigt: vollständige SKU-Matrizen, Echtzeit-Shipping-Kosten, Seller-Reputationsscores und Promotions-Flags.
Für Dropshipping-Tools und Product-Research-Startups ist die Antwort klar: Gehe direkt auf die Mobile-API. Du sparst Bandbreite, umgehst einen Großteil des Anti-Bot-Stacks und erhältst strukturiertere Daten. Dieser Guide zeigt dir wie — mit konkreten Endpoints, Rate-Limit-Schwellen und funktionierendem Python-Code.
AliExpress-Seitenstruktur verstehen
Suchergebnisse
Die Suchseite unter aliexpress.com/wholesale?SearchText=... paginiert typischerweise 40–60 Produkte pro Seite. Die Mobile-API liefert kompaktere Ergebnisse mit 20 Items pro Seite, dafür aber mit mehr Metadaten pro Item.
Wichtige CSS/XPath-Selektoren (Desktop-HTML):
- Produkt-Links:
a[href*='/item/'] - Preis:
span[class*='price']oderdiv[class*='product-price'] - Bewertungen:
span[class*='rating'] - Bestellungen:
span[class*='order']
Problem: Die Klassen-Namen rotieren regelmäßig. XPath über data-*-Attribute ist stabiler, aber auch nicht garantiert. Deswegen die API-Route.
Produktdetailseiten
Jedes Produkt hat die Form aliexpress.com/item/{itemId}.html. Die Desktop-Seite lädt Produktdaten asynchron via XHR. Die relevanten Endpoints liefern JSON-Objekte mit:
- Vollständige SKU-Matrix (Farben × Größen mit individuellen Preisen)
- Shipping-Kosten nach Destination
- Seller-Statistiken (positive Rate, Antwortzeit, Jahre auf der Plattform)
- Promotions und Coupons
Store-Seiten
Store-URLs: aliexpress.com/store/{storeId}. Hier findest du alle Produkte eines Sellers, Store-Bewertungen und Store-spezifische Promotions. Für Seller-Reputation-Monitoring unverzichtbar.
Hot-Product-Feeds
AliExpress betreibt mehrere Trend-Feeds: "Top Brands", "SuperDeals", "Choice"-Produkte. Diese Feeds sind für Product-Research besonders wertvoll, da sie bereits vorselektierte, konvertierende Produkte zeigen.
Der Alibaba-Group Anti-Bot-Stack
AliExpress gehört zur Alibaba Group und teilt Infrastruktur mit Taobao, Tmall und Lazada. Der Anti-Bot-Stack ist entsprechend ausgereift:
| Schicht | Technologie | Was sie prüft |
|---|---|---|
| Layer 1 | AliCAPTCHA / AliVerify | Slide-CAPTCHA, Verhaltens-CAPTCHA bei verdächtigen Requests |
| Layer 2 | Device Fingerprinting | Canvas-Fingerprint, WebGL-Renderer, Screen-Auflösung, installierte Fonts |
| Layer 3 | TLS Fingerprinting (JA3) | Python-Requests, Go-HTTP-Clients und Headless-Browser haben abweichende TLS-Profile |
| Layer 4 | Rate Limiting | ~100–200 Requests/Minute pro IP bei der Such-API, strikter bei Detail-Endpoints |
| Layer 5 | Behavioral Analysis | Klickmuster, Scroll-Verhalten, Verweildauer — vor allem auf der Desktop-Seite |
Praktische Konsequenz: Datacenter-IPs werden deutlich schneller blockiert als Residential-IPs. Mobile-IPs haben die höchste Toleranz, da AliExpress mobile Traffic-Priorisierung betreibt. Rate-Limits liegen erfahrungsgemäß bei:
- Desktop-Website: ~50 Requests/Minute/IP, dann CAPTCHA oder 403
- Mobile-API: ~120–180 Requests/Minute/IP bei Residential-IPs
- Mobile-API mit Datacenter-IP: ~30–50 Requests/Minute/IP, danach 429 oder 403
Mobile API-Endpoints: Das Goldmine-JSON
Die AliExpress-App kommuniziert über mehrere API-Gateways. Die wichtigsten für Product-Research:
Such-API
GET https://m.aliexpress.com/api/search/product/list.do
?keyword=wireless+earbuds
&page=1
&pageSize=20
&sort=ORDERS
&country=DEAntwort enthält: itemId, title, price (Min/Max), discountPrice, orders, rating, storeInfo, shippingInfo — alles als sauberes JSON.
Produkt-Detail-API
GET https://m.aliexpress.com/api/product/detail/info.do
?productId=3256801234567890
&country=DELiefert die vollständige SKU-Matrix, Shipping-Kosten nach Land, Seller-Reputation und Promotions.
Store-Produkte-API
GET https://m.aliexpress.com/api/store/product/list.do
?storeId=91234567
&page=1
&pageSize=40Beispiel-Response (Suche, gekürzt)
{
"data": {
"resultList": [
{
"itemId": "3256801234567890",
"title": "Wireless Earbuds TWS Bluetooth 5.3...",
"price": {"minPrice": 8.99, "maxPrice": 15.99, "discountMinPrice": 5.99},
"orders": 4521,
"rating": 4.7,
"storeInfo": {"storeId": "91234567", "storeName": "TechAudio Store", "positiveRate": 97.2},
"shippingInfo": {"freeShipping": true, "deliveryDays": {"min": 12, "max": 25}}
}
],
"totalResults": 84200
}
}Python-Beispiel: Trending-Produkte über die Mobile-API mit Residential Proxies
Hier ein vollständiges Beispiel, das AliExpress über die Mobile-API scrapet — mit ProxyHat Residential Proxies und Session-Rotation:
import requests
import time
import json
from datetime import datetime
PROXY_USER = "user-country-US"
PROXY_PASS = "dein_passwort"
PROXY_URL = f"http://{PROXY_USER}:{PROXY_PASS}@gate.proxyhat.com:8080"
PROXIES = {"http": PROXY_URL, "https": PROXY_URL}
HEADERS = {
"User-Agent": "AliApp/8.96.2 (iPhone; iOS 17.4; Scale/3.00)",
"x-ae-app-info": "appVersion=8.96.2;platform=iOS;osVersion=17.4",
"Accept": "application/json",
"Accept-Language": "en-US;q=1.0",
}
def search_trending(keyword, country="US", page=1):
"""Search AliExpress mobile API for trending products."""
url = "https://m.aliexpress.com/api/search/product/list.do"
params = {
"keyword": keyword,
"page": page,
"pageSize": 20,
"sort": "ORDERS", # Sort by order count = trending
"country": country,
}
try:
resp = requests.get(
url, params=params, headers=HEADERS,
proxies=PROXIES, timeout=15
)
resp.raise_for_status()
return resp.json()
except requests.exceptions.HTTPError as e:
if e.response.status_code == 429:
print("Rate limited — rotating IP...")
time.sleep(2)
return search_trending(keyword, country, page)
raise
def extract_products(data):
"""Extract relevant fields from search response."""
products = []
for item in data.get("data", {}).get("resultList", []):
products.append({
"item_id": item["itemId"],
"title": item["title"],
"min_price": item["price"]["minPrice"],
"max_price": item["price"]["maxPrice"],
"discount_min": item["price"].get("discountMinPrice"),
"orders": item.get("orders", 0),
"rating": item.get("rating", 0),
"store_id": item["storeInfo"]["storeId"],
"store_name": item["storeInfo"]["storeName"],
"positive_rate": item["storeInfo"].get("positiveRate", 0),
"free_shipping": item.get("shippingInfo", {}).get("freeShipping", False),
"scraped_at": datetime.utcnow().isoformat(),
})
return products
# --- Main: Discover trending wireless earbuds ---
all_products = []
for page in range(1, 6): # 5 pages = ~100 products
print(f"Scraping page {page}...")
data = search_trending("wireless earbuds", country="DE", page=page)
products = extract_products(data)
all_products.extend(products)
time.sleep(1.5) # Respect rate limits between pages
print(f"Total products scraped: {len(all_products)}")
print(json.dumps(all_products[:3], indent=2))Wichtig: Die user-country-US-Flag im Proxy-Usernamen routet den Traffic durch US-Residential-IPs. Für den deutschen Markt verwendest du user-country-DE — so siehst du die gleichen Preise und Shipping-Optionen wie deine Zielkunden.
Variant-SKUs, Shipping-Kosten und Seller-Reputation verarbeiten
Variant-SKUs parsen
Die Detail-API liefert eine SKU-Matrix, die alle Kombinationen aus Farbe, Größe, Material etc. enthält. Jede SKU hat einen eigenen Preis und eine eigene Verfügbarkeit:
def parse_sku_matrix(product_detail):
"""Parse variant SKUs from product detail response."""
skus = []
sku_data = product_detail.get("data", {}).get("skuInfo", {})
# Property definitions (e.g., Color: [Black, White])
props = sku_data.get("skuProps", [])
prop_map = {}
for prop in props:
prop_map[prop["propId"]] = {
"name": prop["propName"],
"values": {v["propValueId"]: v["propValueName"] for v in prop["values"]}
}
# Individual SKU entries
for sku in sku_data.get("skuList", []):
variant = {}
for prop_id, value_id in sku.get("propPath", {}).items():
prop_name = prop_map.get(prop_id, {}).get("name", prop_id)
value_name = prop_map.get(prop_id, {}).get("values", {}).get(value_id, value_id)
variant[prop_name] = value_name
skus.append({
"sku_id": sku["skuId"],
"variant": variant,
"price": sku.get("skuPrice", {}).get("salePrice", {}),
"stock": sku.get("skuStock", 0),
"available": sku.get("skuStock", 0) > 0,
})
return skusFür Dropshipping-Tools ist das kritisch: Du musst wissen, welche Varianten verfügbar sind und zu welchem Preis. Oft ist die günstigste Variante (z.B. "schwarz, ohne Zubehör") ausverkauft, während teurere Varianten noch lieferbar sind — das beeinflusst deine Margenberechnung erheblich.
Shipping-Kosten nach Destination
Die Detail-API liefert Shipping-Optionen pro Zielland:
def extract_shipping_costs(product_detail, destination="DE"):
"""Extract shipping costs for a specific destination."""
shipping = product_detail.get("data", {}).get("shippingInfo", {})
options = []
for method in shipping.get("shippingList", []):
if method.get("country", "") == destination or destination is None:
options.append({
"carrier": method.get("company", ""),
"cost": method.get("freight", {}).get("amount", 0),
"currency": method.get("freight", {}).get("currency", "USD"),
"delivery_days_min": method.get("deliveryTime", {}).get("min", 0),
"delivery_days_max": method.get("deliveryTime", {}).get("max", 0),
"tracking": method.get("isTracking", False),
})
return sorted(options, key=lambda x: x["cost"])Tipp: Verwende den Proxy mit user-country-DE, um die für deutsche Kunden relevanten Shipping-Preise zu sehen. AliExpress variiert die Shipping-Optionen je nach Herkunftsland der Anfrage.
Seller-Reputation bewerten
Die wichtigsten Seller-Metriken aus der API:
- positiveRate: Anteil positiver Bewertungen (Ziel: >95%)
- responseRate: Antwortrate auf Nachrichten (Ziel: >90%)
- responseTime: Durchschnittliche Antwortzeit in Stunden
- yearsOnPlatform: Jahre seit Store-Eröffnung
- sellerScore: Aggregierter Score (0–100)
Für Dropshipping-Tools empfiehlt sich ein Mindest-Filter: positiveRate >= 95 AND orders >= 500 AND yearsOnPlatform >= 2.
Proxy-Strategie für AliExpress
Nicht alle Proxies sind für AliExpress gleich geeignet. Hier der Vergleich:
| Proxy-Typ | Rate-Limit-Toleranz | CAPTCHA-Risiko | Datenqualität | Kosten | Einsatz |
|---|---|---|---|---|---|
| Datacenter | Niedrig (~30-50 Req/Min) | Hoch | Preise für falsche Region | Niedrig | Bulk-Monitoring, nicht zeitkritisch |
| Residential | Mittel (~120-180 Req/Min) | Niedrig | Regionsspezifisch korrekt | Mittel | Product-Research, Preisüberwachung |
| Mobile | Hoch (~200+ Req/Min) | Sehr niedrig | Beste Übereinstimmung mit App-Daten | Höher | Hochvolumige API-Scrapes, Trend-Feeds |
Für die meisten Dropshipping-Tools sind Residential Proxies mit Geo-Targeting der beste Kompromiss. Sie liefern regionsspezifische Preise und Shipping-Optionen, während sie ausreichend Rate-Limit-Toleranz bieten.
ProxyHat bietet Residential Proxies mit Land- und Stadt-Targeting:
# Germany residential proxy for accurate DE prices/shipping
http://user-country-DE:pass@gate.proxyhat.com:8080
# Berlin-specific targeting for local delivery estimates
http://user-country-DE-city-berlin:pass@gate.proxyhat.com:8080
# Sticky session for multi-page product detail scraping
http://user-country-DE-session-prod123:pass@gate.proxyhat.com:8080Sticky Sessions sind wichtig, wenn du mehrere API-Calls für dasselbe Produkt machst (Suche → Detail → Shipping). Mit user-session-abc123 behältst du dieselbe IP für bis zu 30 Minuten — das verhindert, dass AliExpress deine Requests als Bot-Verhalten erkennt.
Datenfrische und Scraping-Kadenz
Wie oft ändern sich AliExpress-Daten? Hier die empirischen Werte:
- Preise: Können sich mehrfach täglich ändern — Promotions starten/enden, dynamische Preisgestaltung je nach Nachfrage
- Lagerbestand: Bei Trend-Produkten stündlich; bei Nischenprodukten täglich
- Bestellzahlen: Inkrementell, aber AliExpress rundet und aktualisiert asynchron (Verzögerung: 1–6 Stunden)
- Shipping-Kosten: Relativ stabil, ändern sich wöchentlich oder bei Carrier-Updates
- Seller-Reputation: Aktualisiert täglich
Empfohlene Scraping-Kadenz:
- Preisüberwachung: Alle 2–4 Stunden für Top-Produkte, alle 6–12 Stunden für Long-Tail
- Trend-Entdeckung: 1–2x täglich (morgens und abends)
- Lagerbestand: Alle 4–6 Stunden für kritische Produkte
- Seller-Monitoring: Täglich
Bei einer Produktdatenbank von 10.000 SKUs und einer Kadenz von 4 Stunden brauchst du ~2.500 Requests pro Zyklus. Bei 6 Zyklen pro Tag sind das 15.000 Requests/Tag — mit Residential Proxies und vernünftiger Rate-Limiting absolut machbar.
Ethische und rechtliche Überlegungen
- robots.txt: AliExpress verbietet Scraping in der robots.txt. Prüfe die aktuelle robots.txt und bewerte das Risiko für deinen Use Case.
- ToS: AliExpress' Nutzungsbedingungen untersagen automatisierten Datenzugriff. Rechne mit möglichen IP-Sperren.
- GDPR/DSGVO: Personenbezogene Daten (Seller-Namen, Bewertungen) unterliegen europäischem Datenschutzrecht, wenn du EU-Nutzer bedienst.
- Rate-Limiting: Halte dich an 120–180 Requests/Minute pro IP. Aggressives Scraping schadet allen.
- Datenverwendung: Verkaufe keine Rohdaten weiter, ohne AliExpress' Einwilligung. Für interne Product-Research ist das Risiko überschaubarer.
Key Takeaways
1. Mobile-API über HTML. Die AliExpress-Mobile-API liefert sauberes JSON mit mehr Datenfeldern und ist robuster gegen Layout-Änderungen.
2. Residential Proxies mit Geo-Targeting. Nutze
user-country-DEfür korrekte Preise und Shipping-Kosten. Mobile Proxies für maximale Rate-Limit-Toleranz.3. SKU-Matrix verstehen. Die günstigste Variante ist oft ausverkauft — parse die vollständige SKU-Matrix für korrekte Margenberechnung.
4. Kadenz nach Datenfrische wählen. Preise ändern sich stündlich, Shipping wöchentlich. Passe deine Scraping-Frequenz entsprechend an.
5. Sticky Sessions für Multi-Step-Scrapes. Verwende
user-session-*für zusammenhängende Requests, um Bot-Erkennung zu vermeiden.
Bereit, AliExpress-Daten professionell zu scrapen? Starte mit ProxyHat Residential Proxies und teste die Mobile-API mit dem Code aus diesem Guide. Bei Fragen zur Integration oder zu spezifischen Endpoints schau dir unsere Web-Scraping-Use-Cases an.






