Como Extrair Dados de Produtos do AliExpress para Pesquisa de Dropshipping

O AliExpress esconde seus dados de produtos em uma variável JavaScript, não no HTML que você vê. Capture esse JSON e você obterá preços, descontos, origem de envio e contagem de vendas em uma única solicitação — aqui está como, com a infraestrutura anti-bloqueio.

O AliExpress é o maior mercado global e uma fonte principal para pesquisa de dropshipping: histórico de preços e descontos, o que realmente está vendendo, origem de envio e como as ofertas mudam por país. Em 2026, ele se apoia fortemente na renderização JavaScript e em nomes de classes aleatórios, o que assusta as pessoas a usarem um navegador completo. Você geralmente não precisa de um. Os dados dos produtos já estão no código-fonte da página dentro de uma variável JavaScript — extraia isso e você obterá dados estruturados limpos em uma única solicitação. Este guia mostra o método do JSON oculto, a dimensão geográfica que torna os dados do AliExpress valiosos e a infraestrutura de proxies que mantém um extrator ativo.

Os dados estão em window.runParams, não no DOM

Abra uma página de categoria ou resultados de pesquisa e veja o código-fonte. Todas as pré-visualizações de produtos estão armazenadas em uma variável JavaScript chamada window.runParams, escondida dentro de uma tag <script>. Este é um padrão moderno comum — o servidor envia os dados como JSON e o front-end os renderiza no lado do cliente. Para um extrator, é um presente: você pula os seletores CSS frágeis completamente, extrai a tag de script com uma regex e a analisa como um dicionário. Esta técnica é chamada de extração de dados web ocultos, e é muito mais durável do que perseguir nomes de classes que mudam a cada implantação.

import re, json, httpx

HEADERS = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
                  "(KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
    "accept-language": "en-US,en;q=0.9",
}

PROXY = "http://USER:PASS@gate.quantumproxies.io:8000"

def get_run_params(html: str) -> dict:
    # The product data lives in window.runParams = {...};
    m = re.search(r"window\.runParams\s*=\s*(\{.+?\});", html, re.DOTALL)
    if not m:
        raise ValueError("runParams not found - page may be blocked or changed")
    return json.loads(m.group(1))

url = "https://www.aliexpress.com/category/.../catName.html"
r = httpx.get(url, headers=HEADERS, proxy=PROXY, timeout=30)
data = get_run_params(r.text)

Analisando os campos que importam para a pesquisa

O blob runParams é enorme, então extraia apenas os campos que a pesquisa de dropshipping e preços realmente usa: o título do anúncio, preço original vs preço de venda, a porcentagem de desconto, quantos foram vendidos e — criticamente — o país de origem do envio, que determina o tempo de entrega e a confiança do comprador. A estrutura parece intimidadora, mas é estável:

def parse_items(data: dict) -> list[dict]:
    items = data.get("mods", {}).get("itemList", {}).get("content", [])
    out = []
    for it in items:
        prices = it.get("prices", {})
        sale = prices.get("salePrice", {})
        orig = prices.get("originalPrice", {})
        out.append({
            "id": it.get("productId"),
            "title": it.get("title", {}).get("displayTitle"),
            "sale_price": sale.get("minPrice"),
            "orig_price": orig.get("minPrice"),
            "discount_pct": sale.get("discount"),
            "currency": sale.get("currencyCode"),
            "sold": it.get("trade", {}).get("tradeDesc"),   # e.g. "1,000+ sold"
            "store_id": it.get("store", {}).get("storeId"),
        })
    return out

for row in parse_items(data)[:5]:
    print(row["title"][:40], row["sale_price"], f"-{row['discount_pct']}%", row["sold"])

Essa única chamada fornece a economia de um produto: um anúncio mostrando um preço original de $65,85 caindo para um preço de venda de $23,29 é um desconto de 64% — o tipo de sinal de margem que indica se um item vale a pena ser adquirido. A contagem "vendida" é seu proxy de demanda; combinada em uma categoria, ela classifica os vencedores sem que você precise acessar uma página de avaliação.

Diagrama de pipeline mostrando uma solicitação de página do AliExpress, extração regex de window.runParams e campos de produtos analisados como JSON
Os dados do anúncio são renderizados no servidor em uma variável JavaScript — não é necessário um navegador sem cabeça para lê-los.

Paginação de pesquisa sem sobrecarregar o site

As páginas de pesquisa usam paginação de comprimento conhecido, então o idioma eficiente é: extraia a primeira página, leia a contagem total de páginas da resposta e, em seguida, busque o restante simultaneamente sob um limite. Não dispare todas as páginas de uma vez — o AliExpress limita agressivamente a taxa e começará a retornar 403s. Mantenha a concorrência modesta e rotacione o IP de saída em cada solicitação:

import asyncio, httpx

ROTATING = "http://USER:PASS@rotating.quantumproxies.io:8000"

async def fetch_page(client, query, page):
    url = f"https://www.aliexpress.com/w/wholesale-{query}.html?page={page}"
    for attempt in range(3):
        r = await client.get(url, headers=HEADERS, timeout=30)
        if r.status_code == 200:
            return parse_items(get_run_params(r.text))
        if r.status_code == 403:                 # blocked: back off, rotate exit
            await asyncio.sleep(2 ** attempt)
    return []

async def scrape_search(query, max_pages=5):
    async with httpx.AsyncClient(proxy=ROTATING) as client:
        sem = asyncio.Semaphore(3)               # gentle concurrency
        async def guarded(p):
            async with sem:
                return await fetch_page(client, query, p)
        pages = await asyncio.gather(*[guarded(p) for p in range(1, max_pages + 1)])
        return [row for page in pages for row in page]

results = asyncio.run(scrape_search("wireless earbuds"))
print(len(results), "products")

O gateway rotativo é importante aqui: um IP buscando página após página é a maneira mais rápida de ganhar um bloqueio, enquanto a rotação por solicitação em um pool residencial distribui a carga para que nenhuma saída pareça anormal. O backoff exponencial no 403 dá tempo para um IP queimado sair do ciclo.

Extraia dados do AliExpress em mais de 90 milhões de IPs residenciais

Geo é o ponto principal

O AliExpress personaliza preços, moeda, promoções e armazém de origem de envio pela localização do visitante — o mesmo produto pode mostrar um cartão local dos EUA com envio mais rápido para um IP dos EUA e um preço e origem diferentes para um europeu. Para pesquisa de dropshipping, essa dimensão geográfica é o dado: você quer saber o que um cliente no seu mercado-alvo realmente vê. Portanto, defina o país de saída deliberadamente. Roteie por um IP em cada mercado em que você vende e registre as diferenças; um produto que é barato e enviado localmente em uma região, mas lento e caro em outra, é uma aposta muito diferente. Nosso guia sobre proxies para pesquisa de dropshipping aprofunda-se em transformar essas matrizes em decisões de aquisição.

# One product, three markets - compare price and ship-from per geo
MARKETS = {
    "us": "http://USER:PASS-country-us@gate.quantumproxies.io:8000",
    "de": "http://USER:PASS-country-de@gate.quantumproxies.io:8000",
    "br": "http://USER:PASS-country-br@gate.quantumproxies.io:8000",
}
for market, proxy in MARKETS.items():
    r = httpx.get(product_url, headers=HEADERS, proxy=proxy, timeout=30)
    d = get_run_params(r.text)
    # read price + shipFrom from the product detail runParams for this geo
    print(market, "->", extract_price_and_origin(d))

Avaliações e estoque vivem em chamadas separadas

Os anúncios fornecem preço e demanda, mas dois campos de alto valor estão por trás de suas próprias solicitações. As avaliações de clientes não estão no runParams da página do produto — elas carregam de um endpoint de feedback dedicado, paginado, então para coletar classificações e texto de avaliação você segue essa chamada por produto em vez de analisar a página principal. Os sinais de estoque são semelhantes: a contagem "vendida" em um anúncio é um proxy de demanda cumulativa, enquanto a disponibilidade precisa por variante (cor, tamanho, armazém de origem) vem dos dados SKU no payload de detalhes do produto. Para pesquisa de dropshipping, isso importa porque um produto pode parecer um vencedor em preço e vendas, enquanto uma variante específica que você deseja vender está fora de estoque no armazém que atende seu mercado.

Trate os dois como uma segunda passagem: extraia os anúncios primeiro para classificar os candidatos por desconto e contagem vendida, depois enriqueça apenas sua lista curta com páginas de avaliação e estoque por variante. Isso mantém o volume de solicitações — e seu risco de bloqueio — proporcional ao quão sério você está sobre cada produto, em vez de sobrecarregar cada anúncio por dados que você não usará.

Quando pular o extrator DIY

O método do JSON oculto é durável, mas o AliExpress muda as formas de payload, bloqueia avaliações atrás de um endpoint separado e aumenta os bloqueios sob volume. Se você preferir não manter lógica de regex e retry, uma Scraper API aceita uma URL e retorna JSON analisado — ela lida com a renderização, rotação e camada anti-bloqueio, e você direciona geograficamente com um único parâmetro. É a escolha pragmática quando você está coletando milhares de produtos em mercados em um cronograma. Para o padrão geral de leitura de dados diretamente dos payloads do lado do cliente, veja nossa nota sobre por que um extrator retorna uma página vazia.

Lista de verificação mapeando obstáculos de extração do AliExpress como 403s e precificação geográfica para soluções como rotação residencial e direcionamento geográfico
Três obstáculos, três soluções — a maioria das falhas de extratores do AliExpress são um problema de qualidade de IP ou geográfico.

Perguntas frequentes

Você pode extrair dados de produtos do AliExpress?

Sim. Os dados de listagem visíveis publicamente — títulos, preços, descontos, contagens vendidas, imagens e origem de envio — são servidos na variável JavaScript window.runParams em páginas de categoria, pesquisa e produto. Você os extrai com uma regex e os analisa como JSON, sem precisar de um navegador sem cabeça para listagens. Respeite os termos e limites de taxa do AliExpress.

O AliExpress tem uma API pública?

O AliExpress oferece APIs de afiliados e de plataforma aberta, mas elas requerem aprovação, têm cobertura limitada e estão vinculadas a um programa. Para uma pesquisa ampla em categorias e mercados, extrair as páginas públicas oferece mais campos e controle geográfico completo, razão pela qual a maioria dos pesquisadores de dropshipping extrai o JSON na página.

Por que recebo erros 403 ao extrair dados do AliExpress?

Um 403 significa que o AliExpress sinalizou a solicitação — geralmente muitos acessos de um único IP, uma faixa de datacenter ou um conjunto de cabeçalhos fraco. Rode IPs residenciais por solicitação, adicione backoff exponencial no 403, envie um User-Agent realista e acepte-language, e mantenha a concorrência baixa. Se runParams estiver ausente do HTML, isso é o bloqueio, não uma mudança de layout.

Como obtenho preços específicos por país no AliExpress?

Roteie a solicitação por um IP de saída no país-alvo. O AliExpress lê a localização para definir moeda, preço, promoções e armazém de origem, então um IP dos EUA e um IP alemão veem dados diferentes para o mesmo produto. Direcione geograficamente o proxy por mercado e registre cada versão para construir uma matriz de preços por geografia.

A abordagem vencedora é entediante e durável: leia o JSON que a página já envia, pagine educadamente, rode IPs residenciais limpos e direcione geograficamente cada mercado que você se importa. Faça isso e o AliExpress se torna uma fonte confiável de preços, sinais de demanda e economia de envio em vez de um muro de 403s.

Obtenha dados analisados do AliExpress da Scraper API