Como Construir um Pipeline de Web Scraping para Extração de Dados da Amazon com Python
Monitorar o mercado de eletrônicos em larga escala exige acesso contínuo a dados precisos de catálogo, variações de preço, avaliações e especificações técnicas de hardware. Em marketplaces como a Amazon, essas informações mudam rapidamente, tornando a coleta manual inviável para análises de precificação dinâmica ou inteligência competitiva.
A automação da extração de dados via web scraping resolve esse desafio, permitindo transformar páginas HTML não estruturadas em datasets limpos e prontos para análise. A seguir, exploramos a arquitetura necessária para construir um extrator robusto de anúncios de notebooks em Python.
1. Desafios Estruturais na Coleta de Dados em E-commerce
Antes de escrever a primeira linha de código, é fundamental compreender a arquitetura do alvo:
- Estrutura HTML dinâmica: As classes CSS em marketplaces modernos mudam periodicamente ou utilizam identificadores gerados dinamicamente.
- Bloqueios e Rate Limiting: Requisições repetidas sem cabeçalhos adequados resultam em respostas com códigos
503 Service Unavailableou desafios CAPTCHA. - Variações no layout dos produtos: Um notebook pode apresentar especificações em listas estruturadas, enquanto outro exibe apenas parágrafos descritivos.
Para lidar com esses fatores, a arquitetura deve separar a camada de requisição HTTP, o motor de parsing e o pipeline de normalização de dados.
2. Configurando o Ambiente e a Camada de Requisições
Utilizaremos as bibliotecas requests para requisições HTTP, BeautifulSoup4 para parsing de HTML e pandas para estruturação dos dados:
bash
pip install requests beautifulsoup4 pandas
Para minimizar o risco de bloqueio imediato, configuramos uma sessão com cabeçalhos HTTP realistas:
python
import requests
from bs4 import BeautifulSoup
import pandas as pd
import time
HEADERS = {
‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36’,
‘Accept-Language’: ‘pt-BR,pt;q=0.9,en-US;q=0.8,en;q=0.7’,
‘Accept-Encoding’: ‘gzip, deflate, br’,
‘Accept’: ‘text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,/;q=0.8′,
‘Connection’: ‘keep-alive’
}
def obterhtml(url):
session = requests.Session()
response = session.get(url, headers=HEADERS, timeout=15)
if response.statuscode == 200:
return response.text
return None
3. Extração e Parsing de Dados Técnicos
Ao inspecionar a página de resultados para a categoria de notebooks, identificamos os seletores responsáveis por cada atributo essencial: título, preço atual, avaliação e link direto.
python
def extrairnotebooks(htmlcontent):
soup = BeautifulSoup(html_content, ‘html.parser’)
itens = []
# Seleciona os cards de produtos na listagem
cards = soup.select('div[data-component-type="s-search-result"]')
for card in cards:
# Título do produto
titulo_elem = card.select_one('h2 a span')
titulo = titulo_elem.get_text(strip=True) if titulo_elem else None
# Preço (separando valor inteiro e fração se necessário)
preco_inteiro = card.select_one('.a-price-whole')
preco_fracao = card.select_one('.a-price-fraction')
if preco_inteiro:
preco = preco_inteiro.get_text(strip=True)
if preco_fracao:
preco += f",{preco_fracao.get_text(strip=True)}"
else:
preco = 'Indisponível'
# Avaliação (Rating)
rating_elem = card.select_one('i.a-icon-star-small span')
rating = rating_elem.get_text(strip=True) if rating_elem else 'Sem avaliação'
# Link do anúncio
link_elem = card.select_one('h2 a')
link = f"https://www.amazon.com.br{link_elem['href']}" if link_elem else None
if titulo:
itens.append({
'titulo': titulo,
'preco': preco,
'avaliacao': rating,
'url': link
})
return itens
4. Paginação e Normalização de Dados
Para construir um dataset representativo, o script precisa iterar pelas páginas de busca, aplicando intervalos controlados entre as requisições (jitter) para preservar a estabilidade da coleta.
python
def executarcrawler(termobusca, totalpaginas=3):
dadosconsolidados = []
for pagina in range(1, total_paginas + 1):
url = f"https://www.amazon.com.br/s?k={termo_busca.replace(' ', '+')}&page={pagina}"
html = obter_html(url)
if html:
produtos = extrair_notebooks(html)
dados_consolidados.extend(produtos)
print(f"Página {pagina} processada: {len(produtos)} produtos encontrados.")
# Pausa defensiva entre requisições
time.sleep(3)
df = pd.DataFrame(dados_consolidados)
df.to_csv('notebooks_amazon.csv', index=False, encoding='utf-8-sig')
print("Dados exportados com sucesso para notebooks_amazon.csv")
return df
Como especialista em IA e engenharia de dados, costumo estruturar esses pipelines de raspagem integrando etapas posteriores de limpeza com Processamento de Linguagem Natural (NLP), isolando automaticamente marcas, processadores (Intel/AMD/Apple) e capacidade de memória RAM a partir dos títulos brutos extraídos.
5. Boas Práticas para Ambientes de Produção
Quando a coleta precisa ser executada diariamente ou em volumes industriais, a arquitetura básica descrita acima deve ser complementada por:
- Gerenciamento de Proxies Residenciais: Distribuição de requisições por múltiplos IPs com rotação automática.
- Renderização de JavaScript: Utilização de ferramentas como Playwright ou Selenium para capturar conteúdos carregados sob demanda.
- Armazenamento em Banco Relacional ou Data Lake: Persistência em PostgreSQL ou S3 para rastrear o histórico temporal de preços.
Conclusão e Próximos Passos
Web scraping estruturado em Python é uma das abordagens mais eficientes para alimentar dashboards de BI, sistemas de precificação competitiva e modelos preditivos de mercado.
Se a sua empresa precisa de pipelines avançados de extração de dados, automações resilientes contra bloqueios ou integração de dados de e-commerce com modelos de Inteligência Artificial, entre em contato para estruturarmos uma consultoria sob medida para a sua infraestrutura.


