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

Aprenda a estruturar um pipeline em Python para extrair dados de notebooks na Amazon, tratando paginação, seletores dinâmicos e exportação de dados.

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.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:

  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ê.