Este projeto é um scraper completo para coleta, processamento, armazenamento e divulgação de vagas de emprego extraídas do LinkedIn, utilizando Node.js, TypeScript, Puppeteer, RabbitMQ, MongoDB, Discord e IA generativa.
O fluxo do projeto é dividido em quatro etapas principais:
-
Scraper (
scraper/):- Utiliza Puppeteer para automatizar a busca e extração de postagens de vagas no LinkedIn.
- As vagas extraídas são enviadas para uma fila RabbitMQ (
post_processing).
-
Pós-processamento (
post-processing/):- Recebe as vagas da fila e utiliza um modelo de IA (via Ollama) para estruturar e validar os dados.
- Os dados processados são enviados para a próxima fila (
storage).
-
Armazenamento (
storage/):- Recebe os dados estruturados e armazena no MongoDB.
- Após salvar, envia para a fila de envio ao Discord (
send-discord-message).
-
Bot do Discord (
discord-bot/):- Recebe as vagas e publica em um canal do Discord, com formatação amigável e botão para contato.
- Node.js + TypeScript
- Puppeteer (scraping)
- RabbitMQ (mensageria)
- MongoDB (armazenamento)
- Ollama (IA generativa)
- Discord.js (bot)
- Docker Compose (infraestrutura local)
- Clone o repositório:
git clone <url-do-repo>
cd jobs-scraper- Configure o arquivo
.env:
Crie um arquivo .env na raiz com as seguintes variáveis:
LINKEDIN_EMAIL=seu_email
LINKEDIN_PASSWORD=sua_senha
DISCORD_TOKEN=seu_token
DISCORD_CHANNEL_ID=id_do_canal
⚠️ Nunca suba o arquivo.envpara o GitHub!
- Suba os serviços com Docker Compose:
docker-compose up -d- Instale as dependências:
pnpm install- Inicie todos os serviços em modo desenvolvimento:
pnpm devscraper/— Scraper do LinkedInpost-processing/— Pós-processamento com IAstorage/— Armazenamento no MongoDBdiscord-bot/— Bot do Discordtypes/— Tipos TypeScript compartilhados
- NUNCA suba arquivos
.envou credenciais para o repositório. - As credenciais de banco e serviços estão em variáveis de ambiente e no
docker-compose.yml(apenas para uso local). - O projeto utiliza filas para desacoplar as etapas e facilitar a escalabilidade.
Este projeto está licenciado sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.