Jak scrapować AliExpress: kompletny przewodnik po researchu produktów i API mobilnym

Pragmatyczny przewodnik scrapowania AliExpress — od endpointów API mobilnego po obchodzenie anti-bot stacku Alibaba Group. Z przykładami w Pythonie, residential proxy i strategią odświeżania danych dla dropshipperów.

Jak scrapować AliExpress: kompletny przewodnik po researchu produktów i API mobilnym

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 wyszukiwania
  • page — numer strony (od 1)
  • sortTypebestMatch, priceAsc, priceDesc, ordersDesc
  • shipToCountry — 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 wyszukiwania
  • shipToCountry — 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 sklepu
  • storeId — ID do dalszego scrapowania asortymentu
  • yearsOnPlatform — 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/Huawei
  • Accept: application/json
  • Accept-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 — sukces
  • 403 — IP zablokowane lub CAPTCHA wymuszona
  • 429 — rate limit osiągnięty
  • 503 — 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 shipToCountry w 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.

Gotowy, aby zacząć?

Dostęp do ponad 50 mln rezydencjalnych IP w ponad 148 krajach z filtrowaniem AI.

Zobacz cenyProxy rezydencjalne
← Powrót do Bloga