채용 사이트(사람인, 잡코리아, 원티드)에서 기업 정보를 검색하고 홈페이지를 방문하여 담당자 이메일을 자동으로 수집하는 웹 크롤러입니다.
- 멀티 소스 지원: 사람인, 잡코리아, 원티드 3사 크롤링 지원
- 이메일 자동 추출: 기업 홈페이지 탐색 후 연락처(이메일) 자동 수집
- 콜드메일 품질 필터 (v1.1):
- 🚫 스팸트랩/수신불가 주소 자동 제거 (
noreply@,abuse@,postmaster@등) - 🏢 솔루션사/호스팅/빌더 도메인 차단 (cafe24, imweb, wix 등 — 사이트 푸터의 제3자 주소)
- 🔁 크롤링 세션 내 중복 이메일 제거 (여러 회사에서 반복되는 주소 = 제작사 공용 주소)
- 🎯 회사 도메인 일치 + 개인 주소 우선 정렬 → 대표 이메일 자동 선정
- ✅ MX 레코드 검증으로 반송 확정 도메인 제거 (dnspython)
- 🏷️ 이메일 유형 라벨 (개인/일반 × 회사도메인/무료메일/타도메인) + 발송권장(Y) 컬럼 — 발송 전 검수용
- 🚫 스팸트랩/수신불가 주소 자동 제거 (
- 실시간 내보내기:
- 📥 CSV 파일 다운로드
- 📊 Google Sheets(구글 시트) 바로 저장
- Backend: Python, FastAPI
- Frontend: HTML5, CSS3, Vanilla JS
- Crawling:
httpx(비동기 HTTP 요청)BeautifulSoup4(HTML 파싱)Playwright(동적 페이지 처리)
- Integration:
gspread(Google Sheets API)
pip install -r requirements.txt
playwright install chromiumpython server.py브라우저에서 http://localhost:8000 접속
구글 시트로 데이터를 바로 내보내려면 Google Cloud Service Account 설정이 필요합니다.
- Google Cloud Console 접속 및 프로젝트 생성
- "Google Sheets API" 검색 후 [사용(Enable)] 클릭
- IAM 및 관리자 > 서비스 계정 메뉴 이동
- [+ 서비스 계정 만들기] 클릭하여 계정 생성
- 생성된 계정 클릭 > [키] 탭 > [키 추가] > [새 키 만들기] (JSON)
- 다운로드된 JSON 파일 보관
다운로드 받은 JSON 파일의 내용 전체를 환경 변수로 등록해야 합니다.
- 변수명:
GOOGLE_CREDENTIALS_JSON - 값:
{"type": "service_account", ...}(JSON 파일 내용 전체)
Railway 배포 시: Variables 탭에서 위 변수를 추가하면 됩니다.
- 데이터를 저장할 구글 시트 생성
- 크롤러의 [구글 시트] 버튼 클릭 시 나오는 봇 이메일 복사
- 구글 시트의 [공유] 버튼 클릭 후 봇 이메일을 **'편집자'**로 추가
email/
├── server.py # FastAPI 서버 메인
├── requirements.txt # 의존성 목록
├── crawlers/ # 크롤러 모듈
│ ├── base.py # 베이스 클래스
│ ├── saramin.py # 사람인 크롤러
│ ├── jobkorea.py # 잡코리아 크롤러
│ ├── wanted.py # 원티드 크롤러
│ └── email_extractor.py # 이메일 추출 로직
├── utils/
│ └── google_sheets.py # 구글 시트 연동 유틸리티
└── static/ # 프론트엔드 리소스
├── index.html
├── style.css
└── app.js
수집된 이메일로 영리 목적 광고성 메일을 보낼 때는 다음을 지켜야 합니다.
- 제목 앞에
(광고)표기 필수 - 본문에 발신자 명칭·연락처 명시
- 수신거부 방법을 한글로 안내하고, 수신거부 시 즉시 처리
- 수신거부 의사를 밝힌 주소로 재발송 금지 (위반 시 과태료)
- 신규 도메인 워밍업: 첫 주 일 10
20통부터 시작해 24주에 걸쳐 점진 증량 - 반송률 5% 미만 유지: 본 크롤러의 MX 검증이 1차 필터이나, 발송 전 이메일 검증 서비스 병행 권장
- SPF / DKIM / DMARC 레코드 설정 필수
- 메인 도메인 대신 발송 전용 보조 도메인 사용 권장 (평판 격리)
- 시트의 "대표 이메일 유형" 컬럼으로 발송 전 검수:
개인(회사도메인)>일반(회사도메인)순으로 응답률이 높고,타도메인주소는 제3자(홈페이지 제작사 등)일 수 있어 제외 권장
MIT License