YC Jobs Scraper
Dieses Skill bietet eine robuste Architektur zum Scrapen von Jobs von YCombinator und workatastartup.com. Es ist darauf ausgelegt, automatisch zu laufen, Login-Engpässe zu umgehen und einen Zustand zu verwalten, um niemals doppelte Jobs zu scrapen.
Architektur
Der Scraper verwendet einen hybriden Ansatz, um die Zuverlässigkeit zu maximieren und die Erkennung durch Bots zu minimieren:
- Authentifizierung:
scripts/auth.jsverwendet Playwright, damit ein Mensch sich einmal einloggen kann, und speichert die Sitzung inscripts/state.json. - Datenbank:
scripts/db.jsverwendetbetter-sqlite3zur Verwaltung vonscripts/jobs.db. Es verfolgt jeden jemals gesehenencompany_slugundjob_id. - Primäre Extraktion:
scripts/scraper.jslädtstate.json, besucht YC-Abfrage-URLs und extrahiert Unternehmens-Slugs aus dem versteckten Inertia.jsdata-pageJSON-Payload. - Job-Extraktion (JSON): Anschließend besucht es die authentifizierten Unternehmensseiten (
/companies/[slug]) und extrahiert Jobs aus dem Backend-JSON-Payload, um die echtejob_idfür eine genaue Deduplizierung zu erhalten. - Job-Extraktion (Fallback): Falls die JSON-Extraktion fehlschlägt, greift es auf das Parsen öffentlicher HTML-Jobkarten von
ycombinator.com/companies/[slug]/jobszurück.
Arbeitsabläufe
1. Ersteinrichtung
Wenn der Scraper zum ersten Mal in einer Umgebung ausgeführt wird oder node_modules fehlt:
cd @path/scripts
npm install
npx playwright install
2. Authentifizierung (manueller Schritt)
Wenn scripts/state.json fehlt oder abgelaufen ist, schlägt der Scraper fehl. Sie müssen den menschlichen Benutzer anweisen, das Authentifizierungsskript manuell auszuführen:
cd @path/scripts
node auth.js
Teilen Sie dem Benutzer mit, dass ein Browser geöffnet wird und er sich einloggen muss. Playwright speichert die Cookies/Token automatisch in state.json.
3. Ausführen des täglichen Scrapers
Um nach neuen Unternehmen und Jobs zu scrapen:
cd @path/scripts
node scraper.js
Dieses Skript gibt genau aus, wie viele neue Unternehmen und neue Jobs gefunden wurden. Aufgrund von jobs.db führt eine mehrmalige Ausführung zu 0 new jobs found.
4. Abfragen der Datenbank
Wenn Sie die gescrapten Daten analysieren oder die Unternehmen/Jobs anzeigen möchten, können Sie scripts/jobs.db direkt mit better-sqlite3 abfragen.
Beispiel: Unternehmen zählen
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);"
Beispiel: Neueste Jobs anzeigen
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);"