Skip to content

Latest commit

 

History

21 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📧 Email Crawler

채용 사이트(사람인, 잡코리아, 원티드)에서 기업 정보를 검색하고 홈페이지를 방문하여 담당자 이메일을 자동으로 수집하는 웹 크롤러입니다.

✨ 기능

  • 멀티 소스 지원: 사람인, 잡코리아, 원티드 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)

🚀 실행 방법

1. 의존성 설치

pip install -r requirements.txt
playwright install chromium

2. 서버 실행

python server.py

3. 접속

브라우저에서 http://localhost:8000 접속

📊 구글 시트 연동 설정 (Google Sheets)

구글 시트로 데이터를 바로 내보내려면 Google Cloud Service Account 설정이 필요합니다.

1. 구글 서비스 계정 키 발급

  1. Google Cloud Console 접속 및 프로젝트 생성
  2. "Google Sheets API" 검색 후 [사용(Enable)] 클릭
  3. IAM 및 관리자 > 서비스 계정 메뉴 이동
  4. [+ 서비스 계정 만들기] 클릭하여 계정 생성
  5. 생성된 계정 클릭 > [키] 탭 > [키 추가] > [새 키 만들기] (JSON)
  6. 다운로드된 JSON 파일 보관

2. 환경 변수 설정

다운로드 받은 JSON 파일의 내용 전체를 환경 변수로 등록해야 합니다.

  • 변수명: GOOGLE_CREDENTIALS_JSON
  • : {"type": "service_account", ...} (JSON 파일 내용 전체)

Railway 배포 시: Variables 탭에서 위 변수를 추가하면 됩니다.

3. 시트 공유

  1. 데이터를 저장할 구글 시트 생성
  2. 크롤러의 [구글 시트] 버튼 클릭 시 나오는 봇 이메일 복사
  3. 구글 시트의 [공유] 버튼 클릭 후 봇 이메일을 **'편집자'**로 추가

📁 프로젝트 구조

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

⚠️ 콜드메일 발송 시 주의사항

수집된 이메일로 영리 목적 광고성 메일을 보낼 때는 다음을 지켜야 합니다.

법적 요건 (정보통신망법 제50조)

  • 제목 앞에 (광고) 표기 필수
  • 본문에 발신자 명칭·연락처 명시
  • 수신거부 방법을 한글로 안내하고, 수신거부 시 즉시 처리
  • 수신거부 의사를 밝힌 주소로 재발송 금지 (위반 시 과태료)

발신 도메인 평판 관리

  • 신규 도메인 워밍업: 첫 주 일 1020통부터 시작해 24주에 걸쳐 점진 증량
  • 반송률 5% 미만 유지: 본 크롤러의 MX 검증이 1차 필터이나, 발송 전 이메일 검증 서비스 병행 권장
  • SPF / DKIM / DMARC 레코드 설정 필수
  • 메인 도메인 대신 발송 전용 보조 도메인 사용 권장 (평판 격리)

타겟 품질

  • 시트의 "대표 이메일 유형" 컬럼으로 발송 전 검수: 개인(회사도메인) > 일반(회사도메인) 순으로 응답률이 높고, 타도메인 주소는 제3자(홈페이지 제작사 등)일 수 있어 제외 권장

📝 License

MIT License

About

이메일 크롤러

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages