GN⁺: Playwright를 이용한 슈퍼마켓 가격 추적
(sakisv.net)슈퍼마켓 가격 추적하기
- 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 형식으로 제공되어 스크래핑이 더 신뢰성 있음