피드로 돌아가기
Dev.toBackend
원문 읽기
200만 페이지 무차단 수집을 달성한 Anti-Detection 스크레이퍼 설계
I Built a Bulletproof Web Scraper That Hasn't Been Blocked in 6 Months — Here's Every Trick I Use
AI 요약
Context
기존의 단순 HTTP 요청 기반 스크레이퍼는 JavaScript 렌더링 부재와 일관된 TLS Fingerprint로 인해 Cloudflare 등 보안 솔루션에 쉽게 탐지됨. 특히 고정된 Header 구성과 비인간적인 요청 패턴으로 인한 403 Forbidden 에러 및 IP Ban 발생이 주요 병목 지점으로 분석됨.
Technical Solution
- Playwright 기반 Headless Chromium 채택을 통한 JavaScript 렌더링 및 실제 브라우저 TLS Stack 구현
- Sec-Ch-Ua 및 Sec-Fetch- 계열을 포함한 15개 이상의 Full Chrome-like Headers 동적 생성으로 Fingerprinting 우회
- 2~8초 사이의 Random Delay와 분당 요청 수(RPM) 제한을 적용한 HumanRateLimiter 설계를 통한 행동 패턴 모사
- httpx 라이브러리 도입을 통한 HTTP/2 프로토콜 지원 및 비동기 I/O 처리로 네트워크 효율성 확보
- 도메인별 차단 상태를 감지하여 요청을 중단하는 Circuit Breaker 패턴 적용으로 IP 생존율 향상
Impact
- 6개월간 단 한 차례의 차단 없이 200만 페이지 이상의 데이터 수집 성공
- 단순 Header 최적화만으로 기초적인 봇 탐지 로직의 70% 우회 가능
- 수동 데이터 수집 대비 연간 약 $31,200 규모의 운영 비용 절감 효과 창출
Key Takeaway
웹 스크레이핑의 핵심은 단순한 데이터 추출이 아니라 대상 서버가 기대하는 '인간 사용자의 네트워크 시그니처'를 얼마나 정밀하게 모사하느냐에 따른 신뢰성 확보에 있음.
실천 포인트
- User-Agent 외에 Sec-Ch-Ua, Accept-Language 등 브라우저 고유 Header 세트 일치 여부 검토 - 고정된 Interval이 아닌 정규분포 기반의 Random Sleep 적용 여부 확인 - 단순 requests 라이브러리 대신 TLS Fingerprint 우회가 가능한 Playwright 또는 httpx 사용 고려 - 대규모 확장 시 Residential Proxy 회전 및 Redis 기반 Task Queue 도입 검토