Como Raspar Dados do AliExpress: Guia Prático para Dropshippers e Ferramentas de Product Research

Guia técnico para scrape AliExpress com foco em product research. Cobrimos a estrutura do site, APIs mobile, anti-bot, proxies residenciais e cadência de coleta para dropshippers.

Como Raspar Dados do AliExpress: Guia Prático para Dropshippers e Ferramentas de Product Research

Por Que Raspar o AliExpress é Diferente de Qualquer Outro Site

Se você constrói ferramentas de AliExpress product research para dropshippers, já sabe: o AliExpress não é um e-commerce comum. É um marketplace com mais de 200 milhões de produtos, milhares de vendedores e uma infraestrutura anti-bot herdada do Alibaba Group. Isso significa que scrape AliExpress exige estratégia — não basta disparar requests e torcer.

O painel real é claro: dropshippers precisam de dados de trending products, variação de preços, custo de frete por destino e reputação do vendedor — tudo atualizado diariamente. Ferramentas de product research que não conseguem escalar a coleta perdem relevância rápido.

Neste guia, vamos destrinchar a estrutura do AliExpress, as defesas anti-bot, as APIs mobile que retornam JSON muito mais rico que o HTML desktop, e como usar um AliExpress proxy residencial para coletar dados de forma confiável.

Estrutura do AliExpress: O Que Existe para Raspar

Antes de escrever código, você precisa entender os quatro principais superfícies de dados do AliExpress:

1. Páginas de Busca (Search)

A URL de busca segue o padrão https://www.aliexpress.com/wholesale?SearchText=QUERY. Cada página de resultados lista ~60 produtos com título, preço, thumbnail, rating e número de ordens. O problema: a paginação via HTML é instável — o AliExpress usa renderização client-side e os seletores mudam com frequência.

2. Páginas de Produto (Product Detail Pages)

Cada produto tem uma URL como https://www.aliexpress.com/item/4000123456789.html. Aqui você encontra descrição completa, variantes (cor, tamanho), SKUs com preços diferenciados, imagens, especificações e avaliações. É a mina de ouro — e também a página mais protegida.

3. Páginas de Loja (Store Pages)

Lojas seguem https://www.aliexpress.com/store/912345678. Úteis para monitorar vendedores específicos, verificar catálogo completo e rastrear novos lançamentos.

4. Feeds de Produtos em Alta (Hot Products / Trending)

O AliExpress expõe endpoints internos que retornam produtos trending por categoria. Esses feeds são acessíveis via API mobile e são a fonte mais eficiente para AliExpress product research — sem precisar iterar páginas de busca.

O Stack Anti-Bot do Alibaba Group

O AliExpress compartilha infraestrutura com o resto do Alibaba Group. O que você enfrenta:

  • AliGuard (Web Application Firewall): detecta padrões de request anômalos, fingerprints de TLS e headers incomuns. Se você envia requests com o fingerprint TLS de um scraper Python puro, o bloqueio é quase imediato.
  • Rate limiting por IP: o limite prático é ~30-50 requests/minuto por IP residencial. IPs de datacenter são bloqueados muito mais cedo (~5-10 requests).
  • Desafios JavaScript: páginas de produto frequentemente exigem execução de JS para renderizar dados de preço e SKU. O HTML inicial contém placeholders, não dados reais.
  • Rotação de seletores CSS: classes CSS mudam entre deploys (são geradas por build). Seletores como .product-price hoje podem ser _1x2b3 amanhã.
  • Verificação CAPTCHA: após detectar comportamento de bot, o AliExpress exibe sliders ou CAPTCHAs de imagem — especialmente em páginas de produto e busca.

Conclusão prática: raspar HTML do AliExpress desktop é uma batalha perdida a longo prazo. A estratégia sustentável é usar as APIs mobile.

APIs Mobile: O Caminho para Dados Ricos em JSON

O app mobile do AliExpress se comunica com backends que retornam JSON estruturado — sem renderização de HTML, sem seletores frágeis. Esses endpoints são a base de qualquer operação séria de scrape AliExpress.

Endpoints Principais

Os endpoints mobile usam o domínio gw.aliexpress.com ou m.aliexpress.com/api. Os mais relevantes:

  • Busca de produtos: https://gw.aliexpress.com/openapi/param2/3/portals.open/api.searchItems/v2 — aceita parâmetros como keyword, categoryId, pageNo, sort.
  • Detalhe do produto: https://gw.aliexpress.com/openapi/param2/2/portals.open/api.getItemInfo/v2 — aceita itemId e retorna título, preço, variantes, imagens, avaliações.
  • Feed de trending: https://gw.aliexpress.com/openapi/param2/3/portals.open/api.getHotProducts/v2 — retorna produtos em alta por categoria.

Headers Necessários

Esses endpoints exigem headers que simulam o app mobile:

X-App-Version: 8.15.0
X-Platform: android
X-Region: BR
X-Language: pt
User-Agent: AliApp(AE/8.15.0) AppleWebKit/537.36
Accept: application/json

Exemplo de Resposta (Truncada)

Uma chamada ao endpoint de busca retorna JSON como:

{
  "code": 200,
  "result": {
    "items": [
      {
        "itemId": "4000123456789",
        "title": "Wireless Earbuds TWS Bluetooth 5.3",
        "price": {"minPrice": "8.99", "maxPrice": "15.49", "currency": "USD"},
        "trade": {"orders": 4521, "rating": 4.7},
        "shop": {"shopId": "912345678", "name": "TechZone Official"},
        "image": "https://ae01.alicdn.com/..."
      }
    ],
    "totalResults": 184320
  }
}

Compare isso com raspar HTML: sem necessidade de renderizar JS, sem seletores que quebram, e dados estruturados que incluem preço mínimo/máximo, número de ordens e dados da loja em uma única chamada.

Comparação: HTML Desktop vs API Mobile

Aspecto HTML Desktop API Mobile
Formato dos dados HTML com JS rendering JSON estruturado
Estabilidade Baixa — seletores mudam Alta — contratos de API são estáveis
Dados de variantes Embutidos em scripts inline Separados por SKU no JSON
Rate limit por IP ~30 req/min (residencial) ~40 req/min (residencial)
Bloqueio de datacenter Imediato após 5-10 req Imediato após 5-10 req
Necessidade de JS Sim — headless browser Não — request HTTP direto
Custo de infraestrutura Alto (browsers headless) Baixo (HTTP requests)

Python: Trending Product Discovery via API Mobile com Proxies Residenciais

Agora vamos ao código prático. Este script descobre produtos trending por categoria usando a API mobile do AliExpress, rotacionando IPs via AliExpress proxy residencial.

import requests
import json
import time
import random

# ProxyHat residential proxy configuration
PROXY_HOST = "gate.proxyhat.com"
PROXY_PORT = 8080
PROXY_USER = "user-country-BR"  # Geo-target Brazil
PROXY_PASS = "your_password"
PROXY_URL = f"http://{PROXY_USER}:{PROXY_PASS}@{PROXY_HOST}:{PROXY_PORT}"

PROXIES = {
    "http": PROXY_URL,
    "https": PROXY_URL,
}

HEADERS = {
    "X-App-Version": "8.15.0",
    "X-Platform": "android",
    "X-Region": "BR",
    "X-Language": "pt",
    "User-Agent": "AliApp(AE/8.15.0) AppleWebKit/537.36",
    "Accept": "application/json",
}


def fetch_trending_products(category_id: str, page: int = 1) -> dict:
    """Fetch trending products from AliExpress mobile API."""
    url = "https://gw.aliexpress.com/openapi/param2/3/portals.open/api.getHotProducts/v2"
    params = {
        "categoryId": category_id,
        "pageNo": page,
        "pageSize": 50,
    }

    # Sticky session para manter consistência por página
    session_user = f"{PROXY_USER}-session-trend-{category_id}-{page}"
    proxy_url = f"http://{session_user}:{PROXY_PASS}@{PROXY_HOST}:{PROXY_PORT}"
    proxies = {"http": proxy_url, "https": proxy_url}

    response = requests.get(
        url, params=params, headers=HEADERS, proxies=proxies, timeout=15
    )
    response.raise_for_status()
    return response.json()


def extract_product_data(raw: dict) -> list[dict]:
    """Extract relevant fields from API response."""
    items = raw.get("result", {}).get("items", [])
    products = []
    for item in items:
        products.append({
            "item_id": item.get("itemId"),
            "title": item.get("title"),
            "min_price": item.get("price", {}).get("minPrice"),
            "max_price": item.get("price", {}).get("maxPrice"),
            "orders": item.get("trade", {}).get("orders"),
            "rating": item.get("trade", {}).get("rating"),
            "shop_id": item.get("shop", {}).get("shopId"),
            "shop_name": item.get("shop", {}).get("name"),
        })
    return products


# Main execution — trending electronics (category 44)
if __name__ == "__main__":
    all_products = []
    for page in range(1, 4):  # 3 pages = ~150 products
        data = fetch_trending_products(category_id="44", page=page)
        products = extract_product_data(data)
        all_products.extend(products)
        print(f"Page {page}: {len(products)} products fetched")
        time.sleep(random.uniform(2, 5))  # Rate-limit awareness

    # Sort by orders descending — find the real trending winners
    all_products.sort(key=lambda x: x["orders"] or 0, reverse=True)
    for p in all_products[:10]:
        print(f"{p['orders']:,} orders | ${p['min_price']}-{p['max_price']} | {p['title'][:60]}")

Observe o uso de user-country-BR no username do proxy — isso geo-targeta IPs brasileiros, essencial porque o AliExpress exibe preços e disponibilidade diferentes por região. Para product research global, rotacione países-chave: user-country-US, user-country-DE, user-country-GB.

Busca de Produtos com Filtros e Rotação de IP

Para buscar produtos específicos com filtros de preço e ordenação, use o endpoint de search:

def search_products(keyword: str, min_price: float = None, 
                    max_price: float = None, sort: str = "SALE_PRICE_ASC",
                    page: int = 1) -> dict:
    """Search AliExpress products with price filters and sorting."""
    url = "https://gw.aliexpress.com/openapi/param2/3/portals.open/api.searchItems/v2"
    params = {
        "keyword": keyword,
        "pageNo": page,
        "pageSize": 50,
        "sort": sort,  # SALE_PRICE_ASC, ORDERS_DESC, RATING_DESC
    }
    if min_price:
        params["minPrice"] = min_price
    if max_price:
        params["maxPrice"] = max_price

    # Rotate session per keyword to distribute across IPs
    session_id = f"search-{keyword.replace(' ', '-')}-{page}"
    proxy_user = f"{PROXY_USER}-session-{session_id}"
    proxy_url = f"http://{proxy_user}:{PROXY_PASS}@{PROXY_HOST}:{PROXY_PORT}"
    proxies = {"http": proxy_url, "https": proxy_url}

    response = requests.get(
        url, params=params, headers=HEADERS, proxies=proxies, timeout=15
    )
    response.raise_for_status()
    return response.json()


# Example: find wireless earbuds under $20, sorted by orders
results = search_products("wireless earbuds", max_price=20, sort="ORDERS_DESC")

Variantes de SKU, Frete e Reputação do Vendedor

Variantes de SKU (Cores, Tamanhos, etc.)

O endpoint de detalhe do produto retorna todas as variantes com preços diferenciados. Isso é crítico para dropshippers que precisam calcular margem por SKU, não apenas por produto.

def get_product_detail(item_id: str) -> dict:
    """Fetch full product detail including SKU variants."""
    url = "https://gw.aliexpress.com/openapi/param2/2/portals.open/api.getItemInfo/v2"
    params = {"itemId": item_id}

    proxy_user = f"{PROXY_USER}-session-detail-{item_id}"
    proxy_url = f"http://{proxy_user}:{PROXY_PASS}@{PROXY_HOST}:{PROXY_PORT}"
    proxies = {"http": proxy_url, "https": proxy_url}

    response = requests.get(
        url, params=params, headers=HEADERS, proxies=proxies, timeout=15
    )
    response.raise_for_status()
    return response.json()


data = get_product_detail("4000123456789")
skus = data.get("result", {}).get("skuList", [])

for sku in skus:
    print(f"SKU: {sku['skuId']} | Price: {sku['price']} | Stock: {sku['stock']}")

Custo de Frete por Destino

O frete no AliExpress varia drasticamente por país de destino e método de envio. A API mobile retorna estimativas de frete no objeto shipping do detalhe do produto. Para dropshippers, a margem pode desaparecer completamente se o frete para o destino final não for considerado.

Campos relevantes na resposta:

  • shipping.freight — custo de frete por método (Standard Shipping, ePacket, DHL, etc.)
  • shipping.deliveryDays — estimativa de dias de entrega
  • shipping.countryCode — país de destino da cotação

Use user-country-US no proxy para ver preços e frete como um comprador americano, ou user-country-BR para o Brasil. O geo-targeting do ProxyHat resolve isso diretamente no username — sem necessidade de parâmetros extras na request.

Reputação do Vendedor

Dados do vendedor vêm no campo shop do detalhe do produto:

  • shop.shopId — ID da loja
  • shop.positiveRating — percentual de avaliações positivas
  • shop.followers — número de seguidores da loja
  • shop.yearsOnPlatform — anos ativos no AliExpress

Para dropshippers, a heurística simples é: vendedores com positiveRating > 95%, followers > 1000 e yearsOnPlatform >= 2 são confiáveis. Vendedores novos com poucos followers podem oferecer preços mais baixos, mas representam risco de fulfillment.

Frescor dos Dados: Com que Frequência o AliExpress Muda?

Esta é a pergunta que todo fundador de ferramenta de product research faz. A resposta depende do tipo de dado:

Tipo de Dado Frequência de Mudança Cadência de Coleta Recomendada
Preço 1-3x por dia (promoções flash mudam a cada hora) A cada 4-6 horas
Estoque / Disponibilidade Várias vezes por dia A cada 6-12 horas
Número de ordens Incremental (cresce ao longo do dia) 1-2x por dia
Avaliações / Rating Incremental 1x por dia
Trending / Hot Products Diariamente (nova lista a cada 24h) 1x por dia
Custo de frete Semanalmente (ou quando logística muda) 1x por semana

Estratégia de Cadência

Para uma ferramenta de product research, a cadência ideal é:

  • Discovery (trending): 1x por dia — colete o feed de trending products por categoria.
  • Monitoramento de preço: a cada 4-6 horas para os top 1000 produtos monitorados.
  • Full catalog scan: semanalmente — varra categorias inteiras para encontrar novos produtos.
  • Detalhe de SKU + frete: sob demanda — quando um usuário consulta um produto específico.

Com essa cadência, uma ferramenta que monitora 10.000 produtos gera aproximadamente:

  • 10.000 requests/dia para discovery (1x)
  • 60.000 requests/dia para monitoramento de preço (4x em 10k produtos, mas apenas top 1k = 4.000 requests/dia se for seletivo)
  • ~15.000-20.000 requests/dia no total

Isso requer um pool de proxies residenciais robusto. Com o ProxyHat, você pode distribuir essas requests geo-targetando diferentes mercados, com rotação automática de IPs.

Estratégia de Proxies para Escalar a Coleta

Residencial vs Datacenter

Proxies de datacenter são bloqueados pelo AliExpress após poucas requests. Proxies residenciais são a única opção viável para scrape AliExpress em escala. A diferença é brutal:

  • Datacenter: bloqueado em ~5-10 requests. Taxa de sucesso < 20%.
  • Residencial rotativo: taxa de sucesso > 90%. Rate limit de ~40 req/min por IP.
  • Residencial sticky session: mantém o mesmo IP por 10-30 minutos. Ideal para paginação e coleta de detalhes de produto em sequência.

Configuração Recomendada com ProxyHat

Para o endpoint de trending products, use rotação por request (sem sticky session), pois cada request é independente:

# Rotating IP per request — no session flag
PROXY_URL = "http://user-country-US:password@gate.proxyhat.com:8080"

Para paginação de busca e coleta de detalhes em sequência, use sticky sessions para manter consistência:

# Sticky session — same IP for 10-30 minutes
PROXY_URL = "http://user-country-US-session-abc123:password@gate.proxyhat.com:8080"

Concorrência e Rate Limiting

Com proxies residenciais do ProxyHat, a estratégia de escala é:

  1. Paralelize por país: dispare requests geo-targetadas para US, DE, GB, BR simultaneamente — cada país usa IPs diferentes.
  2. Limite concorrência por IP: mantenha ~30-40 requests/minuto por IP residencial.
  3. Use backoff exponencial: se receber status 429 ou CAPTCHA, espere 2^n segundos antes de tentar novamente com IP diferente.
  4. Monitore taxa de sucesso: se cair abaixo de 85%, reduza a velocidade ou troque o pool de IPs.

Considerações Éticas e Legais

Antes de escalar sua operação de coleta, considere:

  • robots.txt: verifique o robots.txt do AliExpress. Alguns paths podem ser restritos.
  • Termos de Serviço: o ToS do AliExpress proíbe scraping automatizado. Se você opera uma ferramenta comercial, consulte um advogado.
  • GDPR/CCPA: dados de vendedores (nome, localização) podem ser dados pessoais sob GDPR. Armazene e processe com cuidado.
  • Uso justo: não sobrecarregue os servidores do AliExpress. Rate limiting não é apenas para evitar bloqueios — é boa cidadã digital.
  • Dados públicos vs privados: preços e avaliações são dados públicos. Informações de conta de vendedor podem não ser.

Key Takeaways

1. Use APIs mobile, não HTML desktop. Os endpoints mobile do AliExpress retornam JSON estruturado, são mais estáveis e não exigem renderização de JavaScript.

2. Proxies residenciais são obrigatórios. Proxies de datacenter são bloqueados quase imediatamente. Use ProxyHat com geo-targeting por país para consistência e escala.

3. Geo-targeting importa. Preços, frete e disponibilidade variam por país. Configure user-country-XX no ProxyHat para cada mercado que você monitora.

4. Sticky sessions para paginação. Use sessions quando precisar de consistência (busca paginada, coleta sequencial). Rotação pura para requests independentes.

5. Cadência adaptativa. Preços mudam múltiplas vezes por dia; trending muda diariamente; frete muda semanalmente. Ajuste a frequência de coleta ao tipo de dado.

6. Sempre extraia variantes de SKU. Margens variam drasticamente entre SKUs do mesmo produto. O preço mínimo listado não reflete a margem real.

Próximos Passos

Se você está construindo uma ferramenta de web scraping para dropshipping, comece pelo endpoint de trending products — é o menor esforço para o maior insight. Depois, expanda para busca com filtros e detalhes de produto.

Para monitorar SERPs do AliExpress e Google em paralelo, confira nosso guia de SERP tracking. E para escalar sua coleta com proxies residenciais em mais de 190 localizações, visite a página de preços do ProxyHat.

Pronto para começar?

Acesse mais de 50M de IPs residenciais em mais de 148 países com filtragem por IA.

Ver preçosProxies residenciais
← Voltar ao Blog