Если вы строите инструмент для исследования товаров на AliExpress, вы уже знаете: каталог огромен, цены меняются ежедневно, а лучшие продавцы появляются и исчезают за неделю. Ручной мониторинг мёртв — нужен автоматизированный сбор. Но AliExpress агрессивно блокирует ботов. Этот гайд покажет, как обойти антибот-стек Alibaba, использовать мобильные API вместо парсинга HTML и настроить стабильный пайплайн на Python с резидентными прокси.
Структура AliExpress — что и где скрейпить
AliExpress — это не одна страница, а набор из четырёх основных типов контента, каждый со своей структурой и логикой обновления.
Страницы поиска
URL: https://www.aliexpress.com/w/wholesale-KEYWORD.html. Поиск возвращает список товаров с пагинацией (~60 товаров на страницу). Параметры фильтрации (SortType=price_asc, shipCountry=RU) можно передавать в query-string. Проблема: при повторных запросах с одного IP результаты быстро редуцируются, а после 3–5 страниц выдача обрезается.
Карточки товаров
URL: https://www.aliexpress.com/item/ITEM_ID.html. Содержат заголовок, изображения, варианты SKU, цену, рейтинг, количество заказов, информацию о доставке и продавце. На десктопе данные частично рендерятся через JavaScript — в исходном HTML нет полного JSON.
Страницы магазинов
URL: https://www.aliexpress.com/store/STORE_ID. Список всех товаров конкретного продавца с фильтрами по категории и сортировкой. Полезно для мониторинга конкурентов и отслеживания новых листингов.
Ленты популярных товаров
AliExpress регулярно обновляет подборки trending-товаров — «Top Brands», «Super Deals», «Choice». Эти фиды — золотая жила для дропшипперов: именно здесь можно найти товары с растущим спросом до того, как они появятся в инструментах конкурентов.
Антибот-стек Alibaba Group
Alibaba — одна из самых продвинутых компаний в мире по защите от автоматизированного доступа. Вот с чем вы столкнётесь:
- Web Application Firewall (WAF) — фильтрация по IP-репутации, частоте запросов, геолокации. Сигнатуры датацентерных IP блокируются мгновенно.
- JavaScript-челленджи — при подозрительном трафике сервер возвращает JS, который вычисляет fingerprint браузера. Без headless-браузера не пройти.
- Rate limiting — приблизительно 80–120 запросов в минуту с одного IP до мягкого бана (HTTP 429 или пустой ответ). Жёсткий бан наступает быстрее, если IP из датацентерного диапазона.
- CAPTCHA — AliExpress использует AliCaptcha (аналог reCAPTCHA) на поиске и при подозрительном поведении. Решение стоит $1–3 за 1000 капч, но это замедляет пайплайн.
- Мобильный TLS-fingerprinting — мобильные API проверяют TLS-отпечаток. Библиотека
tls_clientв Python помогает имитировать реальный мобильный клиент.
Вывод: скрейпить AliExpress с датацентерных прокси — пустая трата времени. Резидентные и мобильные прокси — единственный рабочий подход для стабильного сбора.
API vs HTML — почему мобильные эндпоинты лучше
Вот ключевое решение: не парсьте HTML. У AliExpress есть мобильные API-эндпоинты, которые возвращают чистый JSON с richer-данными, чем десктопный HTML. Это быстрее, стабильнее и даёт больше информации.
| Критерий | Десктопный HTML | Мобильный API |
|---|---|---|
| Формат ответа | HTML + встроенный JSON в <script> | Чистый JSON |
| Парсинг | BeautifulSoup / XPath, хрупкий | Прямой доступ к полям |
| Данные по SKU | Частичные, требуют JS-рендеринга | Полная матрица вариантов |
| Стоимость доставки | Только после JS-рендеринга | По стране назначения в одном запросе |
| Скорость | ~2–4 сек на страницу (с рендером) | ~0.5–1 сек на запрос |
| Стабильность при изменении UI | Низкая — вёрстка часто меняется | Высокая — API-контракты стабильнее |
| Антибот-защита | Полная (WAF + JS-челлендж + CAPTCHA) | Умеренная (rate-limit + TLS-fingerprint) |
Ключевые мобильные API-эндпоинты
AliExpress использует префикс m. и API-пути вида /aeglodapi. Вот рабочие паттерны:
- Поиск товаров:
https://m.aliexpress.com/aeglodapi/search/items?keyword=KEYWORD&page=1 - Детали товара:
https://m.aliexpress.com/aeglodapi/item/detail?itemId=ITEM_ID - Варианты SKU:
https://m.aliexpress.com/aeglodapi/item/sku?itemId=ITEM_ID - Стоимость доставки:
https://m.aliexpress.com/aeglodapi/logistics/freight?itemId=ITEM_ID&country=RU - Товары магазина:
https://m.aliexpress.com/aeglodapi/store/items?storeId=STORE_ID&page=1
Заголовки должны имитировать мобильное приложение:
# Минимальные заголовки для мобильного API AliExpress
MOBILE_HEADERS = {
"User-Agent": "AliApp(AE/8.53.2;Android;12;phone)",
"X-Client-Type": "android",
"X-App-Version": "8.53.2",
"Accept": "application/json",
"Accept-Language": "en-US",
}
Python-пример: скрейпинг мобильного API через резидентные прокси
Ниже — готовый скрипт для поиска trending-товаров через мобильный API AliExpress с ротацией IP через ProxyHat.
import requests
import time
import json
from datetime import datetime
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;12;phone)",
"X-Client-Type": "android",
"X-App-Version": "8.53.2",
"Accept": "application/json",
"Accept-Language": "en-US",
}
def search_aliexpress(keyword: str, page: int = 1) -> dict:
"""Поиск товаров через мобильный API AliExpress."""
url = "https://m.aliexpress.com/aeglodapi/search/items"
params = {
"keyword": keyword,
"page": page,
"sortType": "bestMatch",
}
resp = requests.get(
url, headers=HEADERS, params=params,
proxies=PROXIES, timeout=15
)
resp.raise_for_status()
return resp.json()
def get_item_detail(item_id: str) -> dict:
"""Получить детали товара по ID."""
url = "https://m.aliexpress.com/aeglodapi/item/detail"
params = {"itemId": item_id}
resp = requests.get(
url, headers=HEADERS, params=params,
proxies=PROXIES, timeout=15
)
resp.raise_for_status()
return resp.json()
def find_trending_products(keyword: str, top_n: int = 20):
"""Найти trending-товары по ключевому слову."""
data = search_aliexpress(keyword)
items = data.get("result", {}).get("itemList", [])[:top_n]
results = []
for item in items:
detail = get_item_detail(str(item["itemId"]))
results.append({
"item_id": item["itemId"],
"title": item.get("title", ""),
"price": detail.get("price", {}).get("minPrice", ""),
"orders": item.get("tradeCount", 0),
"rating": item.get("starRating", 0),
"store_id": item.get("storeId", ""),
"scraped_at": datetime.utcnow().isoformat(),
})
time.sleep(1.5) # throttle between detail requests
return results
if __name__ == "__main__":
trending = find_trending_products("wireless earbuds")
for p in trending:
print(json.dumps(p, ensure_ascii=False))
Пример усечённого ответа от мобильного API поиска:
{
"result": {
"itemList": [
{
"itemId": "3256804606318997",
"title": "TWS Wireless Earbuds Bluetooth 5.3 ...",
"minPrice": "3.45",
"maxPrice": "12.99",
"tradeCount": 5420,
"starRating": 4.6,
"storeId": "912074614",
"imageUrl": "https://ae01.alicdn.com/kf/..."
}
]
}
}
Почему резидентные прокси — обязательно
Мобильные API AliExpress проверяют IP-адрес. Датацентерные IP определяются по ASN и получают HTTP 403 или пустой ответ. Резидентные IP выглядят как реальные пользователи. Для максимальной стабильности используйте мобильные прокси — они эмулируют трафик реальных мобильных устройств, что идеально совпадает с заголовками мобильного приложения.
Настройка стики-сессии ProxyHat для серий запросов к одному товару:
# Sticky-сессия на 10 минут для последовательных запросов
PROXY_URL = (
"http://user-session-myorder123-country-US:PASSWORD"
"@gate.proxyhat.com:8080"
)
PROXIES = {"http": PROXY_URL, "https": PROXY_URL}
Обработка вариантов SKU, стоимости доставки и репутации продавца
Варианты SKU (варианты товаров)
Один товар на AliExpress может иметь 5–50+ вариантов (цвет, размер, комплектация). Каждый вариант — отдельный SKU с собственной ценой, остатком и SKU-ID. Мобильный API возвращает полную матрицу вариантов в поле skuInfo.
def parse_sku_matrix(detail: dict) -> list[dict]:
"""Разобрать матрицу SKU из деталей товара."""
sku_items = detail.get("skuInfo", {}).get("skuList", [])
variants = []
for sku in sku_items:
variants.append({
"sku_id": sku.get("skuId"),
"price": sku.get("price"),
"stock": sku.get("availQuantity", 0),
"color": sku.get("color", ""),
"size": sku.get("size", ""),
"sku_attr": sku.get("skuAttr", ""),
})
return variants
# Пример результата:
# [
# {"sku_id": "14:193#Blue;5:100014064", "price": "3.45",
# "stock": 892, "color": "Blue", "size": "S"},
# {"sku_id": "14:193#Red;5:100014064", "price": "3.99",
# "stock": 341, "color": "Red", "size": "S"},
# ]
Важно для дропшипперов: цена и остатки различаются по SKU. Товар за $3.45 может быть только для непопулярного цвета, а топовый вариант — за $12.99. Собирайте все SKU, а не только минимальную цену.
Стоимость доставки по стране назначения
Стоимость доставки — критический параметр для дропшиппинга. API логистики возвращает список методов доставки с ценами и сроками для конкретной страны:
def get_shipping_cost(item_id: str, country: str = "RU") -> list[dict]:
"""Получить стоимость доставки товара в указанную страну."""
url = "https://m.aliexpress.com/aeglodapi/logistics/freight"
params = {"itemId": item_id, "country": country}
resp = requests.get(
url, headers=HEADERS, params=params,
proxies=PROXIES, timeout=15
)
resp.raise_for_status()
data = resp.json()
shipping_options = []
for opt in data.get("result", {}).get("freightList", []):
shipping_options.append({
"carrier": opt.get("company", ""),
"cost": opt.get("freightAmount", {}).get("value", ""),
"currency": opt.get("freightAmount", {}).get("currency", ""),
"estimated_days": opt.get("deliveryTime", ""),
"tracking": opt.get("tracking", False),
})
return shipping_options
Репутация продавца
Мобильный API возвращает ключевые метрики продавца в поле storeInfo:
- storeRating — общий рейтинг магазина (1–5)
- positiveFeedbackRate — процент положительных отзывов (ищите >95%)
- tradeCount — общее количество заказов
- yearsOnPlatform — сколько лет на платформе
Для дропшиппинга фильтруйте: рейтинг ≥ 4.7, positiveFeedbackRate ≥ 96%, минимум 6 месяцев на платформе.
Свежесть данных — как часто обновляются цены и остатки
AliExpress — высокодинамичная площадка. Вот что нужно знать о частоте изменений:
| Тип данных | Частота изменений | Рекомендуемая частота скрейпинга |
|---|---|---|
| Цена товара | 1–3 раза в день (промо — ежечасно) | Каждые 4–6 часов |
| Остатки на складе | Несколько раз в час | Каждые 1–2 часа для критичных товаров |
| Количество заказов | Обновляется раз в сутки | Раз в день |
| Рейтинг/отзывы | Ежедневно | Раз в день |
| Стоимость доставки | Редко (раз в неделю) | Раз в неделю |
| Новые листинги | Постоянно | Каждые 2–4 часа для мониторинга |
Стратегия скрейпинга: не скрейпьте всё каждый час. Разделите товары на три приоритета:
- Hot-товары (top 100 по продажам) — обновляйте каждые 2 часа.
- Мониторинг конкурентов (500–2000 товаров) — каждые 6 часов.
- Полный каталог (десятки тысяч) — раз в сутки для обнаружения новых листингов.
Это снижает нагрузку в 5–10 раз по сравнению с «скрейпить всё каждые 30 минут» и сохраняет свежесть данных там, где это критично.
Практические рекомендации по стабильности
Ротация IP и rate limiting
- Держите не более 40 запросов в минуту на один IP-адрес.
- Используйте ротацию IP для поиска и стики-сессии для серий запросов к одному товару.
- При получении HTTP 429 — пауза 60 секунд и смена IP.
- При получении пустого ответа — проверьте заголовки и TLS-fingerprint.
Геотаргетинг
AliExpress показывает разные цены и доступность товаров в зависимости от страны. Если ваш целевой рынок — США, используйте прокси с country-US. Для Европы — country-DE. Это критично для корректной оценки стоимости доставки и локальных промо-акций.
Обработка ошибок
- Всегда проверяйте HTTP-статус ответа.
- Если JSON-ответ содержит
"errorCode": "system.error"— это блокировка, смените IP. - Реализуйте exponential backoff: 1 сек → 2 сек → 4 сек → 8 сек, затем смена IP.
- Храните raw-ответы в S3/GCS для повторной обработки без повторного скрейпинга.
Ключевые выводы
- Не парсьте HTML — мобильные API AliExpress возвращают чистый JSON с полными данными по SKU, доставке и продавцу.
- Используйте резидентные или мобильные прокси — датацентерные IP блокируются Alibaba мгновенно.
- Имитируйте мобильное приложение — правильные заголовки и TLS-fingerprint обязательны для мобильных API.
- Собирайте все SKU, не только минимальную цену — варианты могут отличаться в 3–4 раза.
- Три уровня приоритета для частоты скрейпинга — горячие товары каждые 2 часа, мониторинг каждые 6 часов, полный каталог раз в сутки.
- Геотаргетинг прокси определяет цены и доступность — используйте IP целевой страны.
Готовы начать? Настройте резидентные прокси ProxyHat за пару минут и запустите первый скрейпинг-пайплайн уже сегодня. А если нужна помощь с конкретным кейсом — посмотрите наши кейсы по веб-скрейпингу.






