2P by neo 1달전 | favorite | 댓글 1개

슈퍼마켓 가격 추적하기

  • 2022년 12월, 그리스의 세 개 주요 슈퍼마켓의 가격 변동을 추적하기 위해 웹사이트를 구축함.
  • 이 과정에서 여러 가지 문제를 해결해야 했으며, 많은 교훈을 얻음.

Scraping js 사이트

  • 주요 문제는 자바스크립트로 렌더링되는 웹사이트.
  • Playwright를 사용하여 웹 브라우저를 프로그래밍적으로 제어함.
  • Playwright는 Chromium, Safari, Firefox 브라우저를 지원하며, Node, Java, .NET, Python과 함께 사용할 수 있음.
  • 무한 스크롤을 처리하고 제품 정보를 추출하는 코드 작성.

자동화

  • M1 MacBook Pro에서 전체 슈퍼마켓을 스크래핑하는 데 50분에서 2시간 30분이 소요됨.
  • 개발 및 테스트에는 좋았지만, 더 영구적인 솔루션이 필요했음.

오래된 노트북 사용?

  • 2013년의 오래된 노트북을 사용해 보았으나 성능이 매우 실망스러웠음.

클라우드 사용?

  • AWS는 너무 비쌌고, Hetzner는 훨씬 저렴했음.
  • Hetzner의 서버를 사용하기로 결정함.

오래된 노트북과 클라우드 사용!

  • 클라우드 서버에서 스크래핑을 자동화하고, 오래된 노트북은 CI 서버로 사용.
  • Concourse를 사용하여 파이프라인을 설정하고, 매일 스크래핑 작업을 실행함.

IP 제한 회피

  • Akamai 방화벽 규칙으로 인해 비거주 IP 주소에서의 요청이 차단됨.
  • Tailscale을 사용하여 요청이 집 IP 주소에서 오는 것처럼 보이게 함.

실패 원인 및 시기

  • 스크래핑 프로젝트는 웹사이트 개발자에 의해 영향을 받음.
  • 두 가지 실패 유형: 브레이킹 체인지와 비브레이킹 체인지.
  • 피드백을 빨리 받는 것이 중요함.

최적화

  • 이메일 알림, 히스테릭스, 타임아웃, 재시도 설정 등 다양한 최적화 작업을 수행함.
  • 더 큰 서버 사용과 데이터 페치 감소로 성능을 개선함.

비용

  • Hetzner에서 서버 사용 비용은 매우 저렴함.
  • Cloudflare의 R2 무료 티어를 사용하여 데이터 저장 비용을 절감함.

결론

  • 슈퍼마켓 가격 변동을 추적하기 위해 스크래핑 파이프라인을 구축한 주요 구성 요소를 설명함.

GN⁺의 정리

  • 이 글은 슈퍼마켓 가격 변동을 추적하기 위해 Playwright와 클라우드 서비스를 활용한 경험을 공유함.
  • 자바스크립트로 렌더링되는 웹사이트를 스크래핑하는 방법과 자동화 및 최적화 방법을 다룸.
  • Hetzner와 Tailscale을 사용하여 비용을 절감하고 IP 제한을 회피하는 방법을 설명함.
  • 이 글은 웹 스크래핑과 자동화에 관심 있는 사람들에게 유용할 수 있음.
Hacker News 의견
  • 비슷한 문제를 겪은 경험 공유

    • 30개국에서 렌즈 가격 비교 웹사이트 운영 중
    • 웹사이트의 HTML 변경이 큰 문제임
    • 100개 이상의 웹사이트에서 제품 매칭이 초기 큰 장애물
    • 정규 표현식으로 대부분 처리 가능하지만, 수동으로 매핑 필요
    • 스크래퍼와 인프라 구축은 쉬운 편, 유지보수가 어려움
    • 제품이 사라질 때 오류 원인 파악이 어려움
    • 재미있는 프로젝트지만 도전적이고 귀찮은 문제 해결 필요
  • 뉴질랜드에서 유사한 프로젝트 진행 중

    • Playwright와 Typescript 사용, 클라우드 스토리지에 파케이 파일 저장
    • 데이터 수집만 하고 아직 표시하지 않음
    • Akamai와 Cloudflare 같은 역방향 프록시 서비스 우회가 주요 작업
    • 뉴질랜드에서 최소 3개의 스타트업이 같은 작업 수행 중
    • 인플레이션이 많은 혁신을 자극함
    • 슈퍼마켓이 가격을 복잡하게 만드는 패턴 관찰
  • 유사한 웹사이트를 만들어 많은 관심을 받음

    • Linode 서버에서 2GB RAM, 5 IPv4, 1000 IPv6 사용
    • 모든 제품을 최대 40분 간격으로 스크래핑
    • curl impersonate와 JSON 스크래핑 사용
    • 90%의 시장이 Ajax 호출로 가격 제공, 나머지 10%는 정규 표현식 사용
    • 웹사이트: economizafloripa.com.br
  • 호주의 두 주요 슈퍼마켓이 가격 분석 AI 알고리즘을 통해 독점 가능성

    • AI 알고리즘이 협력하여 이익 극대화 가능
    • 공공 가격 데이터를 통해 합법적으로, 공급 비용이나 제품당 이익 데이터를 공유하여 불법적으로 가능
    • 소비자는 최대화된 이익을 지불하게 됨
  • 스웨덴 시장에서 8년 이상 활동 중

    • 웹사이트: matspar.se
    • 고객이 모든 주요 온라인 상점의 제품을 비교하고 장바구니에 추가 가능
    • 총 가격 비교 후 원하는 상점으로 장바구니 내보내기 가능
    • 매일 3천만 개 이상의 가격 스크래핑
  • 가격 투명성이 있으면 추적이 더 쉬워질 것

    • 예: 다른 우편번호와 식료품점에서 귀리 우유 가격 비교
    • "Shrinkflation" 추적 가능성 (같은 가격에 더 작은 양 제공)
    • 가격뿐만 아니라 그램당 비용도 확인 필요
  • 스크래퍼가 실패하지 않도록 변경하는 방법

    • 가격이 비정상적으로 변하지 않도록 자동 검사 추가 가능
    • 예: 가격이 100% 이상 변하지 않도록, 활성 제품 수가 20% 이상 변하지 않도록
  • 새로운 지역으로 이사할 때 가격 추적 경험 공유

    • 두 개의 시장이나 대형 상점에서 저렴한 가격으로 쇼핑하는 것이 더 쉬움
    • 유럽: Aldi/Lidl, 미국: Costco/Trader Joe's
    • 온라인: CamelCamelCamel/Amazon
    • 제조업체에서 직접 구매가 더 저렴할 수 있음
  • 스크래핑보다 점점 더 정교해지는 차단기를 우회하는 것이 어려움

    • 주거용 프록시를 지속적으로 회전시키고 데이터 스크래핑 패턴을 피해야 함
    • 일부 슈퍼마켓은 네트워크 요청을 숨김
    • 모바일 앱에서 네트워크 요청과 데이터를 확인하는 것도 차단됨
    • 비용과 지속적인 개발 작업 때문에 가치가 없다고 판단
  • 클라이언트 측 자바스크립트로 렌더링되는 문제

    • 아이러니하게도 사이트를 채우는 데이터가 간단한 JSON 형식으로 제공되어 스크래핑이 더 신뢰성 있음