API czy HTML? Najważniejsza decyzja przy scrapowaniu AliExpress
Zanim zaczniesz budować scraper AliExpress, musisz podjąć jedną fundamentalną decyzję: czy parsować HTML strony desktopowej, czy uderzać w mobilne endpointy API? To nie jest wybór drugorzędny — determinuje całą architekturę, koszty proxy i niezawodność.
Desktopowy HTML AliExpress to koszmar do parsowania: serwowany jest z lazy-loadingiem, zależny od JavaScriptu, z klasami CSS, które zmieniają się co kilka tygodni. Selektory takie jak #root > div > div:nth-child(3) przestają działać po każdej aktualizacji frontendu. Z kolei mobilne API zwraca czysty, ustrukturyzowany JSON — ceny, warianty SKU, koszty wysyłki i oceny sprzedawców w jednym wywołaniu.
W tym przewodniku skupiamy się na podejściu API-mobilnym, ale pokazujemy też, kiedy HTML wciąż ma sens.
Struktura AliExpress: co warto scrapować
AliExpress to nie jedna strona, ale zbiór kilku powiązanych widoków, każdy z inną wartością danych:
1. Strona wyszukiwania (Search)
URL: https://www.aliexpress.com/w/wholesale-KEYWORD.html
Zawiera listę produktów z cenami, miniaturkami, ocenami i linkami do stron produktowych. To punkt wejścia do researchu produktów — pozwala znaleźć trendy, porównać ceny i oszacować konkurencję.
Przydatne selektory CSS (desktop HTML):
- Tytuł produktu:
.manhattan--container--1lP57Ag .cards--title--2rn5l2O - Cena:
.manhattan--price--2OqSj9A - Link do produktu:
a.cards--listLink--2t1TPj6
Uwaga: te selektory zmieniają się często. API mobilne jest stabilniejsze.
2. Strona produktowa (Product Detail)
URL: https://www.aliexpress.com/item/product/ITEM_ID.html
Najbardziej wartościowa strona ze względu na: pełny opis, warianty SKU, koszty wysyłki do różnych krajów, oceny sprzedawcy, liczbę zamówień. Na desktopie dane wstrzykiwane są przez JavaScript — musisz czekać na render lub używać API.
3. Strona sklepu (Store Page)
URL: https://www.aliexpress.com/store/STORE_ID
Pozwala przeanalizować cały asortyment sprzedawcy — przydatne przy ocenie wiarygodności i badaniu konkurencji.
4. Hot Product / Trending Feeds
AliExpress promuje trendy przez sekcje jak „Top Ranking" i „Choice" — to złota kopalnia dla dropshipperów szukających wiralowych produktów.
Anti-bot stack Alibaba Group: z czym walczysz
AliExpress należy do Alibaba Group, która inwestuje poważnie w infrastrukturę anti-bot. Oto co spotkasz:
| Warstwa anti-bot | Jak działa | Jak obejść |
|---|---|---|
| Rate limiting IP | Blokada po ~80-150 requestów/IP/godzinę z datacenter | Residential proxy z rotacją per-request |
| Slider CAPTCHA | Wyzwalana przy nietypowym ruchu lub po limicie | Zmiana IP, naturalne opóźnienia między requestami |
| Device fingerprinting | Analiza canvas, WebGL, fontów, UA | Realistyczne nagłówki mobilne, rotacja UA |
| Behavioral analysis | Detekcja botów po wzorcach nawigacji (brak scroll, brak hover) | Symulacja naturalnych sesji z opóźnieniami |
| TLS fingerprinting | Sprawdzanie JA3/JA4 hashów połączenia TLS | Użycie bibliotek z realistycznym TLS (curl_cffi, tls-client) |
Kluczowa zasada: datacenter IP są blokowane znacznie szybciej niż residential. Przy skrapowaniu AliExpress, residential proxy nie jest luksusem — to konieczność operacyjna.
Mobilne API AliExpress: lepsze dane, mniej zabezpieczeń
Mobilna aplikacja AliExpress komunikuje się z backendem przez REST API, które zwraca bogaty JSON — bez CAPTCHA, bez JavaScript rendering, bez dynamicznych klas CSS.
Endpoint wyszukiwania produktów
https://m.aliexpress.com/api/products/search
Parametry zapytania:
keyword— fraza wyszukiwaniapage— numer strony (od 1)sortType—bestMatch,priceAsc,priceDesc,ordersDescshipToCountry— kod kraju docelowego (np.US,DE,PL)
Endpoint detali produktu
https://m.aliexpress.com/api/product/detail
Parametry:
productId— ID produktu z URL lub wyników wyszukiwaniashipToCountry— kluczowe dla kosztów wysyłki
Przykładowa odpowiedź (skrócona)
{
"productId": 1005006284912345,
"title": "Wireless Earbuds TWS Bluetooth 5.3",
"price": { "min": 8.99, "max": 16.49, "currency": "USD" },
"orders": 4280,
"avgRating": 4.6,
"seller": {
"storeId": 912345678,
"storeName": "TechGadget Official",
"positiveRate": 97.2
n },
"skuList": [
{ "skuId": "1200:2000", "color": "Black", "price": 8.99, "stock": 843 },
{ "skuId": "1200:2001", "color": "White", "price": 9.49, "stock": 512 }
],
"shipping": {
"options": [
{ "method": "AliExpress Standard Shipping", "cost": 0.00, "days": "15-35" },
{ "method": "DHL", "cost": 12.50, "days": "5-10" }
]
}
}
To jest jeden request zamiast parsowania 5 MB HTML + JavaScript. Zobaczysz ceny, warianty SKU, koszty wysyłki i reputację sprzedawcy w jednym miejscu.
Python: scrapowanie trendujących produktów z residential proxy
Poniższy skrypt łączy się z mobilnym API AliExpress przez residential proxy ProxyHat, pobiera stronę wyników wyszukiwania, a następnie detale topowych produktów — z rotacją IP per-request i naturalnymi opóźnieniami.
import requests
import time
import random
import json
PROXY_URL = "http://user-country-US:PASSWORD@gate.proxyhat.com:8080"
PROXIES = {"http": PROXY_URL, "https": PROXY_URL}
HEADERS = {
"User-Agent": "AliApp(AE/8.53.2)@Android/Huawei",
"Accept": "application/json",
"X-Feature-Id": "search",
"Accept-Language": "en-US",
}
def search_products(keyword, page=1, sort="ordersDesc"):
"""Wyszukaj produkty przez mobilne API."""
url = "https://m.aliexpress.com/api/products/search"
params = {
"keyword": keyword,
"page": page,
"sortType": sort,
"shipToCountry": "US",
}
resp = requests.get(url, params=params, headers=HEADERS, proxies=PROXIES, timeout=15)
resp.raise_for_status()
return resp.json()
def get_product_detail(product_id):
"""Pobierz pełne detale produktu z API mobilnego."""
url = "https://m.aliexpress.com/api/product/detail"
params = {"productId": product_id, "shipToCountry": "US"}
resp = requests.get(url, params=params, headers=HEADERS, proxies=PROXIES, timeout=15)
resp.raise_for_status()
return resp.json()
def find_trending_products(keyword, top_n=10):
"""Znajdź top N produktów po liczbie zamówień."""
data = search_products(keyword, page=1, sort="ordersDesc")
products = data.get("resultList", [])
trending = []
for p in products[:top_n]:
pid = p.get("productId")
if not pid:
continue
time.sleep(random.uniform(1.5, 3.5)) # naturalne opóźnienie
detail = get_product_detail(pid)
trending.append({
"id": pid,
"title": detail.get("title", ""),
"min_price": detail.get("price", {}).get("min"),
"orders": detail.get("orders", 0),
"rating": detail.get("avgRating", 0),
"seller_positive_rate": detail.get("seller", {}).get("positiveRate", 0),
})
print(f" → {detail.get('title', '?')[:60]} | orders: {detail.get('orders')} | ${detail.get('price',{}).get('min')}")
return trending
results = find_trending_products("wireless earbuds", top_n=10)
print(json.dumps(results, indent=2, ensure_ascii=False))
Rotacja sticky session dla detali produktu
Gdy pobierasz wiele stron jednego produktu lub sklepu, sticky session (utrzymanie jednego IP na kilka minut) wygląda naturalniej niż rotacja per-request:
# Sticky session — trzymaj ten sam IP przez 10 minut
STICKY_PROXY = "http://user-country-US-session-myprod1:PASSWORD@gate.proxyhat.com:8080"
STICKY_PROXIES = {"http": STICKY_PROXY, "https": STICKY_PROXY}
def get_product_detail_sticky(product_id):
"""Pobierz detale z sticky session — wygląda jak realny użytkownik przeglądający."""
url = "https://m.aliexpress.com/api/product/detail"
params = {"productId": product_id, "shipToCountry": "US"}
resp = requests.get(url, params=params, headers=HEADERS, proxies=STICKY_PROXIES, timeout=15)
resp.raise_for_status()
return resp.json()
cURL: szybki test endpointu
curl -x http://user-country-US:PASSWORD@gate.proxyhat.com:8080 \
-H "User-Agent: AliApp(AE/8.53.2)@Android/Huawei" \
-H "Accept: application/json" \
"https://m.aliexpress.com/api/products/search?keyword=phone+case&page=1&sortType=ordersDesc&shipToCountry=US"
Node.js: pobieranie kosztów wysyłki
const axios = require('axios');
const HttpsProxyAgent = require('https-proxy-agent');
const PROXY = 'http://user-country-DE:PASSWORD@gate.proxyhat.com:8080';
const agent = new HttpsProxyAgent(PROXY);
async function getShippingCost(productId, country = 'DE') {
const url = 'https://m.aliexpress.com/api/product/detail';
const { data } = await axios.get(url, {
httpsAgent: agent,
params: { productId, shipToCountry: country },
headers: {
'User-Agent': 'AliApp(AE/8.53.2)@Android/Huawei',
'Accept': 'application/json',
},
});
const shipping = data.shipping?.options || [];
return shipping.map(s => ({
method: s.method,
cost: s.cost,
estimatedDays: s.days,
}));
}
getShippingCost(1005006284912345, 'DE').then(console.log);
Warianty SKU, koszty wysyłki i reputacja sprzedawcy
Warianty SKU — jak je poprawnie mapować
Produkty AliExpress mają typowo wiele wariantów (kolor, rozmiar, pojemność). Każdy wariant to osobny SKU z własną ceną i stanem magazynowym. W JSON z API mobilnego dostajesz pole skuList:
"skuList": [
{ "skuId": "14:200006151#350983", "color": "Black", "size": "M", "price": 8.99, "stock": 843 },
{ "skuId": "14:200006151#350984", "color": "White", "size": "M", "price": 9.49, "stock": 512 },
{ "skuId": "14:200006151#350985", "color": "Black", "size": "L", "price": 10.99, "stock": 231 }
]
Wskazówka: do porównań cen między sprzedawcami bierz min_price z głównego obiektu, ale do kalkulacji marży dropshippingowej — mapuj każdy SKU osobno. Różnica między najtańszym a najdroższym wariantem może wynosić 100%+.
Koszty wysyłki — zależą od kraju docelowego
Parametr shipToCountry w API jest kluczowy. AliExpress oferuje różne metody i ceny wysyłki w zależności od:
- Kraju docelowego (US vs DE vs PL — różne stawki)
- Wariantu SKU (ciężar/rozmiar paczki się zmienia)
- Obecności promocji „Free Shipping" (często dotyczy tylko wybranych krajów)
Dla dropshipperów: zawsze przeliczaj koszty wysyłki do kraju Twoich klientów, nie do kraju Twojego serwera.
Reputacja sprzedawcy — co liczyć
Z detali produktu API zwraca obiekt seller z polami:
positiveRate— procent pozytywnych ocen (celuj w ≥ 95%)storeName— nazwa sklepustoreId— ID do dalszego scrapowania asortymentuyearsOnPlatform— lata na platformie (im więcej, tym lepiej)
Filtruj produkty z positiveRate < 90% — ryzyko sporów i zwrotów rośnie drastycznie.
Świeżość danych: jak często AliExpress zmienia ceny i stany
AliExpress to platforma z dynamicznymi cenami. Oto co wiemy z monitoringu:
| Typ danych | Częstotliwość zmian | Zalecana kadencja scrapowania |
|---|---|---|
| Cena produktu | Kilka razy dziennie (flash sales, promocje) | Co 4-6 godzin |
| Stan magazynowy (stock) | Ciągle (popularne produkty sprzedają się co minutę) | Co 1-2 godziny dla top SKU |
| Liczba zamówień (orders) | Codziennie | Raz dziennie |
| Oceny / recenzje | Kilka dziennie | Raz dziennie |
| Koszty wysyłki | Rzadko (zmiana taryf kurierskich) | Co 24 godziny |
Strategia optymalna: scrapuj rankingi i trendy raz dziennie (najlepiej rano w CST — chińskim czasie, kiedy sprzedawcy aktualizują promocje). Ceny i stany magazynowe top produktów — co 2-4 godziny z residential proxy w trybie sticky session.
Residential vs datacenter vs mobile proxy na AliExpress
| Kryterium | Residential proxy | Datacenter proxy | Mobile proxy |
|---|---|---|---|
| Limit requestów przed blokadą | ~500-1000/IP/h | ~80-150/IP/h | ~2000+/IP/h |
| Ryzyko CAPTCHA | Niskie | Wysokie | Bardzo niskie |
| Koszt za GB | Średni | Niski | Wysoki |
| Najlepsze zastosowanie | Research produktów, monitorowanie cen | Jednorazowe zrzuty danych | Ciągłe monitorowanie, wysoka częstotliwość |
Dla większości dropshippingowych narzędzi, residential proxy z rotacją per-request jest optymalnym kompromisem między kosztem a niezawodnością. ProxyHat oferuje residential IP z geo-targetingiem — kluczowe, gdy koszty wysyłki zależą od kraju docelowego. Więcej o lokalizacjach znajdziesz na stronie lokalizacji ProxyHat.
Najlepsze praktyki i wskazówki operacyjne
1. Używaj realistycznych nagłówków mobilnych
API mobilne AliExpress oczekuje nagłówków aplikacji. Minimalny zestaw:
User-Agent: AliApp(AE/8.53.2)@Android/HuaweiAccept: application/jsonAccept-Language: en-US(lub język docelowy)
2. Rotuj User-Agent wraz z IP
Połączenie tego samego UA z różnymi IP wygląda nienaturalnie. Przy rotacji IP per-request, losuj też UA z puli 10-20 realistycznych stringów.
3. Dodawaj losowe opóźnienia
Zbyt szybkie requesty = ban. Celuj w 1.5-4 sekundy między requestami z tego samego IP (sticky session) lub 0.5-1.5 sekundy przy rotacji IP per-request.
4. Limituj głębokość paginacji
AliExpress rzadko zwraca więcej niż 60-100 stron wyników. Dla researchu trendów, top 3-5 stron (po 50 produktów) wystarcza — najpopularniejsze produkty są zawsze na początku.
5. Monitoruj kod odpowiedzi HTTP
200— sukces403— IP zablokowane lub CAPTCHA wymuszona429— rate limit osiągnięty503— tymczasowa blokada, retry po 30-60 sekundach
6. Respektuj robots.txt i limity prawne
AliExpress ma robots.txt z ograniczeniami. Scrapowanie danych produktowych do własnego researchu jest ogólnie akceptowalne, ale masowe kopiowanie opisów i zdjęć do własnego sklepu może naruszać prawa autorskie sprzedawców. Zawsze weryfikuj ToS platformy i lokalne przepisy (RODO/GDPR przy danych europejskich).
Kluczowe wnioski (Key Takeaways)
1. Mobilne API AliExpress zwraca czysty JSON z cenami, SKU, wysyłką i ocenami — jest stabilniejsze i łatwiejsze w parsowaniu niż desktop HTML.
2. Anti-bot stack Alibaba jest agresywny — residential proxy to minimum, datacenter IP padną po ~100 requestach.
3. Parametr
shipToCountryw API jest kluczowy dla dropshipperów — koszty wysyłki drastycznie się różnią między krajami.4. Mapuj każdy wariant SKU osobno — różnica cen między wariantami może zjeść Twoją marżę.
5. Kadencja scrapowania: ceny co 4-6h, rankingi raz dziennie, stany magazynowe top produktów co 1-2h.
6. Sticky session proxy wygląda naturalniej przy przeglądaniu jednego produktu — rotacja per-request jest lepsza do wyszukiwania.
Gotowy do budowy swojego pipeline'u researchu produktów na AliExpress? Sprawdź plany ProxyHat — residential proxy z geo-targetingiem w 190+ krajach, idealne do monitorowania cen i trendów e-commerce.






