$ python modulo_8.py
Projeto final: robô completo
Une tudo que você aprendeu: coleta → processamento → relatório → e-mail → agendamento → Docker. Um pipeline de produção real.
Objetivo do projeto
Construir um robô que:
- Coleta dados de uma fonte (scraping ou API)
- Limpa e agrega com pandas
- Gera relatório Excel formatado
- Envia por e-mail para uma lista de destinatários
- Roda diariamente via cron ou Docker + schedule
- Registra logs e trata erros sem cair silenciosamente
Estrutura sugerida
robo-diario/
├── .env # secrets (não commitado)
├── .gitignore
├── requirements.txt
├── Dockerfile
├── docker-compose.yml
├── main.py # orquestrador
├── collectors/
│ └── scrape.py
├── processors/
│ └── transform.py
├── reporters/
│ └── excel.py
├── notifiers/
│ └── email.py
└── logs/
Orquestrador (main.py)
#!/usr/bin/env python3
import logging
from datetime import datetime
from collectors.scrape import coletar
from processors.transform import processar
from reporters.excel import gerar_relatorio
from notifiers.email import enviar
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s [%(levelname)s] %(message)s",
handlers=[
logging.FileHandler("logs/robo.log"),
logging.StreamHandler()
]
)
log = logging.getLogger("robo")
def run():
log.info("Iniciando pipeline")
try:
bruto = coletar()
log.info("Coletados %d registros", len(bruto))
df = processar(bruto)
caminho = gerar_relatorio(df)
log.info("Relatório gerado: %s", caminho)
enviar(
assunto=f"Relatório diário — {datetime.now():%d/%m/%Y}",
corpo="Segue o relatório automático da IRN Devs.",
anexo=caminho
)
log.info("E-mail enviado com sucesso")
except Exception:
log.exception("Falha no pipeline")
raise
if __name__ == "__main__":
run()
Checklist de entrega
- Código organizado em módulos (não um único arquivo gigante)
- requirements.txt com versões fixadas
- .env.example documentando as variáveis necessárias
- Dockerfile funcional
- Log em arquivo + console
- Tratamento de exceção no orquestrador
- README curto explicando como rodar local e em container
DESAFIO FINAL
Implemente o robô completo usando um domínio real de sua escolha (preços, vagas, cotações, status de serviços etc.). Publique o repositório no GitHub e documente o deploy. Este projeto vira item forte de portfólio.
PRÓXIMOS PASSOS
Após este curso você está pronto para: observabilidade (logs + métricas), filas (Redis/RQ), e orquestração com Kubernetes ou GitHub Actions.