Scraper d'offres d'emploi YC
Cette compétence offre une architecture robuste pour scraper les offres d'emploi de YCombinator et de workatastartup.com. Elle est conçue pour s'exécuter automatiquement, contourner les goulots d'étranglement de connexion et maintenir un état pour ne jamais récupérer de doublons.
Architecture
Le scraper utilise une approche hybride pour maximiser la fiabilité et minimiser la détection de bot :
- Authentification :
scripts/auth.jsutilise Playwright pour permettre à un humain de se connecter une fois et enregistre la session dansscripts/state.json. - Base de données :
scripts/db.jsutilisebetter-sqlite3pour gérerscripts/jobs.db. Elle suit chaquecompany_slugetjob_iddéjà vus. - Extraction primaire :
scripts/scraper.jschargestate.json, visite les URL de requête YC et extrait les slugs d'entreprise du payload JSON cachédata-paged'Inertia.js. - Extraction des offres (JSON) : Ensuite, il visite les pages d'entreprise authentifiées (
/companies/[slug]) pour extraire les offres du payload JSON backend, garantissant ainsi l'obtention du vraijob_idpour une déduplication précise. - Extraction des offres (Fallback) : Si l'extraction JSON échoue, il se rabat sur l'analyse des cartes d'offres HTML publiques de
ycombinator.com/companies/[slug]/jobs.
Workflows
1. Configuration initiale
Si c'est la première exécution du scraper dans un environnement, ou si node_modules est manquant :
cd @path/scripts
npm install
npx playwright install
2. Authentification (étape manuelle)
Si scripts/state.json est manquant ou expiré, le scraper échouera. Vous devez demander à l'utilisateur humain d'exécuter le script d'authentification manuellement :
cd @path/scripts
node auth.js
Dites à l'utilisateur qu'un navigateur s'ouvrira et qu'il doit se connecter. Playwright enregistrera automatiquement les cookies/tokens dans state.json.
3. Exécution du scraper quotidien
Pour récupérer de nouvelles entreprises et offres :
cd @path/scripts
node scraper.js
Ce script affichera exactement combien de nouvelles entreprises et de nouvelles offres ont été trouvées. Grâce à jobs.db, l'exécuter plusieurs fois de suite donnera 0 new jobs found.
4. Interrogation de la base de données
Si vous devez analyser les données récupérées ou visualiser les entreprises/offres, vous pouvez interroger scripts/jobs.db directement en utilisant better-sqlite3.
Exemple : Compter les entreprises
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);"
Exemple : Voir les offres récentes
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);"