RAPHA - Engenharia de Dados & Software RAPHA - Engenharia de Dados & Software
A
Voltar às Ideias
Prioridade alta
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)

  1. Configurar Airflow básico
  2. Scraper simples para 1-2 sites
  3. Banco PostgreSQL
  4. WhatsApp básico com pywhatkit
  5. DAG simples funcionando

Fase 2: Expansão (1 semana)

  1. Adicionar mais fontes de vagas
  2. Sistema de deduplicação
  3. Processamento avançado de dados
  4. Relatórios formatados
  5. Sistema de alertas personalizados

Fase 3: Otimização (1 semana)

  1. Anti-bot protection completa
  2. Machine learning para categorização
  3. Dashboard web (bonus)
  4. Análises de tendências
  5. 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!

Outras Ideias que Você Pode Gostar