Laboratório de Ideias
automacao
Sistema de Scraping de Vagas com Airflow
Pipeline automatizado para coleta diária de vagas de emprego com relatórios enviados via WhatsApp
Criada em
3 min
de leitura
Visão Geral
Desenvolver um pipeline automatizado usando Apache Airflow para coletar vagas de emprego diariamente de múltiplas plataformas, processar os dados e enviar relatórios personalizados via WhatsApp.
Funcionalidades Principais
1. Coleta Automatizada de Vagas
- Plataformas alvo: LinkedIn, Indeed, Catho, InfoJobs, Vagas.com
- Filtros configuráveis: Cargo, localização, salário, modalidade
- Detecção de duplicatas: Algoritmo para evitar vagas repetidas
- Rate limiting: Respeitar limites das APIs/sites
2. Pipeline Airflow
- Execução diária: DAG configurada para rodar todo dia às 7h
- Tarefas paralelas: Scraping simultâneo de múltiplas fontes
- Retry automático: Reexecutar em caso de falha
- Monitoramento: Logs detalhados e alertas
3. Processamento de Dados
- Limpeza: Remoção de HTML, normalização de texto
- Enriquecimento: Categorização automática por área/nível
- Análise: Estatísticas de salários, tendências do mercado
- Deduplicação: Identificar vagas similares
4. Relatórios WhatsApp
- Resumo diário: Novas vagas encontradas por categoria
- Alertas personalizados: Vagas que atendem critérios específicos
- Estatísticas: Média salarial, empresas que mais contratam
- Formato rico: Mensagens formatadas com emojis e links
Stack Tecnológica
Core do Sistema
# Orquestração e scraping
apache-airflow # Orquestração de pipelines
selenium # Automação de browser
scrapy # Framework de scraping
beautifulsoup4 # Parser HTML
requests # HTTP requests
Processamento de Dados
# Análise e persistência
pandas # Manipulação de dados
sqlalchemy # ORM database
psycopg2 # PostgreSQL driver
nltk # Processamento de linguagem natural
scikit-learn # ML para categorização
Notificações
# WhatsApp e comunicação
pywhatkit # WhatsApp Web automation
twilio # WhatsApp Business API (alternativa)
python-telegram-bot # Telegram como backup
Infraestrutura
# Docker e banco
postgresql # Banco principal
redis # Cache e Celery broker
docker # Containerização
nginx # Proxy reverso
Arquitetura do Sistema
sistema-vagas/
├── airflow/
│ ├── dags/
│ │ ├── daily_job_scraping.py
│ │ ├── weekly_analysis.py
│ │ └── data_quality_check.py
│ ├── plugins/
│ │ ├── scrapers/
│ │ │ ├── linkedin_scraper.py
│ │ │ ├── indeed_scraper.py
│ │ │ ├── catho_scraper.py
│ │ │ └── base_scraper.py
│ │ ├── processors/
│ │ │ ├── data_cleaner.py
│ │ │ ├── deduplicator.py
│ │ │ └── categorizer.py
│ │ └── notifiers/
│ │ ├── whatsapp_sender.py
│ │ ├── telegram_sender.py
│ │ └── email_sender.py
│ └── config/
│ ├── airflow.cfg
│ └── connections.py
├── database/
│ ├── models/
│ │ ├── jobs.py
│ │ ├── companies.py
│ │ └── reports.py
│ ├── migrations/
│ └── seeds/
├── scrapers/
│ ├── utils/
│ │ ├── proxy_manager.py
│ │ ├── user_agent_rotator.py
│ │ └── captcha_solver.py
│ ├── drivers/
│ └── configs/
├── analytics/
│ ├── salary_analyzer.py
│ ├── trend_detector.py
│ └── market_insights.py
├── notifications/
│ ├── templates/
│ │ ├── daily_report.html
│ │ ├── alert_template.html
│ │ └── weekly_summary.html
│ └── formatters/
├── docker-compose.yml
└── requirements.txt
DAG Principal - Fluxo Diário
from datetime import datetime, timedelta
from airflow import DAG
from airflow.operators.python import PythonOperator
from airflow.operators.bash import BashOperator
default_args = {
'owner': 'job-scraper',
'depends_on_past': False,
'start_date': datetime(2025, 9, 9),
'email_on_failure': True,
'email_on_retry': False,
'retries': 2,
'retry_delay': timedelta(minutes=5)
}
dag = DAG(
'daily_job_scraping',
default_args=default_args,
description='Pipeline diário de scraping de vagas',
schedule_interval='0 7 * * *', # Todo dia às 7h
catchup=False,
tags=['jobs', 'scraping', 'daily']
)
# Tarefas paralelas de scraping
scrape_linkedin = PythonOperator(
task_id='scrape_linkedin',
python_callable=scrape_linkedin_jobs,
dag=dag
)
scrape_indeed = PythonOperator(
task_id='scrape_indeed',
python_callable=scrape_indeed_jobs,
dag=dag
)
# Processamento dos dados
process_data = PythonOperator(
task_id='process_scraped_data',
python_callable=process_and_clean_data,
dag=dag
)
# Análise e relatório
generate_report = PythonOperator(
task_id='generate_daily_report',
python_callable=create_daily_analysis,
dag=dag
)
# Envio WhatsApp
send_whatsapp = PythonOperator(
task_id='send_whatsapp_report',
python_callable=send_daily_whatsapp,
dag=dag
)
# Dependências
[scrape_linkedin, scrape_indeed] >> process_data >> generate_report >> send_whatsapp
Configurações de Scraping
1. Filtros Personalizáveis
SEARCH_CONFIGS = {
'desenvolvedor_python': {
'keywords': ['python', 'django', 'flask', 'fastapi'],
'locations': ['São Paulo', 'Rio de Janeiro', 'Remoto'],
'experience_level': ['junior', 'pleno', 'senior'],
'salary_min': 5000,
'contract_type': ['CLT', 'PJ']
},
'data_engineer': {
'keywords': ['data engineer', 'engenheiro dados', 'spark', 'airflow'],
'locations': ['São Paulo', 'Remoto'],
'experience_level': ['pleno', 'senior'],
'salary_min': 8000
}
}
2. Anti-Bot Protection
# Rotação de User Agents
USER_AGENTS = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36',
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36'
]
# Proxy rotation
PROXY_LIST = [
'proxy1.example.com:8080',
'proxy2.example.com:8080'
]
# Random delays
DELAY_RANGE = (2, 8) # 2-8 segundos entre requests
Relatórios WhatsApp
1. Resumo Diário
🔍 RELATÓRIO DIÁRIO DE VAGAS - 09/09/2025
📊 RESUMO GERAL:
• Novas vagas encontradas: 47
• Vagas Python: 12
• Vagas Data Engineer: 8
• Vagas remotas: 23
💰 DESTAQUE SALARIAL:
• Maior salário: R$ 18.000 (Senior Python - RemoteOK)
• Média Python Jr: R$ 4.200
• Média Python Sr: R$ 12.500
🏢 EMPRESAS EM DESTAQUE:
• Nubank: 3 vagas
• iFood: 2 vagas
• Stone: 2 vagas
🔗 VAGAS HOT:
1. Senior Python Developer - Nubank (R$ 15.000)
📍 Remoto | Link: bit.ly/vaga123
2. Data Engineer - iFood (R$ 12.000)
📍 SP | Link: bit.ly/vaga124
⚡ ALERTAS PERSONALIZADOS:
• 2 vagas atendem seus critérios!
2. Alertas Específicos
🚨 ALERTA DE VAGA!
💼 Senior Python Developer
🏢 Empresa: Nubank
📍 Localização: Remoto
💰 Salário: R$ 15.000 - R$ 18.000
⏰ Publicada: há 2 horas
📋 REQUISITOS:
• 5+ anos Python
• Django/FastAPI
• AWS/Docker
• Inglês avançado
🔗 CANDIDATAR: https://jobs.nubank.com.br/xyz
✅ Esta vaga atende seus filtros:
• Salário > R$ 12.000
• Modalidade remota
• Stack Python
Análises Avançadas
1. Tendências do Mercado
- Evolução salarial: Gráficos de tendência por mês
- Skills em alta: Tecnologias mais demandadas
- Empresas que mais contratam: Ranking mensal
- Modalidade de trabalho: Remoto vs presencial vs híbrido
2. Machine Learning
# Categorização automática
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans
# Predição de salários
from sklearn.ensemble import RandomForestRegressor
# Análise de sentimento das descrições
from transformers import pipeline
sentiment_analyzer = pipeline("sentiment-analysis")
Fases de Desenvolvimento
Fase 1: MVP (1 semana)
- Configurar Airflow básico
- Scraper simples para 1-2 sites
- Banco PostgreSQL
- WhatsApp básico com pywhatkit
- DAG simples funcionando
Fase 2: Expansão (1 semana)
- Adicionar mais fontes de vagas
- Sistema de deduplicação
- Processamento avançado de dados
- Relatórios formatados
- Sistema de alertas personalizados
Fase 3: Otimização (1 semana)
- Anti-bot protection completa
- Machine learning para categorização
- Dashboard web (bonus)
- Análises de tendências
- Deploy em produção
Configuração de Infraestrutura
Docker Compose
version: '3.8'
services:
airflow-webserver:
build: ./airflow
ports:
- "8080:8080"
environment:
- AIRFLOW__CORE__EXECUTOR=LocalExecutor
- AIRFLOW__DATABASE__SQL_ALCHEMY_CONN=postgresql://user:pass@postgres/airflow
volumes:
- ./airflow/dags:/opt/airflow/dags
- ./airflow/plugins:/opt/airflow/plugins
postgres:
image: postgres:13
environment:
- POSTGRES_USER=airflow
- POSTGRES_PASSWORD=airflow
- POSTGRES_DB=airflow
volumes:
- postgres_data:/var/lib/postgresql/data
redis:
image: redis:6-alpine
ports:
- "6379:6379"
selenium-hub:
image: selenium/hub:4.0.0
ports:
- "4444:4444"
chrome:
image: selenium/node-chrome:4.0.0
environment:
- HUB_HOST=selenium-hub
depends_on:
- selenium-hub
Monitoramento e Alertas
1. Health Checks
- Verificar se scrapers estão funcionando
- Monitorar taxa de sucesso por site
- Alertas quando pipeline falha
- Métricas de performance
2. Data Quality
- Validar dados coletados
- Detectar anomalias (ex: salários irreais)
- Verificar se sites mudaram estrutura
- Alertas de qualidade dos dados
Extensões Futuras
1. Inteligência Artificial
- Recomendação de vagas: ML personalizado
- Análise de fit: Compatibility score
- Predição salarial: Baseado em descrição da vaga
- Chatbot: Interação via WhatsApp
2. Integrações
- Telegram: Canal alternativo
- Discord: Bot para comunidades
- Slack: Integração corporativa
- Email: Relatórios semanais detalhados
3. Funcionalidades Premium
- API pública: Monetizar dados
- Dashboard web: Interface visual
- Mobile app: Aplicativo dedicado
- Candidatura automática: Auto-apply em vagas
Resultado Esperado
Um sistema profissional que:
- Coleta automaticamente centenas de vagas por dia
- Processa e categoriza dados inteligentemente
- Envia relatórios personalizados via WhatsApp
- Detecta oportunidades relevantes em tempo real
- Fornece insights valiosos sobre o mercado de trabalho
Este projeto demonstra expertise em:
- Data Engineering: Pipelines robustos com Airflow
- Web Scraping: Técnicas avançadas e anti-detecção
- Automação: Processos completamente automatizados
- Análise de Dados: Insights e tendências do mercado
- Integração: APIs e notificações modernas
Perfeito para portfolio e uso pessoal no job hunting!
Vamos Conversar!
Tem uma ideia similar ou quer colaborar com este projeto? Adoraria ouvir seus pensamentos e talvez trabalharmos juntos!
💡 Tem outras ideias? Quer ajudar com esta? Vamos trocar experiências!