Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 

Repository files navigation

szt-scraping-tool

Scraper inteligente para garimpar itens em classificados brasileiros (OLX, Mercado Livre).

Coleta anúncios, classifica cada um via LLM (Gemini Flash) usando um playbook curatorial, e gera ranking com alertas opcionais via Telegram. Custo: R$0 — Crawl4AI self-hosted + Gemini free tier.

Pra que serve

Nasceu para buscar TVs CRT para uma instalação artística, mas funciona para qualquer garimpagem:

  • Equipamentos vintage (CRTs, projetores, sensores)
  • Componentes eletrônicos (Raspberry Pi, Arduino, placas)
  • Qualquer coisa que se compra em classificados e precisa de critério

Cada busca é uma campaign — um JSON com termos de busca e critérios de classificação. O motor é o mesmo.

Requisitos

  • Node.js ≥ 18 (usa fetch nativo)
  • Crawl4AI — crawler self-hosted (github). Roda como container Docker.
  • Gemini API keygrátis (1500 req/dia)

Opcional:

  • Telegram Bot — para alertas (precisa de bot token + chat ID)
  • Email — para enviar relatório (precisa de script de envio configurado)

Setup

git clone https://github.com/sztutman/szt-scraping-tool.git
cd szt-scraping-tool/scripts

# Sem dependências npm — zero install
# Só precisa das env vars:
export GEMINI_API_KEY="sua-key-aqui"
export CRAWL4AI_URL="http://localhost:11235"  # onde seu Crawl4AI roda

# Opcional: alertas Telegram
export TELEGRAM_BOT_TOKEN="..."
export TELEGRAM_CHAT_ID="..."

Uso

# Listar campaigns
node run.js --list

# Pipeline completo: coleta → classificação → alertas
node run.js --campaign crt-totem

# Só coleta
node run.js --campaign crt-totem --collect-only

# Só normalizar (classificar via Gemini)
node run.js --campaign crt-totem --normalize-only

# Ver relatório
node run.js --campaign crt-totem --report

# Stats
node run.js --campaign crt-totem --stats

# Relatório + enviar por email
node run.js --campaign crt-totem --report --email voce@email.com

Como funciona

  OLX / ML                Gemini Flash              Telegram / Email
  ─────────              ──────────────             ──────────────
  Crawl4AI    ──coleta──▶  Classifica    ──score──▶  Alerta top N
  (HTML→MD)               cada anúncio              (com link direto)
      │                   com playbook                    │
      │                   curatorial                      │
      └── listings.json ──────────────────── report.html ─┘
  1. Coleta — Crawl4AI navega o OLX/ML e extrai anúncios (título, preço, URL, fotos)
  2. Normalização — Gemini Flash lê cada anúncio e classifica: marca, modelo, família, condição, scores 1-5
  3. Score composto — prioriza por critérios ponderados (uniformidade, qualidade, preço, etc)
  4. Alerta — manda os melhores pro Telegram ou gera HTML por email
  5. Dedup — não alerta o mesmo anúncio duas vezes, rastreia mudanças de preço

Criar nova campaign

Crie um JSON em scripts/campaigns/:

{
  "id": "projetor-epson",
  "name": "Projetores Epson usados em SP",
  "active": true,
  "search": {
    "sources": ["olx"],
    "maxPages": 2,
    "delayMs": 3000,
    "terms": {
      "olx": ["projetor epson", "projetor 3lcd", "epson powerlite"]
    }
  },
  "classification": {
    "system_prompt": "Você é um especialista em projetores...",
    "score_weights": {
      "brightness": 0.25,
      "resolution": 0.20,
      "condition": 0.20,
      "price_attractiveness": 0.20,
      "brand_tier": 0.15
    },
    "red_flags": ["lâmpada queimada", "não liga"],
    "green_flags": ["pouco uso", "com case", "lâmpada nova"]
  },
  "alerts": {
    "min_score": 3.0,
    "telegram": true
  }
}

Depois: node run.js --campaign projetor-epson

Estrutura

szt-scraping-tool/
├── README.md
├── SKILL.md                    ← doc para uso como Pi skill
└── scripts/
    ├── run.js                  ← CLI principal
    ├── campaign.js             ← loader de campaigns
    ├── db.js                   ← persistência JSON (por campaign)
    ├── normalize.js            ← classificação via Gemini Flash
    ├── alert.js                ← alertas Telegram
    ├── report.js               ← relatório console + HTML
    ├── collectors/
    │   ├── olx.js              ← Crawl4AI → OLX
    │   └── mercadolivre.js     ← Crawl4AI → ML
    └── campaigns/
        └── crt-totem.json      ← exemplo: TVs CRT para instalação artística

Limitações

  • Preços OLX — a lista não mostra preço (JS client-side). Use fetchDetails: true na campaign para buscar da página de detalhe (mais lento).
  • Mercado Livre — parsing HTML frágil em termos genéricos. Melhor com termos específicos.
  • Facebook Marketplace — não implementado (requer Patchright/Playwright com login).
  • Gemini JSON — ~5% dos anúncios podem falhar no parsing. Tem fallback de regex, mas não é perfeito.

Autor

Felipe Sztutman — artista, AYA Studio

Licença

MIT

About

Scraper inteligente para garimpar itens em classificados brasileiros. Crawl4AI + Gemini Flash, custo zero.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages