API Full Stack para Coleta e Filtragem de Produtos por Avaliação e Preço
Este projeto é uma aplicação Full Stack baseada em Web Scraping, desenvolvida para coletar, organizar e apresentar dados de produtos da Amazon Brasil de forma inteligente.
A motivação é prática e pessoal: surgiu da dificuldade recorrente dentro da minha família para encontrar produtos com boa avaliação, preço acessível e bom custo‑benefício, sem precisar abrir dezenas de abas manualmente.
Para resolver esse problema, foi criada uma API scraper que:
- ✔ Coleta dados diretamente da Amazon a partir de uma palavra‑chave
- ✔ Estrutura as informações dos produtos em um formato consistente
- ✔ Permite filtrar produtos melhor avaliados e por faixa de preço
- ✔ Facilita encontrar opções com melhor custo‑benefício
- ✔ Entrega tudo isso em uma interface moderna, responsiva e rápida
Além da utilidade real, o projeto foi construído para consolidar conhecimentos em:
- Web Scraping estruturado
- Arquitetura de APIs REST
- Boas práticas de segurança e performance
- Observabilidade e monitoramento
- UX moderna em aplicações web
- Construir um scraper robusto, organizado e de fácil manutenção
- Demonstrar boas práticas no desenvolvimento de APIs Node.js com Express
- Implementar parsing confiável de HTML usando JSDOM
- Aplicar técnicas de performance e cache em memória
- Criar uma interface reativa que consome dados de scraping em tempo quase real
- Expor métricas de uso e saúde da API para facilitar monitoramento
- Coleta resultados da Amazon via requisição HTTP (Axios)
- Parsing do HTML usando JSDOM com seletores bem definidos
- Normalização e limpeza dos dados coletados
- Retorno estruturado via API REST em JSON
- Filtro por avaliação mínima do produto (rating)
- Filtro por faixa de preço (mínimo e máximo)
- Filtro para produtos Prime
- Scroll infinito para carregar mais produtos
- Interface responsiva (mobile‑first)
- Feedback visual de carregamento e erros
- Modo escuro com preferência persistida
- Total de requisições recebidas
- Quantidade de requisições de scraping
- Uso de cache (cache hits)
- Rate limiting em ação
- Consumo de memória
- Tempo de atividade do servidor (uptime)
Frontend (Vite + Tailwind)
│
▼
API Scraper (Node.js + Express)
│
▼
Requisição HTTP (Axios)
│
▼
Parsing DOM (JSDOM)
│
▼
Estruturação e Retorno dos Dados
-
server/ – API em Node.js + Express
- Endpoints REST:
/api/scrape,/api/health,/api/metrics - Scraping com
axios+jsdome seletores resilientes - Segurança e performance:
helmet,compression,morgan,express-rate-limit - Cache em memória com TTL para reduzir latência e chamadas repetidas
- Tratamento centralizado de erros e respostas padronizadas
- Endpoints REST:
-
client/ – Frontend em Vite + Tailwind CSS
- Busca com campo de pesquisa e feedback visual
- Cartões de produto com título, preço, rating, reviews e link para a Amazon
- Grid responsivo, animações suaves e modo escuro persistente
- Filtros de avaliação, preço e Prime
- Scroll infinito para carregamento progressivo
- Painel de métricas consumindo
/api/metricsem intervalo regular
Fluxo resumido:
- O usuário digita um termo de busca no frontend
- O frontend chama
GET /api/scrape?keyword=... - O backend faz a requisição para a Amazon, interpreta o HTML com JSDOM
- Os dados de produto são normalizados e retornados em JSON
- O frontend renderiza em lotes, aplica filtros e atualiza métricas
- Node.js 20+
npm install
npm run install-clientBackend:
npm startFrontend:
cd client
npm run devAcesse o frontend em: http://localhost:5173
cd client
npm run build
cd ..
npm startAPI disponível em: http://localhost:3000
Crie um arquivo .env na raiz do projeto, por exemplo:
PORT=3000
REQUEST_TIMEOUT_MS=12000
CACHE_TTL_MS=60000
RATE_LIMIT_MAX=15GET /api/health→ Verifica se a API está saudável e respondendo.
GET /api/metrics→ Retorna métricas em memória, como:totalRequests,scrapeRequests,cacheHits,rateLimited- uso de memória, uptime e outras informações de monitoramento
GET /api/scrape?keyword=notebook
Resposta (exemplo simplificado):
{
"success": true,
"keyword": "notebook",
"products": [
{
"id": 1,
"title": "Notebook ...",
"price": "R$ 2.499,90",
"rating": 4.7,
"reviews": 132,
"imageUrl": "https://...",
"productUrl": "https://www.amazon.com.br/..."
}
],
"total": 24,
"timestamp": "2025-..."
}- Node.js
- Express
- Axios
- JSDOM
- Helmet
- Morgan
- Compression
- Express Rate Limit
- Vite
- Tailwind CSS
- HTML5, CSS3, JavaScript
- Ícones e fontes modernas
- Vitest
- JSDOM (ambiente de teste para DOM)
- Desenvolvimento de scrapers estruturados com JSDOM
- Construção de APIs REST escaláveis com Node.js + Express
- Parsing avançado de HTML e tratamento de seletores frágeis
- Otimização de performance com cache em memória e compressão
- Implementação de segurança básica (rate limiting, Helmet, validação)
- Monitoramento e observabilidade via endpoint de métricas
- Desenvolvimento Full Stack (frontend moderno + backend robusto)
- UX com foco em experiência real de busca de produtos
Este projeto foi desenvolvido para fins educacionais e demonstração técnica.
- Mudanças no HTML da Amazon podem exigir manutenção nos seletores de scraping
- O sistema não foi projetado para automação em larga escala
- O uso de scraping pode estar sujeito a termos de uso da plataforma; utilize com responsabilidade
Projeto de uso livre para fins educacionais e portfólio. Respeite sempre as políticas e termos de uso da Amazon.


