YC Jobs Scraper
Esta habilidad proporciona una arquitectura robusta para rasgar ofertas de trabajo de Y Combinator y workatastartup.com. Está diseñada para ejecutarse automáticamente, evitar cuellos de botella de inicio de sesión y mantener un estado para no rasgar ofertas duplicadas.
Arquitectura
El scraper utiliza un enfoque híbrido para maximizar la confiabilidad y minimizar la detección de bots:
- Autenticación:
scripts/auth.jsusa Playwright para permitir que un humano inicie sesión una vez y guarda la sesión enscripts/state.json. - Base de datos:
scripts/db.jsusabetter-sqlite3para gestionarscripts/jobs.db. Registra cadacompany_slugyjob_idque se haya visto. - Extracción primaria:
scripts/scraper.jscargastate.json, visita las URLs de consulta de YC y extrae los slugs de empresas del payload JSON oculto de Inertia.jsdata-page. - Extracción de ofertas (JSON): Luego visita las páginas autenticadas de las empresas (
/companies/[slug]) para extraer las ofertas del payload JSON del backend, asegurando obtener eljob_idreal para una deduplicación precisa. - Extracción de ofertas (fallback): Si falla la extracción JSON, recurre a analizar las tarjetas HTML públicas de ofertas desde
ycombinator.com/companies/[slug]/jobs.
Flujos de trabajo
1. Configuración inicial
Si es la primera vez que se ejecuta el scraper en un entorno, o si falta node_modules:
cd @path/scripts
npm install
npx playwright install
2. Autenticación (paso manual)
Si scripts/state.json falta o ha expirado, el scraper fallará. Debes indicar al usuario humano que ejecute el script de autenticación manualmente:
cd @path/scripts
node auth.js
Dile al usuario que se abrirá un navegador y que debe iniciar sesión. Playwright guardará automáticamente las cookies/tokens en state.json.
3. Ejecutar el scraper diario
Para rasgar nuevas empresas y ofertas:
cd @path/scripts
node scraper.js
Este script mostrará exactamente cuántas empresas nuevas y cuántas ofertas nuevas se encontraron. Gracias a jobs.db, ejecutarlo varias veces seguidas dará como resultado 0 new jobs found.
4. Consultar la base de datos
Si necesitas analizar los datos rasgados o ver las empresas/ofertas, puedes consultar scripts/jobs.db directamente usando better-sqlite3.
Ejemplo: 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);"
Ejemplo: Ver ofertas recientes
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);"