100%
Voltar ao catálogo de notas

Nota técnica

Sistema de Scraping de Vagas com Airflow

Pipeline automatizado para coleta diária de vagas de emprego com relatórios enviados via WhatsApp

2-3 semanas de leitura alta planejamento

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!