Construir um Rastreador de Preços da Amazon em Python (o Jeito Honesto)
Construa um rastreador de preços funcional com Python e Selenium, com testes reais do que realmente o bloqueia.
Pontos-chave
- Páginas de produto raramente bloqueiam scrapers; nos testes, 150 solicitações foram aprovadas com zero bloqueios.
- Páginas de pesquisa da Amazon bloqueiam na primeiríssima solicitação, mesmo com um proxy.
- O bloqueio é mais sobre não ser um navegador real do que sobre seu endereço IP.
- Um proxy direcionado por país é necessário para precificação local correta, não apenas para evitar bloqueios.
Achei que tinha encontrado o PlayStation 5 mais barato da internet.
Meu rastreador de preços exibiu $74,00 ao lado de um PS5, mas se algo parece bom demais para ser verdade na internet, quase sempre é. Esse $74 não era o console. Era o scraper capturando o elemento errado, e é exatamente o tipo de bug silencioso que torna a maioria dos tutoriais de «rastreador de preços da Amazon» silenciosamente inúteis.
Então, em vez de apenas publicar cinquenta linhas de Python e chamar isso de pronto, que é o que quase todo guia faz, testei a coisa adequadamente. Executei contra a Amazon em volume, medi exatamente o que é bloqueado e o que não é, e corrigi os bugs que os tutoriais nunca mencionam. Os resultados foram genuinamente surpreendentes: um scraper básico acessou uma página de produto 150 vezes sem um único bloqueio, mas foi barrado na primeira solicitação a uma página de pesquisa.
Este guia é o rastreador funcional mais tudo o que os testes revelaram, incluindo um truque de Selenium que vale a pena conhecer mesmo se você já construiu scrapers antes: ele controla uma janela real do Chrome, visualmente, para que você assista à página carregar e ao scraping acontecer em tempo real.
A Amazon realmente vai me bloquear?
Todo tutorial avisa que a Amazon bloqueará seu scraper instantaneamente. Então testei, e os resultados me confundiram de verdade.
Apontei um scraper básico, sem frescuras, para uma página de produto do PlayStation 5 e simplesmente deixei martelar. Uma solicitação, duas, dez, cinquenta — continuei esperando pela barreira. Ela nunca veio. O scraper fez 150 solicitações para a mesma página e todas retornaram «ok». Não conseguia acreditar como estava tão aberto.
E estava. Páginas de produto, acontece, mal se importam. Então apontei o mesmo scraper para uma página de resultados de pesquisa e ele morreu na primeira solicitação. Não na décima, não na quinquagésima. Na primeira. Um 503 direto.
Resultados de pesquisa são onde ocorre o verdadeiro harvesting de dados, então é aí que a Amazon concentra suas defesas. Páginas de produtos individuais? Amplamente abertas.
Veja o que tentei e o que aconteceu:
Página de produto, scraper básico: 150 solicitações, zero bloqueios
Página de pesquisa, scraper básico: bloqueado na solicitação nº 1 (503)
Página de pesquisa, cabeçalhos melhores: ainda bloqueado na solicitação nº 1
Página de pesquisa, cabeçalhos + proxy residencial: ainda bloqueado na solicitação nº 1
Página de pesquisa, navegador real: funcionou, 16 resultados
Página de pesquisa, navegador + proxy dos EUA: funcionou, 22 resultados
A parte que mais me surpreendeu: usar um proxy residencial na página de pesquisa não ajudou em nada. Ainda bloqueado, primeira solicitação. O bloqueio nunca foi sobre meu endereço IP — era sobre o fato de eu não ser um navegador real. No momento em que carreguei a mesma página de pesquisa em um navegador de verdade em vez de um script puro, funcionou:
Construindo o rastreador
Vamos construir a coisa. O rastreador inteiro tem cerca de 50 linhas de Python. Você precisa do Python 3 e do Google Chrome instalados, depois um comando para as bibliotecas:
pip install selenium requests matplotlib
Apontando para um produto
Todo produto da Amazon tem um ID chamado ASIN, o código de 10 caracteres na URL logo após /dp/. Por exemplo, em amazon.com/dp/B0F1J12R6N, o ASIN é B0F1J12R6N. É tudo o que o rastreador precisa para encontrar um produto.
Por que requests não é suficiente
A forma óbvia de fazer scraping de uma página é a biblioteca requests do Python: uma linha, pega o HTML, pronto. E para uma página de produto, até retorna um 200 OK. Mas aqui está a armadilha em que caí: um 200 não significa que você obteve os dados. A Amazon insere o preço na página com JavaScript, e requests não executa JavaScript. Então você recebe uma página de volta, mas o preço não está nela.
É por isso que este rastreador usa Selenium. O Selenium controla um navegador Chrome de verdade: ele realmente abre a página, executa o JavaScript e permite que você leia o resultado totalmente renderizado. Na primeira vez que você executa, o Chrome abre sozinho com um banner dizendo «O Chrome está sendo controlado por um software de teste automatizado», e você assiste tudo funcionar em tempo real.
Extraindo o preço (e o bug que todo mundo deixa passar)
É aqui que a maioria dos tutoriais silenciosamente falha. A abordagem comum captura o elemento .a-price e lê seu texto. O problema: a Amazon coloca o preço naquele elemento duas vezes — uma vez visível, uma para leitores de tela —, então você obtém um confuso $449,00$449,00 em vez de um número limpo.
A solução é direcionar a cópia limpa e única do preço dentro do buy box e lê-la com cuidado, verificando primeiro o preço do buy box principal para não capturar acidentalmente o preço de um acessório — que é exatamente como acabei com aquele «PS5 de $74». Os seletores exatos estão no código no GitHub.
Uma vez que aponta para o elemento correto, o preço sai limpo:
Armazenando o histórico e gerando gráficos
Um rastreador de preços só é útil se ele lembrar. O script salva cada leitura em um arquivo, indexado por produto, armazenando o preço como um número real mais sua moeda, não uma string «$54,00». Isso importa: números você pode plotar em gráfico, comparar e encontrar o menor; strings, não. Deixado por conta própria, o script verifica uma vez e para; adicione uma opção de loop e ele verificará novamente em um agendamento, construindo histórico ao longo do tempo que um pequeno segundo script transforma em um gráfico de preço ao longo do tempo.
O bug que quase me custou caro: você pode estar fazendo scraping do país errado
Lembra do PlayStation de $74? Esse foi o primeiro sinal de que algo estava errado. O segundo foi pior, porque era mais difícil de detectar.
Quando executei o rastreador pela primeira vez sem um proxy, a Amazon não apenas me deu preços estranhos — para alguns produtos não me deu preço real algum, apenas um aviso «este item não pode ser enviado para o seu local». O rastreador não tinha nada útil para registrar.
Então o roteei através de um proxy para parecer um comprador dos EUA. O preço voltou em euros. No início, assumi que o proxy não tinha funcionado. Então notei que a página dizia «Entregar para a Irlanda» e caiu a ficha: o proxy funcionou bem, mas me colocou em um IP irlandês. Ideia certa, país errado.
A solução é um proxy residencial fixado no país que você realmente quer monitorar. Assim que fixei o meu nos EUA, o rastreador trouxe o preço correto — $54,00, em dólares — todas as vezes.
E esse country-pinning não é um detalhe opcional — é o ponto central. Digamos que você está rastreando preços de concorrentes para decidir o que cobrar em determinado mercado. Esses números só fazem sentido se forem os preços que aquele mercado realmente vê. O mesmo produto pode custar $449 nos EUA e €499 na Irlanda. Se seu scraper silenciosamente retorna o preço irlandês, você está tomando decisões para um mercado com base nos dados de outro, e como parece válido, ninguém percebe.
Então um proxy aqui não é sobre contornar bloqueios — meus testes mostraram que páginas de produtos mal bloqueiam de qualquer forma. É sobre garantir que os dados que você coleta são os dados certos.
Se você quer dados de preço fixados em um país específico, os proxies residenciais da FlashProxy permitem que você direcione qualquer localização, para que você esteja sempre coletando os preços que aquele mercado realmente vê.
Então… isso deveria ter sido mais difícil?
Esta é minha conclusão honesta: se você precisar fazer scraping de preços de uma página da web, não precisa ler cem blogs, assistir a uma pilha de vídeos no YouTube ou ficar insistindo com uma IA até ela finalmente acertar. Você pode simplesmente fazer você mesmo. É extremamente fácil e, honestamente, é quase preocupante como é fácil.
Antes de começar, achei que seria difícil. Estava genuinamente nervoso executando os primeiros testes sem um proxy conectado — imaginei que seria bloqueado para sempre, ou limitado por taxa até a oblivião. Esperava consequências.
Nada aconteceu. Literalmente nada. 150 solicitações a uma página de produto, sem proxy, sem bloqueios, sem banimento, sem e-mail irritado. A barreira para a qual eu estava me preparando quase não existia, e no único lugar onde existia (páginas de pesquisa), um navegador de verdade a atravessou sem dificuldade.
Então, se a única coisa impedindo você de construir um desses era a suposição de que é difícil ou arriscado: não é. Construa. Apenas mantenha-o razoável, rastreie preços públicos, não martele o site e respeite os termos de uso. Mas o medo? Está principalmente na sua cabeça, assim como estava na minha.
O código completo
O projeto completo — o rastreador, o auxiliar de proxy, os gráficos e os scripts de teste — é open source: amazon-price-tracker-python no GitHub. Clone e execute, ou leia exatamente como funciona.


