init: scripts diversos (crawlers, conversores, scrapers)

This commit is contained in:
2026-03-05 20:38:36 +00:00
commit 6ac6f4be2a
925 changed files with 850330 additions and 0 deletions

165
scraper/validate_setup.py Executable file
View File

@@ -0,0 +1,165 @@
"""
validate_setup.py - Valida configuração do scraper
Author: Descomplicar® Crescimento Digital
Link: https://descomplicar.pt
Copyright: 2025 Descomplicar®
"""
import os
import sys
import json
from pathlib import Path
def check_file(filepath, required=True):
"""Verifica se ficheiro existe."""
exists = os.path.exists(filepath)
status = "" if exists else ("" if required else "⚠️")
print(f"{status} {filepath}")
return exists
def check_env_var(var_name, required=True):
"""Verifica variável de ambiente."""
value = os.getenv(var_name)
has_value = value is not None and value.strip() != ""
status = "" if has_value else ("" if required else "⚠️")
print(f"{status} {var_name}: {'SET' if has_value else 'NOT SET'}")
return has_value
def check_python_package(package_name):
"""Verifica se pacote Python está instalado."""
try:
__import__(package_name)
print(f"{package_name}")
return True
except ImportError:
print(f"{package_name}")
return False
def main():
print("="*60)
print("VALIDAÇÃO DE SETUP - WEB SCRAPER")
print("="*60)
errors = []
warnings = []
# 1. Ficheiros essenciais
print("\n📁 FICHEIROS ESSENCIAIS:")
if not check_file("requirements.txt"):
errors.append("requirements.txt não encontrado")
if not check_file("sites_config.json"):
errors.append("sites_config.json não encontrado")
if not check_file("scraper.py"):
errors.append("scraper.py não encontrado")
if not check_file("batch_scraper.py"):
errors.append("batch_scraper.py não encontrado")
# 2. Ficheiros opcionais
print("\n📄 FICHEIROS OPCIONAIS:")
if not check_file(".env", required=False):
warnings.append(".env não encontrado - cria com: cp .env.example .env")
if not check_file("README.md", required=False):
warnings.append("README.md não encontrado")
# 3. Variáveis de ambiente
print("\n🔐 VARIÁVEIS DE AMBIENTE:")
from dotenv import load_dotenv
load_dotenv()
# OpenRouter (opcional para formatação AI)
if not check_env_var("OPENROUTER_API_KEY", required=False):
warnings.append("OPENROUTER_API_KEY não definida - formatação AI não disponível")
# Reddit (opcional)
has_reddit_id = check_env_var("REDDIT_CLIENT_ID", required=False)
has_reddit_secret = check_env_var("REDDIT_CLIENT_SECRET", required=False)
if not has_reddit_id or not has_reddit_secret:
warnings.append("Credenciais Reddit incompletas - scraping Reddit não disponível")
# 4. Pacotes Python
print("\n📦 DEPENDÊNCIAS PYTHON:")
packages = {
"requests": True,
"playwright": True,
"markdownify": True,
"dotenv": True,
"praw": False # Opcional (Reddit)
}
for pkg, required in packages.items():
if not check_python_package(pkg):
if required:
errors.append(f"Pacote {pkg} não instalado - executar: pip install {pkg}")
else:
warnings.append(f"Pacote {pkg} não instalado (opcional)")
# 5. Playwright browsers
print("\n🌐 PLAYWRIGHT BROWSERS:")
playwright_dir = Path.home() / ".cache/ms-playwright"
if playwright_dir.exists():
print("✅ Browsers instalados")
else:
print("❌ Browsers não instalados")
errors.append("Executar: python -m playwright install chromium")
# 6. Diretórios de output
print("\n📂 DIRETÓRIOS:")
dirs = ["output_md", "output_cleaned", "formatted", "logs"]
for d in dirs:
if not os.path.exists(d):
print(f"⚠️ {d}/ não existe (será criado automaticamente)")
else:
print(f"{d}/")
# 7. Validar sites_config.json
print("\n⚙️ CONFIGURAÇÃO:")
try:
with open("sites_config.json") as f:
config = json.load(f)
total_sites = len(config.get("sites", []))
reddit_subs = len(config.get("reddit_subreddits", []))
print(f"✅ sites_config.json válido")
print(f"{total_sites} sites configurados")
print(f"{reddit_subs} subreddits Reddit")
if total_sites == 0:
warnings.append("Nenhum site configurado em sites_config.json")
except Exception as e:
errors.append(f"Erro ao ler sites_config.json: {e}")
# Resumo final
print("\n" + "="*60)
print("RESUMO")
print("="*60)
if errors:
print(f"\n{len(errors)} ERROS CRÍTICOS:")
for error in errors:
print(f"{error}")
if warnings:
print(f"\n⚠️ {len(warnings)} AVISOS:")
for warning in warnings:
print(f"{warning}")
if not errors and not warnings:
print("\n✅ TUDO CONFIGURADO CORRETAMENTE!")
print("\nPróximo passo:")
print(" python batch_scraper.py --all")
elif not errors:
print("\n✅ CONFIGURAÇÃO BÁSICA OK")
print("⚠️ Alguns recursos opcionais não disponíveis (ver avisos acima)")
print("\nPodes executar:")
print(" python batch_scraper.py --all")
else:
print("\n❌ CORRIGE OS ERROS ANTES DE EXECUTAR")
print("\nVer: README.md ou QUICKSTART.md")
sys.exit(1)
print("="*60)
if __name__ == "__main__":
main()