Extrator de Vagas do YC
Esta habilidade fornece uma arquitetura robusta para extrair vagas do Y Combinator e do workatastartup.com. Ela é projetada para ser executada automaticamente, contornar gargalos de login e manter um estado para nunca extrair vagas duplicadas.
Arquitetura
O extrator usa uma abordagem híbrida para maximizar a confiabilidade e minimizar a detecção como bot:
- Autenticação:
scripts/auth.jsusa Playwright para permitir que um humano faça login uma vez e salva a sessão emscripts/state.json. - Banco de Dados:
scripts/db.jsusabetter-sqlite3para gerenciarscripts/jobs.db. Ele rastreia cadacompany_slugejob_idjá vistos. - Extração Primária:
scripts/scraper.jscarregastate.json, visita URLs de consulta do YC e extrai os slugs das empresas do payload JSON oculto do Inertia.js (data-page). - Extração de Vagas (JSON): Em seguida, visita as páginas autenticadas das empresas (
/companies/[slug]) para extrair vagas do payload JSON do backend, garantindo que obtenhamos ojob_idreal para desduplicação precisa. - Extração de Vagas (Fallback): Se a extração JSON falhar, ela recorre à análise de cartões HTML públicos de vagas em
ycombinator.com/companies/[slug]/jobs.
Fluxos de Trabalho
1. Configuração Inicial
Se esta for a primeira execução do extrator em um ambiente, ou se node_modules estiver faltando:
cd @path/scripts
npm install
npx playwright install
2. Autenticação (Etapa Manual)
Se scripts/state.json estiver faltando ou expirado, o extrator falhará. Você deve instruir o usuário humano a executar o script de autenticação manualmente:
cd @path/scripts
node auth.js
Diga ao usuário que um navegador será aberto e ele deve fazer login. O Playwright salvará automaticamente os cookies/tokens em state.json.
3. Executando o Extrator Diário
Para extrair novas empresas e vagas:
cd @path/scripts
node scraper.js
Este script exibirá exatamente quantas novas empresas e novas vagas foram encontradas. Por causa do jobs.db, executá-lo várias vezes consecutivas resultará em 0 new jobs found.
4. Consultando o Banco de Dados
Se precisar analisar os dados extraídos ou visualizar as empresas/vagas, você pode consultar scripts/jobs.db diretamente usando better-sqlite3.
Exemplo: Contar Empresas
cd @path/scripts
node -e "const db = require('better-sqlite3')('jobs.db'); console.log('Companies:', db.prepare('SELECT COUNT(*) as count FROM companies').get().count);"
Exemplo: Visualizar Vagas Recentes
cd @path/scripts
node -e "const db = require('better-sqlite3')('jobs.db'); const jobs = db.prepare('SELECT title, company_slug, location FROM jobs ORDER BY created_at DESC LIMIT 5').all(); console.table(jobs);"