🐨CoalaCoding
Docs▾
JavaScriptReactHTML & CSSBackendAI & LLMDev ToolsCreative
B반1
👾숏츠
🙉B반2
게시판
🐨CoalaCoding

디지털 크리에이터를 위한 한국어 기술 문서

문서

  • JavaScript
  • React
  • HTML & CSS
  • Backend
  • AI & LLM
  • Dev Tools
  • Creative

커뮤니티

  • 게시판
  • 예제 모음

기타

  • 관리자

정책

  • 소개
  • 개인정보처리방침
  • 이용약관
  • 연락처
© 2026 CoalaCoding. All rights reserved.
  • 1. 허깅페이스 무료 Inference API - OTT 앱 활용 가이드
  • 1. 사진수집
  • 2. 네이버 영화 리뷰 크롤링
  • 3. PPT작성
  • 4. 이메일전송
  • 5. 파이썬 챗봇 만들기
  • 6. 주식분석보고서
  • 99. 구인업체 데이터 수집 크롤러 만들기 (바이브 코딩)
  1. 홈
  2. 문서
  3. Backend
  4. Python 프로젝트
  5. 99. 구인업체 데이터 수집 크롤러 만들기 (바이브 코딩)

99. 구인업체 데이터 수집 크롤러 만들기 (바이브 코딩)

Gemini CLI나 Claude에게 프롬프트로 시켜서 잡코리아·사람인 크롤러를 직접 실행하는 방법을 배운다. 파이썬 가상환경 세팅부터 결과 Excel 확인까지 단계별로 따라간다.

Claude나 Gemini 같은 AI에게 시켜서 잡코리아·사람인 채용공고 크롤러를 직접 실행해 본다. 파이썬을 한 줄도 써 본 적이 없어도 프롬프트만 잘 주면 완성된 Excel 파일을 받을 수 있다.

1. 준비물

항목설명
컴퓨터맥·윈도우·리눅스 모두 가능
Python 3.10+python.org에서 설치
AI 도구Claude 또는 Gemini CLI
VS Codecode.visualstudio.com (선택)

2. 파이썬 "가상환경" 만들기

프로젝트마다 독립된 파이썬 환경을 쓰면 패키지 충돌을 막을 수 있다. 상자를 따로 두는 느낌이다.

# 1) 작업 폴더 만들기
mkdir ~/crawler && cd ~/crawler

# 2) 가상환경 생성
python3 -m venv .venv

# 3) 활성화
source .venv/bin/activate

# 프롬프트 앞에 (.venv) 가 붙으면 성공
# 1) 작업 폴더 만들기
mkdir $HOME\crawler
cd $HOME\crawler

# 2) 가상환경 생성
python -m venv .venv

# 3) 활성화
.venv\Scripts\Activate.ps1

# 실행 정책 오류가 나면 한 번만:
# Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
mkdir %USERPROFILE%\crawler
cd %USERPROFILE%\crawler

python -m venv .venv
.venv\Scripts\activate.bat

2-1. 패키지 설치

가상환경이 활성화된 상태에서 실행한다.

pip install requests beautifulsoup4 lxml openpyxl
`pip` 명령이 없다는 오류가 나면 가상환경 활성화가 안 된 것이다. 프롬프트 앞에 `(.venv)` 가 있는지 확인한다.

3. AI 도구 준비

# 설치 (Node.js 필요)
npm install -g @google/gemini-cli

# 로그인 (브라우저가 열린다)
gemini auth login

# 실행 — 대화창이 열린다
gemini

장점: 터미널 안에서 파일 읽기·쓰기·실행까지 AI가 해준다. 단점: Node.js 설치 필요.

claude.ai 에서 바로 쓸 수 있다.

  1. 가입 후 새 대화 시작
  2. 아래 프롬프트를 복사해 붙여넣기
  3. 받은 코드를 crawler.py 로 저장
  4. 터미널에서 python crawler.py 실행

장점: 설치 불필요, 긴 코드도 잘 쓴다. 단점: 파일 저장·실행은 직접 해야 한다.

4. 잡코리아 크롤러 프롬프트

역할: 30년차 풀스택 개발자

작업: 잡코리아 채용공고를 자동 수집해 Excel 파일로 저장하는
     파이썬 크롤러를 작성한다.

수집 조건:
- 직무 코드(duty): 1000255(웹디자이너), 1000256(UI·UX디자이너)
  → CONFIG 딕셔너리로 만들어 쉽게 변경할 수 있게 한다
- 지역: 서울 전지역(local=I010001)
- 경력: 신입(careerType=1)
- 확인한 공고 제외(filter=1)

수집 방법:
- URL: https://www.jobkorea.co.kr/Search/
- 페이지 파라미터 이름은 Page_No (페이지당 20개)
- HTML 안 self.__next_f.push([1,"..."]) 블록에서 JSON 데이터를 이중 디코딩
- "JOB_LIST queryKey" 이전에 위치한 마지막 totalElements를 선택
  (가장 큰 값은 전체 공고 수 69만건이라 잘못된 값이다)

후처리 필터:
- areaCodeList에 서울 구 코드(I010~I250)가 있는 공고만 남긴다
  (areaCodeList가 None일 수 있으니 "or []" 로 방어)
- receptionOptionType 마지막 자리가 "1"이면 홈페이지 지원이라 제외
- ThreadPoolExecutor(max_workers=8)로 직원수 병렬 조회
- 직원수 10명 이상만 남긴다 (미확인은 포함)

출력:
- openpyxl로 Excel 저장: 헤더 고정·자동필터·하이퍼링크 포함
- 파일명: 잡코리아_YYYYMMDD.xlsx
- 컬럼: 공고제목, 회사명, 직원수, 지역, 마감일, 링크

제약:
- 요청 간 time.sleep(0.3) 딜레이
- User-Agent 헤더 실제 브라우저 값
- 파일은 하나로 (crawler.py)

작성 후 잠재 버그를 검토하고 실행 방법을 알려달라.
직무나 지역을 바꾸고 싶으면 프롬프트 **맨 위 조건 부분만** 바꿔서 다시 보내면 된다. 예를 들어 "프론트엔드개발자(1000230)만" 또는 "경력 3년 이상(careerType=2)" 으로.

4-1. 주요 직무 코드 목록

코드직무
1000248그래픽디자이너
1000252광고디자이너
1000253시각디자이너
1000255웹디자이너
1000256UI·UX디자이너
1000258편집디자이너
1000250일러스트레이터
1000230프론트엔드개발자
1000245웹퍼블리셔
1000279웹기획
1000188PL·PM·PO
1000388영상편집자

5. 사람인 크롤러 프롬프트

역할: 30년차 풀스택 개발자

작업: 사람인 채용공고를 자동 수집해 Excel 파일로 저장하는
     파이썬 크롤러를 작성한다.

수집 조건:
- 직무 코드(cat_kewd): 1502(웹디자인), 1690(UI/UX)
  → CONFIG 딕셔너리로 만들어 쉽게 변경할 수 있게 한다
- 지역: 서울 전지역(loc_mcd=101000)
- 경력: 신입(exp_cd=1)

수집 방법:
- URL: https://www.saramin.co.kr/zf_user/search/recruit
- 페이지 파라미터 이름은 recruitPage (주의: "page"가 아니다!)
- 페이지당 40개
- BeautifulSoup으로 .item_recruit 엘리먼트를 파싱
- 공고마다 rec_idx, title, company, csn, conditions 추출
- .sri_btn_homepage_apply 엘리먼트가 있으면 홈페이지 지원(제외 대상)

후처리 필터:
- conditions[0]이 "서울전체"인 공고는 제외 (구 단위 공고만 남김)
- 홈페이지 지원 공고는 제외
- 기업정보 페이지(csn 필요)에서 사원수 조회:
  URL: https://www.saramin.co.kr/zf_user/company-info/view?csn={csn}
  p.company_summary_desc 텍스트가 "사원수"인 li에서 strong.company_summary_tit
- ThreadPoolExecutor(max_workers=8)로 병렬 조회
- 직원수 10명 이상만 남긴다

출력:
- openpyxl로 Excel 저장: 헤더 고정·자동필터·하이퍼링크 포함
- 파일명: 사람인_YYYYMMDD.xlsx
- 컬럼: 공고제목, 회사명, 직원수, 지역, 고용형태, 마감일, 링크

제약:
- 요청 간 time.sleep(0.3) 딜레이
- User-Agent 헤더 실제 브라우저 값
- 파일은 하나로 (crawler.py)

작성 후 잠재 버그를 검토하고 실행 방법을 알려달라.

5-1. 주요 cat_kewd 코드 목록

코드직무
1484그래픽디자인
1483광고디자인
1496시각디자인
1502웹디자인
1519편집디자인
1504일러스트레이터
1690UI/UX
92프론트엔드
91퍼블리셔
1637웹기획
1649PM
1373영상편집

6. 통합 크롤러 프롬프트 (잡코리아 + 사람인)

두 사이트 결과를 하나의 Excel로 합치고 싶을 때 쓴다.

역할: 30년차 풀스택 개발자

작업: 잡코리아와 사람인에서 같은 조건의 채용공고를 수집한 뒤
     결과를 하나의 Excel에 통합해 저장한다.

수집 조건:
- 직무: 웹디자이너 + UI/UX
  * 잡코리아 duty: 1000255, 1000256
  * 사람인 cat_kewd: 1502, 1690
- 지역: 서울 (서울전체 표기 공고 제외 → 구 단위만)
- 경력: 신입
- 홈페이지 지원 제외
- 사원수 10명 이상

모듈 구조 (파일 3개):
1. jobkorea.py  — 잡코리아 크롤러
2. saramin.py   — 사람인 크롤러
3. merge.py     — 진입점. 두 크롤러를 호출한 뒤 결과를 합쳐 Excel 저장

통합 시 스키마:
- 공통 컬럼: 출처(jobkorea/saramin), 공고제목, 회사명, 직원수,
            지역, 경력, 마감일, 링크
- 중복 판단: (회사명 + 공고제목) 이 같으면 중복
  → 중복은 '출처' 컬럼에 "jobkorea, saramin" 처럼 함께 표기

출력:
- 파일명: 통합채용공고_YYYYMMDD.xlsx
- 시트 3개: [전체통합], [잡코리아원본], [사람인원본]
- 전체통합 시트는 직원수 오름차순 정렬
- 상위 탭에 요약 정보(수집일·총건수·사이트별 건수)

제약:
- 사이트별 크롤러는 병렬이 아닌 순차 실행 (차단 방지)
- 같은 사이트 안에서만 ThreadPoolExecutor 사용
- 작성 후 잠재 버그 검토 및 실행 방법 안내

7. 실행하기

AI에게서 받은 코드를 crawler.py 로 저장한 뒤 실행한다.

# 가상환경이 활성화된 상태에서
python crawler.py

진행 상황이 터미널에 출력된다. 종료되면 같은 폴더에 Excel 파일이 생긴다.

============================================================
  잡코리아 직무별 채용공고 크롤러
============================================================
  [페이지   1/40] 20개 (20개 신규) | 누적   20개
  [페이지   2/40] 20개 (20개 신규) | 누적   40개
  ...
  → 수집 완료: 782개
  → 서울 구 필터 후: 523개
  → 홈페이지지원 제외 후: 498개
  직원수 병렬 조회 (workers=8)...
    직원수 확인 100/498
    ...
  → 최종 471개
  Excel 저장: 잡코리아_20260417.xlsx

8. 오류가 나면 AI에게 다시 시키기

에러 메시지를 그대로 복사해 AI에게 보내면 된다.

아래 에러를 수정해라:

Traceback (most recent call last):
  File "crawler.py", line 123, in has_gu_address
    return any(c in SEOUL_GU_CODES for c in codes)
TypeError: 'NoneType' object is not iterable

문제가 된 줄: codes = job.get("areaCodeList", [])

AI가 job.get("areaCodeList") or [] 로 수정해 준다.

사람인 크롤러가 페이지를 넘겨도 같은 공고만 반복해서 수집한다.
params에 "page"를 쓰고 있는데 문제인지 확인해라.

AI가 page → recruitPage 로 수정해 준다.

잡코리아 크롤러에서 총 건수가 69만건으로 나오는데 실제는 훨씬 적다.
__next_f.push 블록에서 totalElements를 여러 개 찾은 뒤
"가장 큰 값"을 선택하고 있는데 이게 잘못된 것 같다.
"JOB_LIST queryKey 이전에 위치한 마지막 totalElements"를 쓰도록 고쳐라.

AI가 파싱 로직을 고친다.

크롤링 중 429 Too Many Requests 에러가 뜬다.
- time.sleep 간격을 0.3초에서 0.8초로 늘려라
- ThreadPoolExecutor max_workers를 8에서 4로 줄여라
- User-Agent 헤더를 최신 크롬 값으로 갱신해라

9. 조건 바꾸기

수집 조건을 바꾸고 싶으면 AI에게 간단히 요청하면 된다.

현재 코드는 웹디자이너 대상이다.
직무를 프론트엔드개발자(잡코리아 1000230, 사람인 92)로 바꿔라.
신입이 아니라 경력 3~5년으로 바꿔라.
- 잡코리아: careerType=2, careerMin=3, careerMax=5
- 사람인:   exp_cd=2 (+ 경력연차 파라미터 확인)
서울이 아니라 경기도로 바꿔라.
- 잡코리아: local 파라미터로 경기도 코드 찾아라
- 사람인:   loc_mcd 경기도 코드로 바꿔라
직원수 필터를 10명 이상에서 50명 이상으로 바꿔라.
CONFIG 딕셔너리의 min_employees 값만 고치면 되는 구조여야 한다.

10. 보안·윤리

크롤링은 상대 서버에 부담을 주는 행위다. 아래 원칙을 지킨다.

  • robots.txt 를 확인하고 허용 범위를 지킨다
  • 사이트 이용약관의 크롤링 조항을 준수한다
  • 수집한 데이터를 재배포하지 않는다
  • 요청 간격을 두고 서버 부담을 최소화한다
  • 개인정보(이메일·전화번호)는 수집·저장하지 않는다
  • 상업적 용도로 사용하지 않는다

11. 참고 자료

  • Gemini CLI 공식
  • Claude
  • Python 공식 다운로드
  • 가상환경 공식 문서
  • requests 공식 문서
  • BeautifulSoup 공식 문서
  • openpyxl 공식 문서

목차

  • 1. 준비물
  • 2. 파이썬 "가상환경" 만들기
  • 2-1. 패키지 설치
  • 3. AI 도구 준비
  • 4. 잡코리아 크롤러 프롬프트
  • 4-1. 주요 직무 코드 목록
  • 5. 사람인 크롤러 프롬프트
  • 5-1. 주요 cat_kewd 코드 목록
  • 6. 통합 크롤러 프롬프트 (잡코리아 + 사람인)
  • 7. 실행하기
  • 8. 오류가 나면 AI에게 다시 시키기
  • 9. 조건 바꾸기
  • 10. 보안·윤리
  • 11. 참고 자료