Como Construir um Pipeline de Web Scraping para Extração de Dados da Amazon com Python

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 Unavailable ou 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.status
code == 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):
dados
consolidados = []

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:

  1. Gerenciamento de Proxies Residenciais: Distribuição de requisições por múltiplos IPs com rotação automática.
  2. Renderização de JavaScript: Utilização de ferramentas como Playwright ou Selenium para capturar conteúdos carregados sob demanda.
  3. 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.

Preencha o formulário abaixo para que eu consiga entrar em contato com você.