[Project] DE Toy Project - 데이터 수집(쿠팡 크롤링과 병렬 처리) 3

지난 포스팅에서 이어집니다.

 

[Project] DE Toy Project - 데이터 수집(쿠팡 상품 리뷰 크롤링) 1

지난 포스팅에서 이어집니다. [Project] DE Toy Project - 데이터 수집(네이버 쇼핑 리뷰 크롤링 삽질하기)1. 프로젝트 주제이번 프로젝트의 목표는 사용자가 검색한 상품에 대한 준 실시간 리뷰 요약

tjlog-tistory.tistory.com

 

이번 포스팅에서는 쿠팡 크롤링과 병렬 처리를 구현한 내용과 소소한 팁을 작성했습니다.

 

1. 프로젝트 목표

이번 프로젝트는 쿠팡 상품의 기본 정보 및 리뷰 데이터를 수집하여, 이후 텍스트 분석을 위한 데이터 파이프라인을 구축하는 과정을 정리한 기록입니다. 단순 크롤링이 아닌 병렬 처리, 데이터 저장, 후속 분석 작업까지 연결된 전체 흐름을 목표로 삼았습니다.

 

 

2. 환경 및 수집 데이터

2.1 사용한 로컬 PC 사양

  • window 11
  • 8코어 CPU
  • 32GB RAM

2.2 수집한 데이터

  • 상품 정보
    • 상품명, 가격, 카테고리, 상품 코드, 별점 등
  • 리뷰 정보
    • 작성자, 날짜, 별점, 리뷰 본문

 

 

3. 크롤링 및 병렬 처리 파이프라인

⚠️ 크롤링 전 주의사항

  • 쿠팡은 크롤링을 기본적으로 차단하고 있습니다.
  • 잘못된 방식의 접근은 법적 문제가 발생할 수 있으며, 본 프로젝트는 순수 학습 목적의 연구로, 데이터는 상업적으로 사용하지 않습니다.
  • 크롤링 속도 제한, 접속 주기 조절, 정중한 접근 방식 준수 등 사이트에 무리가 가지 않는 범위 내에서 작업을 수행했습니다.

 

3.1 크롤링 단계별 흐름

  1. 상품 기본 정보 추출
    • 상품명, 가격, 카테고리, 상품 코드, 별점, 리뷰 수 등
  2. 상품 기본 정보 저장
    • 로컬에 CSV 형태 저장 (추후 Google Cloud SQL 이관 예정)
  3. 리뷰 추출
    • 작성자, 날짜, 별점, 리뷰 내용 등
  4. 리뷰 저장
    • 로컬에 parquet 포맷으로 저장 (추후 Google Cloud Storage 업로드 예정)

 

3.2 병렬 처리 흐름

  1. 검색어로 쿠팡에서 상품 검색
  2. 검색 결과의 상품 URL 리스트 추출
  3. 추출된 URL 리스트를 4개의 멀티 프로세스에 분배
  4. 각 프로세스가 해당 URL에서 크롤링 진행 (상품 정보 + 리뷰)

 

3.3 구현 코드

https://github.com/ih-tjpark/DE_Toy_Project/tree/main/crawling_api/crawling

 

DE_Toy_Project/crawling_api/crawling at main · ih-tjpark/DE_Toy_Project

data engineering toy project. Contribute to ih-tjpark/DE_Toy_Project development by creating an account on GitHub.

github.com

 

 

4. 크롤링 & 병렬 처리 꿀팁 정리

4.1 크롤링 팁

  • 정적 vs 동적 컨텐츠 구분
    • HTML 소스에 바로 보이면 정적 → requests도 가능 (하지만 대부분 대형 사이트는 requests 요청 차단)
    • 스크립트로 로딩된다면 동적 → Selenium or playwright 같은 web driver 필수
  • CSS_SELECTOR 사용 권장
    • XPath는 페이지 구조 변경에 취약
  • 동적 요소 로딩 대기
    • time.sleep() 또는 WebDriverWait()으로 적절한 시간 대기
  • IP 차단 피하기
    • 대형 사이트는 Cloud IP, VPN, Proxy, 비정상 헤더는 차단됨
    • time.sleep을 특정 시간이 아닌 random 시간으로 주기
    • selenium으로 접속 불가할 경우 undetected seleinum 사용해보는 것 추천
    • User-Agent 변경 필수 (fake-useragent 사용 추천)

 

4.2 병렬 처리 팁

  • 프로세스 수는 CPU 기준으로 설정
    • 일반적으로 CPU 개수 - 1 또는 CPU // 2
  • 프로세스 종료는 finally에서 명시
    • 프로세스 종료 시점에 확실하고 안전하게 리소스 회수 해야함
  • 값 공유는 Manager, Queue 사용
    • 상태 공유 및 작업 진행 체크 가능
  • Selenium Driver 경로 명시 필수
    • Selenium 사용하는 멀티프로세싱은 Driver 경로 명시 안하면 충돌 가능성 높음
  • 성능 모니터링 도구
    • time.perf_counter() → 실행 시간
    • psutil → CPU 사용량
    • top, htop → 실시간 리소스 확인

 

 

5. 앞으로 해야 할 일

🔍 데이터 분석 모델 구상

  • 텍스트 요약 모델 구상
  • 감정 분석 모델 구상

🛠️ 데이터 처리

  • Spark 기반 데이터 전처리
  • 모델 인풋 포맷에 맞는 텍스트 정제 및 분류

🌐 Web 구현

  • FastAPI 기반 Backend 서버 구성
  • 간단한 Front 화면 구성 → 분석 결과 시각화 예정

 

 

6. 결론 및 후기

크롤링, 병렬 처리, 데이터 저장까지 이어지는 데이터 파이프라인의 전체 흐름을 로컬 환경 기반으로 구현해보면서, 단순한 수집 이상의 엔드 투 엔드 구성 경험을 쌓을 수 있었습니다. 또한 병렬처리를 통해 최소 4배 이상의 수집 속도 향상을 체감할 수 있었습니다. 앞으로 적절한 상황에서 병렬처리를 적용할 수 있도록 좀 더 경험을 쌓아가야겠습니다.

 

다음에는 분석 모델 테스트, Spark를 활용해 모델 인풋에 맞는 처리 작업과 분석 결과에 대한 처리 작업 등을 진행해보겠습니다.