Chrome CDP로 실제 로그인 상태를 재사용해 BOSS直聘의 명문 급여를 추출하는 경량 크롤러
Chrome DevTools Protocol로 로컬 로그인 세션을 재사용해 BOSS直聘 검색 API에서 명문(salaryDesc)을 가져와 JSON/CSV와 분석을 생성하는 Python 기반 크롤러이다.
TL;DR
이 프로젝트는 로컬에서 실행 중인 실제 Chrome의 DevTools Protocol을 재사용해 BOSS直聘 검색 API에서 salaryDesc 같은 명문 급여 필드를 직접 얻는 경량 크롤러이다. 로컬 전용 프로파일을 만들어 로그인 상태를 보존하고 페이지 내에 JS를 주입해 동기 XHR로 API를 호출하므로 폰트 난독화로 인한 DOM 기반 급여 왜곡을 우회한다. 수집 결과는 JSON/CSV로 저장되며 scripts/job_summary.py로 급여 분포·스킬 빈도·이력서 최적화용 프롬프트를 자동 생성할 수 있다. 사용자는 Python 3.10+와 Chrome 환경을 준비해야 하며 본 도구는 BOSS直聘 이용 약관과 관련 법규를 준수하지 않는 용도로 사용해서는 안 된다는 면책 조항이 명시되어 있다.
주요 기능
- 명문 급여를 직접 추출해 JSON 및 CSV로 출력한다. 검색 API의 salaryDesc 필드를 활용해 폰트 기반 난독화의 영향을 받지 않는 급여 값을 확보한다. 이 데이터는 이후 집계나 시각화에 바로 활용 가능한 형태로 저장된다.
- 상세 페이지의 직무 설명과 기술 태그를 수집하고 빈도 기반으로 스킬 분석을 생성한다. 수집 후 scripts/job_summary.py를 통해 급여 분포와 고빈도 스킬, JD 빈도 등을 집계하는 요약을 자동으로 만들 수 있다. 요약은 모델용 프롬프트 텍스트로도 출력 가능하다.
- 로컬에 격리된 전용 Chrome 프로파일을 만들어 로그인 상태를 보존하고 CDP로 연결한다. 이 방식은 사용자의 실제 지문과 세션을 재사용하므로 Selenium/Playwright 같은 제어 브라우저보다 지문 노출과 캡차 트리거 위험을 낮춘다. 필요시 주 브라우저의 쿠키 파일만 선택적으로 복사할 수 있는 옵션을 제공한다.
- 증분 저장을 적용해 각 페이지 수집 후 즉시 파일에 기록하고 job_id로 중복 제거를 수행한다. 이 동작은 프로세스가 중단되어도 이미 수집한 데이터를 잃지 않도록 설계되어 있다. 또한 --merge 옵션으로 기존 데이터와 병합할 수 있다.
- 광역 필터와 지역 코드를 자동 동기화해 300개 이상의 도시를 지원한다. --list-cities 옵션으로 도시 검색이 가능하며 지역별 페이징을 통해 특정 1~5선 도시까지 폭넓게 수집할 수 있다. 페이지 수 상한과 포맷(json/csv) 선택으로 수집량을 제어할 수 있다.
어떻게 동작하는가
이 도구는 로컬에서 실행 중인 Chrome의 DevTools Protocol에 연결해 이미 로그인된 세션을 재사용함으로써 브라우저 지문과 쿠키를 유지한다. 크롤러는 페이지 내에 JavaScript를 주입해 동기 XHR로 사이트의 검색 API를 호출하고 API 응답에서 salaryDesc와 같은 명시적 급여 필드를 바로 읽는다. API 결과가 없을 때에만 --allow-dom-fallback 옵션으로 DOM 기반 추출로 낮추며, 추출된 각 페이지는 즉시 파일로 기록하고 job_id 기준 중복 제거가 적용된다.
해결 문제
브라우저 렌더링이나 커스텀 폰트로 인해 DOM에서 추출한 급여가 난독화되어 정확한 금액을 얻기 어려운 문제를 해결한다. 로컬 실제 로그인 상태를 CDP로 재사용해 검색 API를 호출하면 API가 반환하는 명문 salaryDesc를 직접 확보하므로 폰트 복호화나 OCR이 불필요하다. 또한 증분 저장과 상세 페이지 스킬 분석을 결합해 데이터 수집의 신뢰성과 후처리 활용도를 높인다.
차별점
- Selenium/Playwright 기반의 제어 브라우저 대신 로컬의 실제 로그인 Chrome 세션을 CDP로 재사용하므로 브라우저 지문 노출을 줄이고 캡차·풍압(풍향) 트리거 위험을 낮춘다.
- 검색 API의 salaryDesc를 우선 사용하여 폰트 난독화로부터 영향을 받지 않는 급여값을 얻는 점이 핵심 차별점이며, --allow-dom-fallback을 통해 필요 시에만 DOM 추출을 허용한다.
- 수집 직후 증분적으로 파일에 기록하고 job_id로 중복을 제거하는 워크플로를 제공하므로 대량 수집 시 재시작과 데이터 보전 측면에서 안정성이 우수하다.
사용 사례
- 직군·지역별 급여 분포와 핵심 스킬 빈도를 빠르게 집계해 리포트 자료를 만드는 데 활용할 수 있다. 수집된 JSON/CSV는 추가 통계·시각화 파이프라인에 바로 연동 가능하며 구인·구직 트렌드 분석에 직접 활용된다. job_summary.py를 통해 즉시 모델 프롬프트용 텍스트를 생성해 이력서 최적화에 쓸 수 있다.
- 채용 담당자가 특정 지역·경력·산업의 공고 샘플을 수집해 채용 공고 문구와 요구 스킬을 분석하는 데 활용할 수 있다. 상세 JD와 스킬 태그 빈도를 활용해 채용 공고 개선이나 스크리닝 키워드를 정의할 수 있다. 정기 실행을 통해 시간 흐름에 따른 스킬 수요 변화를 모니터링할 수 있다.
- 데이터 저널리즘이나 노동시장 연구에서 특정 직무군의 급여 분포 및 지역 편차를 실증적으로 수집하는 용도로 활용할 수 있다. API 기반 수집으로 표기된 급여 값을 확보하므로 표본의 정확도가 상대적으로 높다. 대규모 샘플링을 통해 통계적 분석과 시각화에 필요한 원자료를 빠르게 얻을 수 있다.
시작하기
레포지토리를 클론한 뒤 Python 3.10 이상 환경에서 requirements.txt를 설치하면 기본 실행 환경이 갖춰진다. 최초 실행으로 python3 scripts/boss_cdp_raw.py --setup-chrome 명령을 사용해 전용 Chrome 프로파일을 생성하고 BOSS直聘에 로그인하면 이후 CDP를 통해 검색 API 호출이 가능해진다. 그다음 python3 scripts/boss_cdp_raw.py --keyword "AI Agent" --city 上海 --pages 3 --analysis 같은 명령으로 데이터 수집과 분석을 한 번에 수행할 수 있다.
요구사항
- Python 3.10 이상 런타임이 필요하다. README의 배지와 설치 가이드에서 Python 3.10+가 요구사항으로 명시되어 있다.
- 로컬에 설치된 Chrome과 DevTools Protocol(CDP) 접근 권한이 필요하다. 도구는 로컬 Chrome의 전용 격리 프로파일을 생성해 로그인 상태를 저장하므로 Chrome 실행 환경이 필수이다.
- 지원 플랫폼은 macOS와 Linux이며 Windows 코드는 분기 존재하지만 README에서 Windows는 미검증 상태로 표기되어 있다. 따라서 Linux/macOS 환경에서의 동작이 보장된 상태이다.
941
Stars
123
Forks
+209
Trending
0
조회수
관련 토론
아직 관련 토론이 없습니다.
댓글
댓글을 작성하려면 로그인이 필요합니다.