피드로 돌아가기
Dev.toInfrastructure
원문 읽기
AWS Lambda 기반 Playwright 활용 Dynamic Page 스크래핑 및 Parquet 파이프라인 구축
Scraping dynamic pages with Python, Playwright and AWS Lambda
AI 요약
Context
JavaScript 렌더링 기반의 동적 페이지에서 BeautifulSoup으로는 전체 데이터 수집이 불가능한 한계 직면. 스크롤 이벤트에 따른 DOM 변경과 Lazy Loading으로 인해 단순 HTML 파싱이 아닌 브라우저 제어 기반의 데이터 추출 필요성 대두.
Technical Solution
- AWS Lambda 환경의 제약 사항 극복을 위해
--disable-gpu,--no-sandbox,--single-process등 Chromium 플래그를 설정하여 브라우저 실행 안정성 확보 - 전체 페이지가 아닌 실제 데이터가 적재되는
.joblist-container요소에 타겟팅하여 스크롤 이벤트를 발생시키는 정밀 제어 구조 설계 - 중복 데이터 수집 방지를 위한
handled_jobsSet 기반의 상태 관리 및 특정 Sentinel 문구 탐지 시 루프를 종료하는 결정론적 종료 조건 구현 - 무한 루프 방지를 위한
max_scrolls하드 캡(300회)을 설정하여 사이트 레이아웃 변경 시에도 시스템 안정성 유지 - Polars DataFrame을 활용한 타입 정규화 및 Parquet 포맷 변환으로 S3 저장 효율성 및 쿼리 성능 최적화
- AWS Glue Crawler 연동을 고려한
year=X/month=Y형태의 S3 Partitioning 구조를 적용하여 다운스트림 분석 효율성 증대
실천 포인트
1. Lambda 내 Chromium 실행 시 공유 메모리 및 샌드박스 제한을 회피하는 필수 실행 플래그 적용 여부 확인
2. 동적 페이지 스크래핑 시 전체 페이지 스크롤이 아닌 실제 데이터 렌더링 컨테이너를 식별하여 제어
3. Sentinel 기반 종료 조건과 최대 반복 횟수(Hard Cap)를 동시 설정하여 예외 상황에 대비한 타임아웃 방지
4. 분석용 데이터 수집 시 CSV 대신 Parquet 포맷을 사용하고 S3 파티션 경로를 설계하여 Athena/Spark 쿼리 비용 최적화