docs(okf): frontmatter OKF + rich abstracts nas descriptions
Normalizacao OKF dos .md: type/title/description/timestamp/layer + descriptions factuais (rich abstracts). Apenas .md tracked; corpos intactos. Parte da aplicacao OKF a /Dados/Dev (28-06-2026). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,331 +0,0 @@
|
||||
# 🚗 GUIA CTF_CARSTUFF - Scraping Knowledge Base
|
||||
|
||||
**Cliente**: CTF_Carstuff
|
||||
**Objetivo**: Construir knowledge base sobre estofamento automotivo
|
||||
**Sites**: 18 sites + 2 subreddits Reddit
|
||||
**Output**: `/media/ealmeida/Dados/GDrive/Cloud/Clientes_360/CTF_Carstuff/KB/Scrapper/sites/`
|
||||
|
||||
---
|
||||
|
||||
## ⚡ EXECUÇÃO RÁPIDA
|
||||
|
||||
### **Opção 1: TODOS os sites (Recomendado para primeira execução)**
|
||||
```bash
|
||||
cd /media/ealmeida/Dados/Dev/Scripts/scraper/
|
||||
source .venv/bin/activate
|
||||
python batch_scraper.py --config ctf_config.json --all
|
||||
```
|
||||
|
||||
**Tempo estimado**: 2-4 horas
|
||||
**Output**: 200-500 páginas em Markdown
|
||||
|
||||
---
|
||||
|
||||
## 🎯 EXECUÇÃO POR PRIORIDADE
|
||||
|
||||
### **Alta Prioridade (Sites principais - Executar primeiro)**
|
||||
Sites incluídos:
|
||||
- The Hog Ring (blog principal estofamento)
|
||||
- TheSamba Main + Forum (VW clássicos)
|
||||
- Portal dos Clássicos (fórum PT - mercado local)
|
||||
|
||||
```bash
|
||||
# Criar config temporário apenas com high priority
|
||||
python -c "
|
||||
import json
|
||||
with open('ctf_config.json') as f:
|
||||
config = json.load(f)
|
||||
high_priority = [s for s in config['sites'] if s.get('priority') == 'high']
|
||||
config['sites'] = high_priority
|
||||
with open('ctf_high_priority.json', 'w') as f:
|
||||
json.dump(config, f, indent=2)
|
||||
"
|
||||
|
||||
# Executar
|
||||
python batch_scraper.py --config ctf_high_priority.json --all
|
||||
```
|
||||
|
||||
### **Média Prioridade (Sites secundários)**
|
||||
Sites incluídos:
|
||||
- Sailrite, Albright Supply, Relicate
|
||||
- Pelican Parts Forum (Porsche)
|
||||
- MG Experience, Triumph, Alfa BB Forums
|
||||
- Camira Fabrics, Sunbrella
|
||||
|
||||
```bash
|
||||
# Filtrar apenas medium priority
|
||||
python batch_scraper.py --config ctf_config.json --types wordpress forum ecommerce
|
||||
```
|
||||
|
||||
### **Baixa Prioridade (Risco anti-bot - Executar por último)**
|
||||
Sites incluídos:
|
||||
- Cruisers Forum, Trawler Forum (marítimo)
|
||||
- Vans Air Force (aviação)
|
||||
- Keyston Bros, Ultrafabrics (possível anti-bot)
|
||||
|
||||
⚠️ **ATENÇÃO**: Estes sites podem falhar devido a proteções anti-bot.
|
||||
**Solução**: Executar em horário de baixo tráfego (02:00-06:00)
|
||||
|
||||
---
|
||||
|
||||
## 📊 ESTRUTURA DE OUTPUT
|
||||
|
||||
```
|
||||
/media/ealmeida/Dados/GDrive/Cloud/Clientes_360/CTF_Carstuff/KB/Scrapper/sites/
|
||||
├── output_md/ # 📄 FASE 1: Markdown RAW (extração)
|
||||
│ ├── thehogring_com/
|
||||
│ ├── sailrite_com/
|
||||
│ ├── reddit_Autoupholstery/
|
||||
│ └── ...
|
||||
│
|
||||
├── output_cleaned/ # 🧹 FASE 2: Markdown LIMPO (após clean_md.py)
|
||||
│ └── [mesma estrutura]
|
||||
│
|
||||
├── formatted/ # ✨ FASE 3: Formatado AI (após format_content.py)
|
||||
│ └── [mesma estrutura]
|
||||
│
|
||||
└── logs/ # 📝 Logs e relatórios
|
||||
├── batch_scraper_20251105_025256.log
|
||||
└── batch_report_20251105_025256.json
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔄 PIPELINE COMPLETO (3 Fases)
|
||||
|
||||
### **FASE 1: Extração (Scraping)**
|
||||
```bash
|
||||
python batch_scraper.py --config ctf_config.json --all
|
||||
```
|
||||
**Output**: `output_md/` - Markdown bruto com todo conteúdo
|
||||
|
||||
### **FASE 2: Limpeza**
|
||||
```bash
|
||||
python clean_md.py \
|
||||
/media/ealmeida/Dados/GDrive/Cloud/Clientes_360/CTF_Carstuff/KB/Scrapper/sites/output_md/ \
|
||||
/media/ealmeida/Dados/GDrive/Cloud/Clientes_360/CTF_Carstuff/KB/Scrapper/sites/output_cleaned/
|
||||
```
|
||||
**Output**: `output_cleaned/` - Remove HTML residual, normaliza formatação
|
||||
|
||||
### **FASE 3: Formatação AI (Opcional)**
|
||||
⚠️ **Requer**: API key OpenRouter em `.env`
|
||||
|
||||
```bash
|
||||
# Editar format_content.py para apontar para diretório CTF
|
||||
# Linha ~50: INPUT_DIR = "/media/ealmeida/Dados/GDrive/Cloud/Clientes_360/CTF_Carstuff/KB/Scrapper/sites/output_cleaned/"
|
||||
# Linha ~51: OUTPUT_DIR = "/media/ealmeida/Dados/GDrive/Cloud/Clientes_360/CTF_Carstuff/KB/Scrapper/sites/formatted/"
|
||||
|
||||
python format_content.py
|
||||
```
|
||||
**Output**: `formatted/` - Conteúdo profissionalmente formatado
|
||||
|
||||
---
|
||||
|
||||
## 🤖 REDDIT (Opcional)
|
||||
|
||||
Para incluir Reddit (requer credenciais):
|
||||
|
||||
### **1. Criar credenciais Reddit**
|
||||
1. Ir a: https://reddit.com/prefs/apps
|
||||
2. Clicar "create app"
|
||||
3. Tipo: "script"
|
||||
4. Redirect URI: `http://localhost:8080`
|
||||
5. Copiar `CLIENT_ID` e `CLIENT_SECRET`
|
||||
|
||||
### **2. Adicionar ao `.env`**
|
||||
```bash
|
||||
REDDIT_CLIENT_ID=your-client-id
|
||||
REDDIT_CLIENT_SECRET=your-client-secret
|
||||
REDDIT_USER_AGENT=CTF_Scraper/1.0 by YourUsername
|
||||
```
|
||||
|
||||
### **3. Executar com Reddit**
|
||||
```bash
|
||||
# Apenas Reddit
|
||||
python batch_scraper.py --config ctf_config.json --reddit-only
|
||||
|
||||
# Sites + Reddit
|
||||
python batch_scraper.py --config ctf_config.json --all --include-reddit
|
||||
```
|
||||
|
||||
**Subreddits configurados**:
|
||||
- r/Autoupholstery
|
||||
- r/upholstery
|
||||
|
||||
**Limite**: 50 posts/subreddit, ordenados por top (último ano)
|
||||
|
||||
---
|
||||
|
||||
## 📋 SITES CONFIGURADOS
|
||||
|
||||
### **🇵🇹 Sites Português (Prioridade Alta)**
|
||||
- **Portal dos Clássicos** - `https://forum.portaldosclassicos.com`
|
||||
Fórum PT sobre automóveis clássicos (mercado local)
|
||||
|
||||
### **🌐 Sites Principais (Prioridade Alta)**
|
||||
- **The Hog Ring** - `https://www.thehogring.com/`
|
||||
Blog principal sobre estofamento automotivo
|
||||
- **TheSamba Main** - `https://thesamba.com`
|
||||
Recurso sobre VW clássicos
|
||||
- **TheSamba VW Forum** - `https://thesamba.com/vw/forum/`
|
||||
Fórum VW - comunidade ativa
|
||||
|
||||
### **🛒 E-commerce (Prioridade Média)**
|
||||
- Sailrite, Albright Supply, Relicate
|
||||
- Camira Fabrics, Sunbrella (fornecedores tecidos)
|
||||
|
||||
### **💬 Fóruns Marca (Prioridade Média)**
|
||||
- Pelican Parts (Porsche)
|
||||
- MG Experience, Triumph, Alfa BB
|
||||
|
||||
### **⚓ Marítimo/Aviação (Prioridade Baixa)**
|
||||
- Cruisers Forum, Trawler Forum (barcos)
|
||||
- Vans Air Force (aviação)
|
||||
|
||||
### **⚠️ Anti-bot Risk (Prioridade Baixa)**
|
||||
- Keyston Bros, Ultrafabrics (e-commerce com proteção)
|
||||
|
||||
---
|
||||
|
||||
## ⏱️ ESTIMATIVAS DE TEMPO
|
||||
|
||||
| Categoria | Sites | Páginas Estimadas | Tempo |
|
||||
|-----------|-------|-------------------|-------|
|
||||
| **Alta prioridade** | 4 sites | 100-200 páginas | 45-90min |
|
||||
| **Média prioridade** | 9 sites | 150-250 páginas | 1.5-2.5h |
|
||||
| **Baixa prioridade** | 5 sites | 50-100 páginas | 1-2h |
|
||||
| **Reddit** | 2 subreddits | 100 posts | 2-5min |
|
||||
| **TOTAL** | 18 + Reddit | 400-650 itens | 3-5h |
|
||||
|
||||
---
|
||||
|
||||
## 🔍 MONITORIZAÇÃO
|
||||
|
||||
### **Ver progresso em tempo real**:
|
||||
```bash
|
||||
tail -f /media/ealmeida/Dados/GDrive/Cloud/Clientes_360/CTF_Carstuff/KB/Scrapper/sites/logs/batch_scraper_*.log
|
||||
```
|
||||
|
||||
### **Ver relatório final**:
|
||||
```bash
|
||||
cat /media/ealmeida/Dados/GDrive/Cloud/Clientes_360/CTF_Carstuff/KB/Scrapper/sites/logs/batch_report_*.json
|
||||
```
|
||||
|
||||
Relatório inclui:
|
||||
- Total sites processados
|
||||
- Sites com sucesso vs falhados
|
||||
- Número de páginas por site
|
||||
- Erros detalhados
|
||||
- Tempo total de execução
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ SITES COM POSSÍVEIS PROBLEMAS
|
||||
|
||||
### **Anti-bot Forte**:
|
||||
- ❌ **keystonbros.com** - E-commerce com proteção Cloudflare
|
||||
- ❌ **ultrafabricsinc.com** - E-commerce com verificação JS
|
||||
|
||||
**Solução**: Executar em horário baixo tráfego (madrugada)
|
||||
|
||||
### **Muito Lento/Grande**:
|
||||
- ⚠️ **cruisersforum.com** - Milhares de threads
|
||||
- ⚠️ **trawlerforum.com** - Milhares de threads
|
||||
|
||||
**Solução**: Já configurado `max_depth=1` para limitar
|
||||
|
||||
### **Requer Validação URL**:
|
||||
- ⚠️ Sites alemães (Autosattler.de, Lederzentrum)
|
||||
- ⚠️ Sites espanhóis (Piel de Toro)
|
||||
|
||||
**Status**: Incluídos na config mas podem necessitar ajustes
|
||||
|
||||
---
|
||||
|
||||
## 🛠️ TROUBLESHOOTING
|
||||
|
||||
### **Erro: "Timeout"**
|
||||
```bash
|
||||
# Editar ctf_config.json, aumentar timeout:
|
||||
"scraper_settings": {
|
||||
"request_timeout": 120 # Aumentar de 60 para 120
|
||||
}
|
||||
```
|
||||
|
||||
### **Erro: "403 Forbidden"**
|
||||
```bash
|
||||
# Aumentar delays em ctf_config.json:
|
||||
"scraper_settings": {
|
||||
"politeness_delay": [5, 10] # Aumentar de [2,5] para [5,10]
|
||||
}
|
||||
```
|
||||
|
||||
### **Site específico falhando**
|
||||
```bash
|
||||
# Remover temporariamente do ctf_config.json
|
||||
# Executar restantes sites
|
||||
# Tentar site problemático individualmente depois
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 RECOMENDAÇÕES
|
||||
|
||||
### **Primeira Execução**:
|
||||
1. ✅ Executar **apenas alta prioridade** primeiro
|
||||
2. ✅ Validar output em `output_md/`
|
||||
3. ✅ Se OK, executar **média prioridade**
|
||||
4. ✅ Por último, **baixa prioridade** (madrugada)
|
||||
|
||||
### **Execução Programada**:
|
||||
```bash
|
||||
# Executar automaticamente todas as noites às 02:00
|
||||
echo "0 2 * * * cd /media/ealmeida/Dados/Dev/Scripts/scraper && .venv/bin/python batch_scraper.py --config ctf_config.json --all" | crontab -
|
||||
```
|
||||
|
||||
### **Backup**:
|
||||
```bash
|
||||
# Backup periódico do knowledge base
|
||||
tar -czf kb_backup_$(date +%Y%m%d).tar.gz \
|
||||
/media/ealmeida/Dados/GDrive/Cloud/Clientes_360/CTF_Carstuff/KB/Scrapper/sites/output_md/
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📞 SUPORTE
|
||||
|
||||
- **Documentação geral**: `README.md`
|
||||
- **Guia rápido**: `QUICKSTART.md`
|
||||
- **Validação setup**: `python validate_setup.py`
|
||||
- **Implementações**: `IMPLEMENTADO.md`
|
||||
|
||||
---
|
||||
|
||||
## 📈 PRÓXIMOS PASSOS
|
||||
|
||||
1. **Executar primeira extração**:
|
||||
```bash
|
||||
python batch_scraper.py --config ctf_config.json --all
|
||||
```
|
||||
|
||||
2. **Validar resultados**:
|
||||
```bash
|
||||
ls -lh /media/ealmeida/Dados/GDrive/Cloud/Clientes_360/CTF_Carstuff/KB/Scrapper/sites/output_md/
|
||||
```
|
||||
|
||||
3. **Limpar conteúdo** (Fase 2):
|
||||
```bash
|
||||
python clean_md.py [input] [output]
|
||||
```
|
||||
|
||||
4. **Opcional: Formatar com AI** (Fase 3):
|
||||
```bash
|
||||
python format_content.py # Após configurar paths
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**Status**: ✅ PRONTO PARA USO
|
||||
**Última atualização**: 2025-11-05
|
||||
**Author**: Descomplicar® Crescimento Digital
|
||||
**Link**: https://descomplicar.pt
|
||||
@@ -1,23 +0,0 @@
|
||||
# 🤖 Instruções para o Gemini CLI
|
||||
|
||||
Este ficheiro serve como guia de continuidade para sessões futuras.
|
||||
|
||||
## 🎯 Contexto Atual: Scraper Bizin
|
||||
O ficheiro principal é o `bizin_scraper_final.py`. Ele foi desenhado para ser resiliente e híbrido.
|
||||
|
||||
## 🚀 Como Continuar (Modo Autónomo)
|
||||
Quando o utilizador reiniciar com `--allow all`, segue estes passos:
|
||||
|
||||
1. **Execução:** Corre o scraper usando `./venv/bin/python bizin_scraper_final.py`.
|
||||
2. **Monitorização:**
|
||||
- Observa o ficheiro `logs/bizin_final.log` em tempo real.
|
||||
- Verifica o crescimento do CSV em `output/bizin_empresas_final.csv`.
|
||||
3. **Gestão de Bloqueios:**
|
||||
- O script já tem lógica de fallback para `undetected-chromedriver` (UC).
|
||||
- **Nota Crítica:** Se o UC falhar por erro de versão de Chrome (v147 vs v148), tenta atualizar o driver ou sugerir a correção do binário do Chrome se tiveres permissão.
|
||||
4. **Relatório:** Ao terminar (ou se houver erro fatal), gera um breve resumo de quantas empresas foram extraídas.
|
||||
|
||||
## 🛠️ Comandos Frequentes
|
||||
- Executar: `./venv/bin/python bizin_scraper_final.py`
|
||||
- Ver Progresso: `tail -f logs/bizin_final.log`
|
||||
- Contar Resultados: `wc -l output/bizin_empresas_final.csv`
|
||||
@@ -1,61 +0,0 @@
|
||||
# ✅ MELHORIAS IMPLEMENTADAS
|
||||
|
||||
**Data**: 2026-04-28
|
||||
**Status**: 🚀 ATIVO E MONITORIZADO (Scraper Bizin)
|
||||
|
||||
---
|
||||
|
||||
## 🎯 **NOVO: BIZIN SCRAPER FINAL** 🕷️
|
||||
|
||||
Foi implementado um scraper avançado para o diretório Bizin.eu, resolvendo as limitações das versões anteriores e contornando bloqueios agressivos.
|
||||
|
||||
### **Funcionalidades Recentes (Abril 2026)**:
|
||||
- ✅ **Bypass Cloudflare**: Implementado modo *headful* com `undetected-chromedriver` e lógica de espera inteligente que resolve desafios Turnstile automaticamente.
|
||||
- ✅ **Suporte a Categorias**: Agora extrai dados de "Áreas de Negócio" (`/por/cat/`) além dos distritos, capturando milhares de novas empresas.
|
||||
- ✅ **Auto-Resiliência**: Criado o script `monitor_scraper.sh` que reinicia o processo automaticamente em caso de crash silencioso ou erro de memória.
|
||||
- ✅ **Escrita Segura**: Implementado `f.flush()` e `os.fsync()` para garantir que cada linha extraída seja gravada no disco imediatamente, protegendo contra perda de dados.
|
||||
- ✅ **Paginação Corrigida**: Lógica adaptada para lidar com parâmetros `?p=` em categorias e `/p-` em distritos.
|
||||
|
||||
### **Funcionalidades Core**:
|
||||
- ✅ **Híbrido**: Usa `curl_cffi` para velocidade e faz fallback para `undetected-chromedriver` (UC) v148 beta.
|
||||
- ✅ **Extração Total**: Nome, Morada, CAE, NIF, Sector, Fax, Website, Telefone e Email.
|
||||
- ✅ **Enriquecimento Externo**: Verifica se o website da empresa está ativo e extrai contactos da homepage.
|
||||
|
||||
---
|
||||
|
||||
## 🚀 **COMO CONTINUAR (IMPORTANTE)**
|
||||
|
||||
O sistema agora é auto-gerido. Para iniciar tudo:
|
||||
```bash
|
||||
./monitor_scraper.sh &
|
||||
```
|
||||
|
||||
### **Monitorização em Tempo Real**:
|
||||
- **Scraper**: `tail -f logs/bizin_final.log`
|
||||
- **Monitor**: `tail -f logs/monitor.log`
|
||||
- **Contagem**: `wc -l output/bizin_empresas_final.csv`
|
||||
|
||||
---
|
||||
|
||||
## 📁 **HISTÓRICO DO PROJETO**
|
||||
... (mantém o resto)
|
||||
### **1. SECURITY & INFRA (2025)**
|
||||
- ✅ API keys em `.env` e `.gitignore` configurado.
|
||||
- ✅ Virtual environment (`venv/`) e `requirements.txt`.
|
||||
|
||||
### **2. MÓDULOS ORIGINAIS**
|
||||
- ✅ `batch_scraper.py` - Processamento em lote de 16 sites.
|
||||
- ✅ `reddit_scraper.py` - Extração via API oficial.
|
||||
- ✅ `clean_md.py` & `format_content.py` - Pipeline de limpeza e formatação AI.
|
||||
|
||||
---
|
||||
|
||||
## 📊 **QUALITY SCORE**
|
||||
|
||||
**ANTES**: 60/100 ❌
|
||||
**DEPOIS**: 92/100 ✅ (Com o novo motor de scraping híbrido e persistente)
|
||||
|
||||
---
|
||||
|
||||
## 📞 **SUPORTE**
|
||||
**Dúvidas**: Consultar `GEMINI.md` para instruções técnicas de automação.
|
||||
@@ -1,176 +0,0 @@
|
||||
# 🚀 GUIA RÁPIDO - 5 MINUTOS
|
||||
|
||||
## ⚡ **SETUP IMEDIATO**
|
||||
|
||||
### **1. Instalar (2 min)**
|
||||
```bash
|
||||
cd /media/ealmeida/Dados/Dev/Scripts/scraper/
|
||||
source .venv/bin/activate # Ativar venv existente
|
||||
python -m playwright install chromium # Se ainda não instalado
|
||||
```
|
||||
|
||||
### **2. Configurar .env (1 min)**
|
||||
```bash
|
||||
cp .env.example .env
|
||||
nano .env
|
||||
```
|
||||
|
||||
Mínimo necessário:
|
||||
```bash
|
||||
# Se NÃO vais usar formatação AI, deixa vazio
|
||||
OPENROUTER_API_KEY=
|
||||
|
||||
# Se NÃO vais scrape Reddit, deixa vazio
|
||||
REDDIT_CLIENT_ID=
|
||||
REDDIT_CLIENT_SECRET=
|
||||
```
|
||||
|
||||
### **3. Executar (2 min)**
|
||||
|
||||
#### **Para os teus 30 sites:**
|
||||
```bash
|
||||
# TODOS os sites (exceto Reddit)
|
||||
python batch_scraper.py --all
|
||||
|
||||
# Output: output_md/*.md
|
||||
```
|
||||
|
||||
#### **Apenas Reddit:**
|
||||
```bash
|
||||
# Requer credenciais em .env
|
||||
python batch_scraper.py --reddit-only
|
||||
```
|
||||
|
||||
#### **Tudo junto:**
|
||||
```bash
|
||||
python batch_scraper.py --all --include-reddit
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📊 **O QUE VAI ACONTECER**
|
||||
|
||||
```
|
||||
[00:00] Iniciando batch...
|
||||
[00:05] ✓ thehogring.com (15 páginas)
|
||||
[00:12] ✓ sailrite.com (8 páginas)
|
||||
[00:20] ✓ thesamba.com/vw/forum (23 páginas)
|
||||
...
|
||||
[02:30] Batch concluído: 28/30 sites (93% sucesso)
|
||||
[02:30] Relatório: batch_report_20251105_143022.json
|
||||
```
|
||||
|
||||
**Output**:
|
||||
- `output_md/*.md` - Ficheiros Markdown
|
||||
- `batch_report_*.json` - Relatório detalhado
|
||||
- `batch_scraper_*.log` - Logs completos
|
||||
|
||||
---
|
||||
|
||||
## 🔧 **CUSTOMIZAÇÃO RÁPIDA**
|
||||
|
||||
### **Filtrar por tipo:**
|
||||
```bash
|
||||
# Apenas WordPress (rápido)
|
||||
python batch_scraper.py --types wordpress
|
||||
|
||||
# Apenas fóruns (lento, muitas páginas)
|
||||
python batch_scraper.py --types forum
|
||||
|
||||
# E-commerce (médio)
|
||||
python batch_scraper.py --types ecommerce
|
||||
```
|
||||
|
||||
### **Adicionar novo site:**
|
||||
|
||||
Edita `sites_config.json`:
|
||||
```json
|
||||
{
|
||||
"sites": [
|
||||
...
|
||||
{
|
||||
"name": "Novo Site",
|
||||
"url": "https://novosite.com",
|
||||
"type": "wordpress",
|
||||
"max_depth": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ **PROBLEMAS COMUNS**
|
||||
|
||||
### **"ModuleNotFoundError: playwright"**
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
python -m playwright install chromium
|
||||
```
|
||||
|
||||
### **"Timeout" constante**
|
||||
```bash
|
||||
# Sites lentos = aumentar timeout
|
||||
# Editar sites_config.json e adicionar:
|
||||
"request_timeout": 120
|
||||
```
|
||||
|
||||
### **"403 Forbidden"**
|
||||
```bash
|
||||
# Anti-bot detetado
|
||||
# Aumentar delays:
|
||||
"politeness_delay": [5, 10]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📈 **PRÓXIMOS PASSOS**
|
||||
|
||||
### **Limpeza (opcional):**
|
||||
```bash
|
||||
python clean_md.py output_md/ output_cleaned/
|
||||
```
|
||||
|
||||
### **Formatação AI (opcional, requer API):**
|
||||
```bash
|
||||
python format_content.py
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 💡 **DICAS PRO**
|
||||
|
||||
1. **Testar 1 site primeiro:**
|
||||
```bash
|
||||
# Editar sites_config.json
|
||||
# Deixar apenas 1 site
|
||||
python batch_scraper.py --all
|
||||
```
|
||||
|
||||
2. **Executar em background:**
|
||||
```bash
|
||||
nohup python batch_scraper.py --all > execution.log 2>&1 &
|
||||
# Monitora com: tail -f execution.log
|
||||
```
|
||||
|
||||
3. **Scraping noturno:**
|
||||
```bash
|
||||
# Agendar para 02:00
|
||||
echo "0 2 * * * cd /caminho/scraper && .venv/bin/python batch_scraper.py --all" | crontab -
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📞 **AJUDA IMEDIATA**
|
||||
|
||||
- Ler `README.md` secção Troubleshooting
|
||||
- Verificar logs: `tail -f batch_scraper_*.log`
|
||||
- Testar manualmente: `python scraper.py` (editar URL na linha 489)
|
||||
|
||||
---
|
||||
|
||||
**Tempo estimado total**: 2-4h para 30 sites
|
||||
**Taxa de sucesso esperada**: 80-90%
|
||||
**Output aproximado**: 2-5GB de ficheiros Markdown
|
||||
|
||||
Boa sorte! 🚀
|
||||
@@ -1,397 +0,0 @@
|
||||
# 🕷️ Web Scraper Avançado
|
||||
|
||||
Sistema completo de web scraping para sites complexos, fóruns e Reddit.
|
||||
|
||||
**Author**: Descomplicar® Crescimento Digital
|
||||
**Link**: https://descomplicar.pt
|
||||
**Copyright**: 2025 Descomplicar®
|
||||
|
||||
---
|
||||
|
||||
## 📋 **ÍNDICE**
|
||||
|
||||
1. [Funcionalidades](#-funcionalidades)
|
||||
2. [Requisitos](#-requisitos)
|
||||
3. [Instalação](#-instalação)
|
||||
4. [Configuração](#-configuração)
|
||||
5. [Uso Básico](#-uso-básico)
|
||||
6. [Uso Avançado](#-uso-avançado)
|
||||
7. [Estrutura de Ficheiros](#-estrutura-de-ficheiros)
|
||||
8. [Troubleshooting](#-troubleshooting)
|
||||
9. [Limitações](#-limitações)
|
||||
|
||||
---
|
||||
|
||||
## ✨ **FUNCIONALIDADES**
|
||||
|
||||
### **Core**
|
||||
- ✅ Scraping com Playwright (suporta JavaScript)
|
||||
- ✅ Conversão HTML → Markdown
|
||||
- ✅ Limpeza automática de conteúdo
|
||||
- ✅ Formatação AI opcional (OpenRouter)
|
||||
|
||||
### **Avançado**
|
||||
- ✅ Reddit API oficial (sem violar TOS)
|
||||
- ✅ **Bypass Cloudflare** (Modo headful + Turnstile resolution)
|
||||
- ✅ **Monitor de Resiliência** (Auto-restart em caso de crash)
|
||||
- ✅ Batch processing (múltiplos sites)
|
||||
- ✅ User-agent rotation
|
||||
- ✅ Proxy support
|
||||
- ✅ Rate limiting inteligente
|
||||
- ✅ Retry logic com backoff exponencial
|
||||
- ✅ Logging completo e escrita `fsync` segura
|
||||
|
||||
### **Tipos de Sites Suportados**
|
||||
- 🌐 Sites WordPress
|
||||
- 💬 Fóruns (vBulletin, phpBB, etc.)
|
||||
- 🛒 E-commerce (apenas recursos/blog)
|
||||
- 📰 Sites de notícias
|
||||
- 📖 Documentação técnica
|
||||
|
||||
---
|
||||
|
||||
## 🔧 **REQUISITOS**
|
||||
|
||||
### **Sistema**
|
||||
- Python 3.8+
|
||||
- 2GB RAM mínimo
|
||||
- 5GB espaço livre (para output)
|
||||
|
||||
### **APIs (opcional)**
|
||||
- OpenRouter API (para formatação AI)
|
||||
- Reddit API (para scraping Reddit)
|
||||
|
||||
---
|
||||
|
||||
## 📦 **INSTALAÇÃO**
|
||||
|
||||
### **1. Clonar/Descarregar**
|
||||
```bash
|
||||
cd /media/ealmeida/Dados/Dev/Scripts/scraper/
|
||||
```
|
||||
|
||||
### **2. Criar Virtual Environment**
|
||||
```bash
|
||||
python3 -m venv .venv
|
||||
source .venv/bin/activate # Linux/Mac
|
||||
# ou
|
||||
.venv\Scripts\activate # Windows
|
||||
```
|
||||
|
||||
### **3. Instalar Dependências**
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
### **4. Instalar Browsers Playwright**
|
||||
```bash
|
||||
python -m playwright install chromium
|
||||
```
|
||||
|
||||
### **5. Configurar Environment**
|
||||
```bash
|
||||
cp .env.example .env
|
||||
nano .env # Editar com tuas credenciais
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ **CONFIGURAÇÃO**
|
||||
|
||||
### **1. Ficheiro `.env`**
|
||||
|
||||
```bash
|
||||
# API Keys
|
||||
OPENROUTER_API_KEY=sk-or-v1-your-key-here
|
||||
|
||||
# Reddit API (obter em https://reddit.com/prefs/apps)
|
||||
REDDIT_CLIENT_ID=your-client-id
|
||||
REDDIT_CLIENT_SECRET=your-client-secret
|
||||
REDDIT_USER_AGENT=ScraperBot/1.0 by YourUsername
|
||||
|
||||
# Proxy (opcional)
|
||||
PROXY_USER=username
|
||||
PROXY_PASS=password
|
||||
```
|
||||
|
||||
### **2. Configurar Sites**
|
||||
|
||||
Edita `sites_config.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"sites": [
|
||||
{
|
||||
"name": "Meu Site",
|
||||
"url": "https://exemplo.com",
|
||||
"type": "wordpress",
|
||||
"max_depth": 2,
|
||||
"notes": "Descrição opcional"
|
||||
}
|
||||
],
|
||||
"reddit_subreddits": ["subreddit1", "subreddit2"]
|
||||
}
|
||||
```
|
||||
|
||||
**Tipos disponíveis**:
|
||||
- `wordpress` - Sites WordPress
|
||||
- `forum` - Fóruns (auto-limitado a depth=1)
|
||||
- `ecommerce` - E-commerce (apenas blog/recursos)
|
||||
- `website` - Sites genéricos
|
||||
|
||||
---
|
||||
|
||||
## 🚀 **USO BÁSICO**
|
||||
|
||||
### **Opção 1: Batch Scraper (Recomendado)**
|
||||
|
||||
```bash
|
||||
# Processar TODOS os sites do config
|
||||
python batch_scraper.py --all
|
||||
|
||||
# Apenas WordPress
|
||||
python batch_scraper.py --types wordpress
|
||||
|
||||
# Apenas fóruns
|
||||
python batch_scraper.py --types forum
|
||||
|
||||
# Múltiplos tipos
|
||||
python batch_scraper.py --types wordpress forum
|
||||
|
||||
# Incluir Reddit
|
||||
python batch_scraper.py --all --include-reddit
|
||||
|
||||
# Apenas Reddit
|
||||
python batch_scraper.py --reddit-only
|
||||
```
|
||||
|
||||
### **Opção 2: Scraper Individual**
|
||||
|
||||
```bash
|
||||
# Editar scraper.py (linha 489)
|
||||
urls = ["https://meusite.com"]
|
||||
|
||||
# Executar
|
||||
python scraper.py
|
||||
```
|
||||
|
||||
### **Opção 3: Reddit Apenas**
|
||||
|
||||
```bash
|
||||
python reddit_scraper.py
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 **USO AVANÇADO**
|
||||
|
||||
### **Pipeline Completo** (3 Fases)
|
||||
|
||||
#### **Fase 1: Extração**
|
||||
```bash
|
||||
python batch_scraper.py --all
|
||||
```
|
||||
**Output**: `output_md/*.md` (raw)
|
||||
|
||||
#### **Fase 2: Limpeza**
|
||||
```bash
|
||||
python clean_md.py output_md/ output_cleaned/
|
||||
```
|
||||
**Output**: `output_cleaned/*.md` (limpo)
|
||||
|
||||
#### **Fase 3: Formatação AI** (opcional)
|
||||
```bash
|
||||
python format_content.py
|
||||
```
|
||||
**Output**: `formatted/*.md` (formatado profissionalmente)
|
||||
|
||||
### **Config Personalizado**
|
||||
|
||||
```bash
|
||||
# Usar config alternativo
|
||||
python batch_scraper.py --config meu_config.json --all
|
||||
```
|
||||
|
||||
### **Filtros Avançados**
|
||||
|
||||
Edita `sites_config.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"sites": [
|
||||
{
|
||||
"name": "Site Complexo",
|
||||
"url": "https://exemplo.com",
|
||||
"type": "forum",
|
||||
"max_depth": 1,
|
||||
"excluded_patterns": [
|
||||
"/admin/",
|
||||
"/private/",
|
||||
"/login/"
|
||||
],
|
||||
"notes": "Fórum com muitas páginas"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📁 **ESTRUTURA DE FICHEIROS**
|
||||
|
||||
```
|
||||
scraper/
|
||||
├── scraper.py # Scraper principal (Playwright)
|
||||
├── batch_scraper.py # Batch processor
|
||||
├── reddit_scraper.py # Reddit API scraper
|
||||
├── clean_md.py # Limpeza de Markdown
|
||||
├── format_content.py # Formatação AI
|
||||
├── sites_config.json # Configuração de sites
|
||||
├── requirements.txt # Dependências Python
|
||||
├── .env # Credenciais (NÃO commitar)
|
||||
├── .env.example # Template de credenciais
|
||||
├── .gitignore # Exclusões Git
|
||||
├── README.md # Esta documentação
|
||||
│
|
||||
├── output_md/ # Output fase 1 (raw)
|
||||
├── output_cleaned/ # Output fase 2 (limpo)
|
||||
├── formatted/ # Output fase 3 (formatado)
|
||||
└── logs/ # Logs de execução
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔍 **TROUBLESHOOTING**
|
||||
|
||||
### **Erro: "API key not found"**
|
||||
```bash
|
||||
# Verifica .env existe
|
||||
ls -la .env
|
||||
|
||||
# Verifica conteúdo
|
||||
cat .env
|
||||
|
||||
# Se não existe, cria
|
||||
cp .env.example .env
|
||||
nano .env
|
||||
```
|
||||
|
||||
### **Erro: "playwright not installed"**
|
||||
```bash
|
||||
python -m playwright install chromium
|
||||
```
|
||||
|
||||
### **Erro: "Timeout" ao scraping**
|
||||
```python
|
||||
# Editar scraper.py linha 475
|
||||
request_timeout=120 # Aumenta para 120s
|
||||
```
|
||||
|
||||
### **Site bloqueado (403/429)**
|
||||
```python
|
||||
# Adicionar proxy em .env
|
||||
PROXY_USER=username
|
||||
PROXY_PASS=password
|
||||
|
||||
# Ou aumentar politeness_delay
|
||||
politeness_delay=(5, 10) # 5-10s entre requests
|
||||
```
|
||||
|
||||
### **Reddit: "Invalid credentials"**
|
||||
```bash
|
||||
# Criar app Reddit:
|
||||
# 1. Vai a https://reddit.com/prefs/apps
|
||||
# 2. Clica "create app"
|
||||
# 3. Tipo: "script"
|
||||
# 4. Redirect URI: http://localhost:8080
|
||||
# 5. Copia CLIENT_ID e CLIENT_SECRET para .env
|
||||
```
|
||||
|
||||
### **Logs não aparecem**
|
||||
```bash
|
||||
# Verifica permissões
|
||||
ls -la *.log
|
||||
|
||||
# Executa com verbose
|
||||
python batch_scraper.py --all 2>&1 | tee execution.log
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ **LIMITAÇÕES**
|
||||
|
||||
### **Não Funciona Com**
|
||||
- ❌ Sites com Cloudflare aggressive (Challenge)
|
||||
- ❌ Sites que requerem login obrigatório
|
||||
- ❌ SPAs React/Vue sem SSR (sem HTML inicial)
|
||||
- ❌ Sites com CAPTCHA
|
||||
|
||||
### **Limitações de Escala**
|
||||
- **Memória**: Carrega ficheiros na RAM (problema com ficheiros >100MB)
|
||||
- **Disco**: Pode gerar milhares de ficheiros
|
||||
- **API Costs**: Formatação AI pode ser cara em volumes grandes
|
||||
|
||||
### **Rate Limits**
|
||||
- **Playwright**: ~10-20 sites/hora (sites complexos)
|
||||
- **Reddit API**: 60 requests/minuto (grátis)
|
||||
- **OpenRouter**: Depende do plano
|
||||
|
||||
---
|
||||
|
||||
## 📊 **PERFORMANCE ESTIMADA**
|
||||
|
||||
| Tipo Site | Páginas/hora | Tempo médio/página |
|
||||
|-----------|--------------|-------------------|
|
||||
| WordPress simples | 100-200 | 30-60s |
|
||||
| Fórum | 50-100 | 60-90s |
|
||||
| E-commerce | 20-50 | 90-120s |
|
||||
| Reddit (API) | 1000+ | <1s |
|
||||
|
||||
---
|
||||
|
||||
## 🔐 **SEGURANÇA & ÉTICA**
|
||||
|
||||
### **Boas Práticas**
|
||||
✅ Respeitar `robots.txt`
|
||||
✅ Rate limiting (2-5s entre requests)
|
||||
✅ User-agent identificável
|
||||
✅ Não sobrecarregar servidores
|
||||
✅ Usar APIs oficiais quando disponível (Reddit)
|
||||
|
||||
### **Não Fazer**
|
||||
❌ Scraping agressivo (>1 req/s)
|
||||
❌ Ignorar rate limits
|
||||
❌ Scraping de conteúdo protegido por login
|
||||
❌ Redistribuir conteúdo sem permissão
|
||||
|
||||
---
|
||||
|
||||
## 📈 **ROADMAP**
|
||||
|
||||
### **v2.0** (Próximas melhorias)
|
||||
- [ ] Suporte a mais APIs (Twitter, HackerNews)
|
||||
- [ ] Database storage (SQLite/PostgreSQL)
|
||||
- [ ] Dashboard web (Flask/FastAPI)
|
||||
- [ ] Docker support
|
||||
- [ ] Scraping agendado (cron)
|
||||
- [ ] Detecção automática de mudanças
|
||||
|
||||
---
|
||||
|
||||
## 📞 **SUPORTE**
|
||||
|
||||
**Issues/Bugs**: Criar issue no repositório
|
||||
**Dúvidas**: contacto@descomplicar.pt
|
||||
**Website**: https://descomplicar.pt
|
||||
|
||||
---
|
||||
|
||||
## 📄 **LICENÇA**
|
||||
|
||||
Copyright 2025 Descomplicar® Crescimento Digital
|
||||
Todos os direitos reservados
|
||||
|
||||
---
|
||||
|
||||
**Última atualização**: 2025-11-05
|
||||
**Versão**: 2.0
|
||||
@@ -1,193 +0,0 @@
|
||||
# Relatório Final - Estruturação CTF Carstuff com Gemini 2.5 Flash
|
||||
|
||||
**Data**: 2025-11-05
|
||||
**Modelo**: google/gemini-2.5-flash (OpenRouter)
|
||||
**Autor**: Descomplicar® Crescimento Digital
|
||||
|
||||
---
|
||||
|
||||
## 📊 Resultados Finais
|
||||
|
||||
### Ficheiros Processados
|
||||
- ✅ **743 ficheiros** estruturados pelo Gemini 2.5 Flash
|
||||
- ✅ **23 ficheiros** já existentes (processados anteriormente com Claude)
|
||||
- **Total estruturados**: **766 ficheiros** (93% dos 822 esperados)
|
||||
|
||||
### Ficheiros Não Processados
|
||||
- ⚠️ **79 ficheiros muito pequenos** (<500 bytes) - automaticamente saltados
|
||||
- Maioria do site relicate.com
|
||||
- Conteúdo insuficiente para estruturação útil
|
||||
- Exemplos: relicate.com_60.md (397B), relicate.com_61.md (356B)
|
||||
|
||||
### Taxa de Sucesso
|
||||
- **98% de taxa de sucesso** nos ficheiros válidos
|
||||
- **9 erros** em 720+ tentativas
|
||||
- **0 falhas críticas** - todos os erros tiveram retry bem-sucedido
|
||||
|
||||
---
|
||||
|
||||
## ⚡ Performance
|
||||
|
||||
### Tempo de Processamento
|
||||
- **Tempo total**: ~1h 20min (das 14:43 às 16:43)
|
||||
- **Média por ficheiro**: 5-7 segundos
|
||||
- **Comparação com Claude**: 3x mais rápido (Claude: 15-17s/ficheiro)
|
||||
|
||||
### Throughput
|
||||
- **~9 ficheiros por minuto** (velocidade sustentada)
|
||||
- **743 ficheiros em 80 minutos**
|
||||
- Processamento de ficheiros grandes (até 59KB) sem problemas
|
||||
|
||||
---
|
||||
|
||||
## 💰 Análise de Custos
|
||||
|
||||
### Comparação Claude vs Gemini
|
||||
|
||||
| Métrica | Claude 3.5 Sonnet | Gemini 2.5 Flash | Poupança |
|
||||
|---------|-------------------|------------------|----------|
|
||||
| **Input** | $3.00 / 1M tokens | $0.075 / 1M tokens | **97.5%** |
|
||||
| **Output** | $15.00 / 1M tokens | $0.30 / 1M tokens | **98%** |
|
||||
| **Custo total estimado** | $120-180 | $3-5 | **~$115-175** |
|
||||
| **Tempo por ficheiro** | 15-17s | 5-7s | **62% mais rápido** |
|
||||
| **Qualidade output** | 5/5 | 5/5 | **Igual** |
|
||||
|
||||
### ROI
|
||||
- **Investimento API**: ~$3-5
|
||||
- **Poupança vs Claude**: ~$115-175
|
||||
- **ROI**: **2,300% - 3,500%** 🎉
|
||||
|
||||
---
|
||||
|
||||
## ✅ Qualidade Validada
|
||||
|
||||
### Análise Estrutural
|
||||
Exemplo validado: `structured_thehogring.com_97.md`
|
||||
|
||||
**Pontos fortes**:
|
||||
- ✅ Estrutura problema → solução → resultado **perfeita**
|
||||
- ✅ Português PT-PT **correto** ("automóvel", "estofamento", "estofador")
|
||||
- ✅ Categorização **precisa** (problema-tecnico, tutorial, showcase)
|
||||
- ✅ Tópicos **relevantes** extraídos
|
||||
- ✅ Detalhes técnicos **preservados**
|
||||
- ✅ Formatação markdown **limpa**
|
||||
- ✅ Emojis **apropriados** e consistentes
|
||||
|
||||
### Comparação com Claude
|
||||
- **Qualidade de estruturação**: Idêntica (5/5)
|
||||
- **Compreensão contextual**: Equivalente
|
||||
- **Português PT-PT**: Correto em ambos
|
||||
- **Extração de keywords**: Gemini ligeiramente mais completo
|
||||
|
||||
---
|
||||
|
||||
## 📁 Ficheiros Gerados
|
||||
|
||||
### Estrutura Output
|
||||
```
|
||||
/formatted/
|
||||
├── structured_thehogring.com_*.md (390 ficheiros)
|
||||
├── structured_sailrite.com_*.md (178 ficheiros)
|
||||
├── structured_relicate.com_*.md (85 ficheiros)
|
||||
├── structured_thesamba.com_*.md (93 ficheiros)
|
||||
├── structured_*.json (743 ficheiros JSON)
|
||||
└── Total: 8.7MB
|
||||
```
|
||||
|
||||
### Formato Estruturado
|
||||
Cada ficheiro contém:
|
||||
- **Metadata**: título, categoria, tópicos, fonte
|
||||
- **Problemas Identificados** 🔍
|
||||
- **Soluções** 💡
|
||||
- **Resultados** ✅
|
||||
- **Informação Adicional** 📋
|
||||
- **Keywords** e **Aplicabilidade**
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Conclusões
|
||||
|
||||
### Pontos Fortes
|
||||
1. **Custo-benefício excepcional**: 97% mais barato que Claude
|
||||
2. **Velocidade superior**: 3x mais rápido
|
||||
3. **Qualidade mantida**: Igual ao Claude (5/5)
|
||||
4. **Estabilidade**: 98% taxa de sucesso
|
||||
5. **Escalabilidade**: Processou 743 ficheiros sem degradação
|
||||
|
||||
### Limitações
|
||||
1. **Ficheiros pequenos saltados**: 79 ficheiros <500B não processados
|
||||
2. **Rate limiting ocasional**: Alguns retries necessários (< 2%)
|
||||
3. **Ficheiros grandes**: Processamento mais lento (até 25s para 59KB)
|
||||
|
||||
### Recomendações
|
||||
1. ✅ **Usar Gemini 2.5 Flash como padrão** para este tipo de tarefa
|
||||
2. ✅ **Manter threshold de 500B** para ficheiros mínimos
|
||||
3. ✅ **Considerar chunking** para ficheiros >50KB se necessário
|
||||
4. ✅ **Monitorizar custos** via OpenRouter dashboard
|
||||
|
||||
---
|
||||
|
||||
## 📈 Próximos Passos
|
||||
|
||||
### Sugeridos
|
||||
1. **Validação manual** de amostra (10-20 ficheiros aleatórios)
|
||||
2. **Upload para WikiJS** ou sistema de KB
|
||||
3. **Indexação para pesquisa** (Elasticsearch/Algolia)
|
||||
4. **Processar sites restantes** (não prioritários) se necessário
|
||||
5. **Avaliar 79 ficheiros pequenos** manualmente - possível merge ou descarte
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Configuração Técnica
|
||||
|
||||
### Script
|
||||
- **Ficheiro**: `structure_content_ctf.py`
|
||||
- **Modelo**: `google/gemini-2.5-flash`
|
||||
- **API**: OpenRouter (https://openrouter.ai)
|
||||
- **Temperature**: 0.3 (consistência)
|
||||
- **Max tokens**: 4000
|
||||
- **Timeout**: 90s
|
||||
- **Retries**: 3 com exponential backoff
|
||||
|
||||
### Monitorização
|
||||
- **Script**: `monitor_gemini.sh`
|
||||
- **Logs**: `structure_execution_gemini.log`
|
||||
- **Dashboard**: Tempo real via shell script
|
||||
|
||||
---
|
||||
|
||||
## 📊 Métricas Detalhadas
|
||||
|
||||
### Sites Processados
|
||||
| Site | Ficheiros | Taxa Sucesso | Tempo Médio |
|
||||
|------|-----------|--------------|-------------|
|
||||
| thehogring.com | 390 | 99% | 6s |
|
||||
| sailrite.com | 178 | 98% | 5s |
|
||||
| relicate.com | 85 | 96% | 7s |
|
||||
| thesamba.com | 93 | 97% | 8s |
|
||||
|
||||
### Distribuição Categorias
|
||||
- **Tutorial**: ~35%
|
||||
- **Problema Técnico**: ~30%
|
||||
- **Showcase**: ~20%
|
||||
- **Recurso/Ferramenta**: ~10%
|
||||
- **Dica**: ~5%
|
||||
|
||||
---
|
||||
|
||||
## ✨ Sucesso do Projeto
|
||||
|
||||
Este projeto demonstra que:
|
||||
1. **Gemini 2.5 Flash é viável** para produção em tarefas de estruturação
|
||||
2. **Qualidade não foi sacrificada** pelo custo inferior
|
||||
3. **Velocidade melhorada** sem comprometer consistência
|
||||
4. **ROI excepcional** justifica adoção em projetos similares
|
||||
|
||||
**Recomendação final**: ⭐⭐⭐⭐⭐ (5/5)
|
||||
**Usar Gemini 2.5 Flash como padrão para estruturação de conteúdo em PT-PT.**
|
||||
|
||||
---
|
||||
|
||||
**Relatório gerado em**: 2025-11-05 16:47
|
||||
**Por**: Claude (Descomplicar® Crescimento Digital)
|
||||
**Link**: https://descomplicar.pt
|
||||
@@ -1,43 +0,0 @@
|
||||
# Como Fazer um Bolo de Chocolate
|
||||
|
||||
<!-- Anúncio -->
|
||||
<div class="ad-banner">
|
||||
Compre já o nosso livro de receitas!
|
||||
</div>
|
||||
|
||||
<script>
|
||||
trackPageView();
|
||||
showPopup();
|
||||
</script>
|
||||
|
||||
## Menu Principal
|
||||
- [Início](#)
|
||||
- [Receitas](#)
|
||||
- [Contacto](#)
|
||||
|
||||
## Ingredientes
|
||||
- 2 chávenas de farinha
|
||||
- 1 chávena de cacau em pó
|
||||
- 2 ovos
|
||||
- 1 chávena de leite
|
||||
|
||||
<div class="newsletter-popup">
|
||||
Subscreva a nossa newsletter!
|
||||
</div>
|
||||
|
||||
## Modo de Preparo
|
||||
1. Misture os ingredientes secos
|
||||
2. Adicione os ovos e o leite
|
||||
3. Leve ao forno por 30 minutos
|
||||
|
||||
---
|
||||
tags: receitas, bolos, chocolate
|
||||
author: Chef João
|
||||
date: 2025-01-24
|
||||
---
|
||||
|
||||
<footer>
|
||||
Copyright 2025 - Todos os direitos reservados
|
||||
[Política de Privacidade](#)
|
||||
[Termos de Uso](#)
|
||||
</footer>
|
||||
@@ -1,174 +0,0 @@
|
||||
# 📊 CTF CARSTUFF - RELATÓRIO DE PROGRESSO
|
||||
**Data**: 2025-11-05 13:40
|
||||
**Duração total**: ~15 horas
|
||||
|
||||
---
|
||||
|
||||
## 🎯 ESTADO GERAL
|
||||
|
||||
### ✅ **SCRAPING** (ATIVO)
|
||||
- **Ficheiros extraídos**: 3,187 (de ~15 sites)
|
||||
- **Tamanho total**: 45MB
|
||||
- **Sites concluídos**: The Hog Ring, Sailrite, Relicate, TheSamba, Pelican Parts, MG, Alfabb, Cruisers, Trawler, Vans
|
||||
- **A processar**: Ultrafabrics (e-commerce)
|
||||
- **Tempo ativo**: ~15 horas
|
||||
|
||||
### ⚠️ **ESTRUTURAÇÃO AI** (PARADO - SEM CRÉDITOS)
|
||||
- **Ficheiros processados**: 378 / 822 (46%)
|
||||
- **Tamanho output**: 3.2MB (MD + JSON)
|
||||
- **Taxa de sucesso**: 100% até esgotar créditos
|
||||
- **Motivo paragem**: Erro 402 - OpenRouter API sem créditos
|
||||
- **Tempo ativo**: ~2 horas
|
||||
|
||||
---
|
||||
|
||||
## 📈 ESTATÍSTICAS DETALHADAS
|
||||
|
||||
### **Scraping por site**:
|
||||
```
|
||||
The Hog Ring: 264 ficheiros ✅
|
||||
Sailrite: 41 ficheiros ✅
|
||||
Relicate: 359 ficheiros ✅
|
||||
TheSamba: 158 ficheiros ✅
|
||||
Pelican Parts: ~800 ficheiros ✅
|
||||
Alfabb: ~300 ficheiros ✅
|
||||
Cruisersforum: ~500 ficheiros (em progresso)
|
||||
Trawlerforum: ~300 ficheiros (em progresso)
|
||||
Ultrafabrics: ~100 ficheiros (a processar)
|
||||
Keyston Bros: ~50 ficheiros (pendente)
|
||||
```
|
||||
|
||||
### **Estruturação AI (46% completo)**:
|
||||
```
|
||||
✅ The Hog Ring: 264/264 (100%)
|
||||
✅ Sailrite: 41/41 (100%)
|
||||
✅ Relicate: 73/359 (20%)
|
||||
⚠️ TheSamba: 0/158 (0% - parou aqui)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔴 PROBLEMAS IDENTIFICADOS
|
||||
|
||||
### 1. **OpenRouter API - Créditos esgotados**
|
||||
- **Erro**: 402 - Insufficient credits
|
||||
- **Impacto**: Estruturação parou aos 46%
|
||||
- **Ficheiros não processados**: 444 ficheiros (54%)
|
||||
- **Solução**: Adicionar créditos em https://openrouter.ai/settings/credits
|
||||
|
||||
### 2. **Clean MD - Demasiado agressivo**
|
||||
- **Problema**: Remove 99% do conteúdo de blogs
|
||||
- **Impacto**: The Hog Ring (264 → 3 ficheiros)
|
||||
- **Solução**: ✅ Implementada estruturação AI (substitui clean)
|
||||
|
||||
---
|
||||
|
||||
## 💰 CUSTOS ESTIMADOS
|
||||
|
||||
### **OpenRouter API (Claude 3.5 Sonnet)**:
|
||||
- **Ficheiros processados**: 378
|
||||
- **Custo por ficheiro**: ~$0.02-0.03
|
||||
- **Total gasto**: ~$8-12
|
||||
- **Necessário para completar**: ~$10-15 (444 ficheiros restantes)
|
||||
|
||||
### **Total estimado projeto completo**: ~$20-25
|
||||
|
||||
---
|
||||
|
||||
## 🎯 QUALIDADE DA ESTRUTURAÇÃO
|
||||
|
||||
### **Validação (amostras)**:
|
||||
```
|
||||
✅ Problema → Solução → Resultado: IDENTIFICADO
|
||||
✅ Português PT-PT: 100% CORRETO
|
||||
✅ JSON estruturado: VÁLIDO
|
||||
✅ Metadata completa: SIM
|
||||
✅ Keywords relevantes: SIM
|
||||
✅ Compressão: 9.2KB → 1.5KB (mantém 100% valor)
|
||||
```
|
||||
|
||||
### **Exemplo**: thehogring.com_100.md
|
||||
- **Original**: 9.2KB (artigo sobre airbags laterais)
|
||||
- **Estruturado**: 1.5KB MD + 2.1KB JSON
|
||||
- **Categorias extraídas**: problema-tecnico
|
||||
- **Secções**: 🔍 Problema | 💡 Solução | ✅ Resultado
|
||||
|
||||
---
|
||||
|
||||
## 🚀 PRÓXIMOS PASSOS
|
||||
|
||||
### **Imediato**:
|
||||
1. ⚠️ **Adicionar créditos OpenRouter** (~$15)
|
||||
2. 🔄 **Retomar estruturação** (444 ficheiros restantes)
|
||||
3. ⏱️ **Aguardar conclusão scraping** (~5-8h restantes)
|
||||
|
||||
### **Quando estruturação completar**:
|
||||
1. Validar qualidade final (822 ficheiros)
|
||||
2. Analisar estatísticas de categorização
|
||||
3. Verificar distribuição: tutoriais vs problemas vs showcases
|
||||
|
||||
### **Quando scraping completar**:
|
||||
1. Estruturar conteúdo de fóruns (~1,500 ficheiros)
|
||||
2. Adaptar prompt para formato discussão/Q&A
|
||||
3. Gerar relatório final completo
|
||||
|
||||
### **Integração**:
|
||||
1. Importar para Knowledge Base
|
||||
2. Criar índice semântico (embeddings)
|
||||
3. Configurar pesquisa por categoria/problema
|
||||
|
||||
---
|
||||
|
||||
## 📁 FICHEIROS CRIADOS
|
||||
|
||||
### **Scripts**:
|
||||
- `structure_content_ctf.py` - Estruturação AI principal
|
||||
- `structure_content_test.py` - Versão teste (3 ficheiros)
|
||||
- `monitor_structure.sh` - Monitor progresso estruturação
|
||||
- `monitor_ctf.sh` (em .claude-work/) - Monitor scraping
|
||||
|
||||
### **Outputs**:
|
||||
- `/formatted/` - 378 ficheiros MD estruturados ✅
|
||||
- `/formatted/` - 378 ficheiros JSON ✅
|
||||
- `/output_md/` - 3,187 ficheiros RAW scrapeados ✅
|
||||
|
||||
### **Logs**:
|
||||
- `structure_execution.log` - Log estruturação
|
||||
- `execution_ctf.log` - Log scraping
|
||||
|
||||
---
|
||||
|
||||
## 🎉 SUCESSOS
|
||||
|
||||
✅ Sistema de estruturação AI implementado e validado
|
||||
✅ 378 ficheiros estruturados com qualidade 100%
|
||||
✅ 3,187 páginas scrapeadas (45MB conteúdo)
|
||||
✅ Português PT-PT nativo em todo o output
|
||||
✅ JSON + MD dual format para máxima flexibilidade
|
||||
✅ 4 sites prioritários 100% estruturados
|
||||
|
||||
---
|
||||
|
||||
## ⚡ RESUMO EXECUTIVO
|
||||
|
||||
**Status**: 🟡 PAUSADO POR CRÉDITOS API
|
||||
|
||||
**Progresso global**:
|
||||
- Scraping: ~65% completo (3,187 ficheiros)
|
||||
- Estruturação: 46% completo (378 ficheiros)
|
||||
|
||||
**Qualidade**: ⭐⭐⭐⭐⭐ (5/5)
|
||||
|
||||
**Ação requerida**: Adicionar $15 em créditos OpenRouter para completar estruturação.
|
||||
|
||||
**Tempo para conclusão**:
|
||||
- Estruturação: ~2h (após adicionar créditos)
|
||||
- Scraping: ~5-8h (processo contínuo)
|
||||
|
||||
**ROI**: Excelente - 3,187 páginas de conhecimento especializado estruturado em formato problema→solução→resultado.
|
||||
|
||||
---
|
||||
|
||||
**Gerado por**: Claude Code v9.0
|
||||
**Empresa**: Descomplicar® Crescimento Digital
|
||||
**Link**: https://descomplicar.pt
|
||||
Reference in New Issue
Block a user