# Playwright를 이용한 슈퍼마켓 가격 추적

> Clean Markdown view of GeekNews topic #16212. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=16212](https://news.hada.io/topic?id=16212)
- GeekNews Markdown: [https://news.hada.io/topic/16212.md](https://news.hada.io/topic/16212.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-08-07T18:34:38+09:00
- Updated: 2024-08-07T18:34:38+09:00
- Original source: [sakisv.net](https://www.sakisv.net/2024/08/tracking-supermarket-prices-playwright/)
- Points: 2
- Comments: 1

## Topic Body

#### 슈퍼마켓 가격 추적하기

- 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 제한을 회피하는 방법을 설명함.
- 이 글은 웹 스크래핑과 자동화에 관심 있는 사람들에게 유용할 수 있음.

## Comments



### Comment 27851

- Author: neo
- Created: 2024-08-07T18:34:38+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=41173335) 
- 비슷한 문제를 겪은 경험 공유
  - 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 형식으로 제공되어 스크래핑이 더 신뢰성 있음
