스크래핑

프록시로 Amazon 제품 데이터(가격, 리뷰, 순위) 스크래핑하는 방법

마켓플레이스별로 Amazon 제품 데이터, 가격, 리뷰, 순위를 스크래핑하는 실용적인 가이드와 레지덴셜 프록시가 이를 가능하게 하는 이유를 알아봅니다.

Chris Collins

Chris Collins

2026년 7월 13일 · 6 분 소요

Amazon은 오픈 웹에서 가장 큰 상품 데이터셋이며, 이를 스크래핑하는 것, 즉 가격, 리뷰, 순위, 재고 여부는 가격 모니터링, 디지털 셀프 분석, 시장 조사, 경쟁 인텔리전스를 뒷받침합니다. 동시에 Amazon은 스크래퍼를 겨눌 만한 사이트 중 가장 공격적으로 방어되는 사이트이기도 합니다. 설정을 잘못하면 몇 번의 요청 만에 “Robot Check” 페이지, 503 오류, 또는 잘못된 국가의 데이터를 마주하게 됩니다.

이 글은 이를 제대로 수행하는 실용적인 가이드입니다. Amazon 상품 페이지에서 무엇을 가져올 수 있는지, 왜 적절한 인프라 없이는 실패하는지, 그리고 레지덴셜 프록시를 통해 이를 깨끗하게 수집하는 방법을 다룹니다. 짧게 말하면, Amazon은 마켓플레이스별로 지역이 나뉘어 있고 봇에 엄격하므로, 올바른 국가의 실제 구매자처럼 요청해야 하며, 이것이 바로 레지덴셜 프록시가 존재하는 이유입니다.

Amazon 상품 페이지에서 스크래핑할 수 있는 것

Amazon 리스팅에는 공개된 구조화 데이터가 밀집되어 있습니다. 팀들이 가장 많이 수집하는 필드는 다음과 같습니다.

  • 가격 및 딜 정보 — 현재 가격, 정가, 할인, 쿠폰.
  • 재고 및 바이박스 — 재고 여부, 그리고 어떤 판매자가 바이박스를 차지하는지.
  • 베스트셀러 순위(BSR) — 카테고리 내 Amazon 순위로, 수요를 나타내는 지표.
  • 평점 및 리뷰 — 별점, 리뷰 수, 리뷰 텍스트.
  • 상품 상세정보 — 제목, 불릿 포인트, 설명, 이미지, 옵션(variations), 사양.
  • 판매자 정보 — 오퍼에 있는 판매자 및 배송 정보.

이 모든 것은 공개 페이지에 있습니다. 문제는 Amazon이 당신이 어디에 있는 것처럼 보이는지, 그리고 실제 구매자처럼 보이는지에 따라 어떤 페이지를 보여줄지 결정한다는 점입니다.

Amazon이 어려운 이유: 프록시 문제다

Amazon의 세 가지 특성이 스크래핑을 프록시 계층에서 해결해야 하는 접근 문제로 만듭니다.

Amazon은 마켓플레이스별로 나뉘어 있고, 지역별로 개인화되어 있습니다. Amazon은 국가별로 별도의 마켓플레이스를 운영합니다. amazon.com, amazon.de, amazon.co.uk, amazon.co.jp 각각 가격, 재고, 판매자, 심지어 카탈로그까지 다릅니다. 게다가 단일 마켓플레이스 내에서도 구매자의 위치에 따라 가격과 배송이 개인화됩니다. 미국 IP로 amazon.de를 요청하면 리다이렉트가 발생하거나, 다른 경험을 보게 되거나, 독일 구매자라면 절대 보지 못할 재고 정보를 볼 수 있습니다. 마켓플레이스를 정확히 캡처하려면 해당 국가에서 접속해야 하며, 이것이 국가 및 도시 타겟팅이 존재하는 이유입니다.

Amazon은 봇을 강력하게 방어합니다. 데이터센터 IP는 빠르게 감지되어 CAPTCHA “Robot Check”, 503, 또는 속도 제한을 받게 되므로, 실제 구매자의 페이지가 아니라 봇 버전을 기록하게 됩니다. (스크래퍼가 차단되는 이유에서 그 메커니즘을 다룹니다.) 레지덴셜 IP는 실제 사용자 신뢰도를 가지므로 Amazon이 실제 리스팅을 제공합니다.

커버리지는 대량이며 반복적입니다. 매일 여러 마켓플레이스에서 많은 ASIN을 추적하는 것은 많은 요청을 발생시킵니다. 소수의 IP만으로는 빠르게 속도 제한에 걸려 불완전하고 차단으로 가득한 샘플을 얻게 됩니다. 크롤링을 완전하게 유지해주는 것은 대규모 로테이팅 풀입니다.

세 가지 모두에 대한 해법은 동일합니다. 마켓플레이스의 국가와 일치하는 레지덴셜 IP에서, 대규모로 로테이션하며 요청하는 것입니다.

1단계: 올바른 국가의 레지덴셜 IP를 통해 라우팅하기

Shifter 게이트웨이에서는 프록시 사용자 이름에 국가를 인코딩하여 선택할 수 있으며, 하나의 엔드포인트만 있으면 되고 IP 목록은 필요 없습니다. 프록시 국가를 마켓플레이스 도메인과 일치시키세요: amazon.com은 미국 IP에서, amazon.de는 독일 IP에서.

Terminal window
# amazon.com as a US shopper
curl -x customer-USERNAME-country-us:PASSWORD@p.shifter.io:443 \
"https://www.amazon.com/dp/B0EXAMPLE"
# amazon.de as a German shopper
curl -x customer-USERNAME-country-de:PASSWORD@p.shifter.io:443 \
"https://www.amazon.de/dp/B0EXAMPLE"

모든 상품에는 안정적인 ASIN(/dp/ASIN URL의 B0... 코드)이 있으므로, ASIN 목록을 확보하면 URL 패턴은 마켓플레이스 전체에서 예측 가능합니다.

2단계: 코드로 가져오고 파싱하기

Amazon 상품 데이터는 대부분 초기 HTML에 있으므로 브라우저가 필요한 경우는 거의 없으며, 일반 HTTP 클라이언트가 더 빠르고 대역폭 측면에서도 훨씩 저렴합니다. Python으로 구조를 보면 다음과 같습니다(전체 클라이언트 설정은 Python으로 레지덴셜 프록시 사용하기 참고).

import os, requests
from bs4 import BeautifulSoup
USER, PASS = os.environ["SHIFTER_USER"], os.environ["SHIFTER_PASS"]
GATEWAY = "p.shifter.io:443"
def proxy(country="us"):
url = f"http://{USER}-country-{country}:{PASS}@{GATEWAY}"
return {"http": url, "https": url}
def scrape_product(asin, country="us", tld="com"):
url = f"https://www.amazon.{tld}/dp/{asin}"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
"Accept-Language": "en-US,en;q=0.9",
"Accept-Encoding": "gzip, br",
}
r = requests.get(url, headers=headers, proxies=proxy(country), timeout=30)
r.raise_for_status()
soup = BeautifulSoup(r.text, "html.parser")
title = soup.select_one("#productTitle")
price = soup.select_one(".a-price .a-offscreen")
rating = soup.select_one("#acrPopover")
return {
"asin": asin,
"title": title.get_text(strip=True) if title else None,
"price": price.get_text(strip=True) if price else None,
"rating": rating["title"].strip() if rating and rating.has_attr("title") else None,
}
print(scrape_product("B0EXAMPLE", country="us", tld="com"))

셀렉터보다 더 중요한 두 가지가 있습니다. 프록시 국가와 일치하는 현실적인 User-AgentAccept-Language를 전송하는 것, 그리고 Amazon의 마크업이 바뀔 것을 예상하고 모든 셀렉터를 선택적으로 취급하며 추출한 데이터를 검증하는 것입니다. 리뷰의 경우 리뷰 페이지를 요청하고 페이지네이션하고, BSR의 경우 보통 “제품 정보(Product information)” / 상세 섹션에 있습니다.

3단계: 로테이션하고, 도움이 되는 곳에서는 세션을 유지하기

  • 많은 ASIN에 걸친 광범위한 카탈로그 스크래핑에는 요청마다 로테이션하세요. 세션 id를 생략하면 각 요청이 새로운 IP를 받습니다.
  • 단일 상품의 리뷰를 페이지네이션하거나 다단계 흐름을 진행할 때는 고정 세션을 유지하여 시퀀스가 한 명의 구매자처럼 보이도록 하세요. 사용자 이름에 -sid-<id>-ttl-<seconds>를 추가하세요.

IP 품질이 실제 페이지를 볼지 Robot Check를 볼지를 결정하므로, IP 신뢰도를 이해하면 크롤링을 깨끗하게 유지할 수 있습니다.

4단계: 차단을 처리하고 대역폭을 낮게 유지하기

Amazon이 CAPTCHA/Robot Check나 503을 제공할 때는 강하게 밀어붙이지 말고, 새로운 IP로 로테이션하고, 백오프한 뒤 재시도하세요. 간헐적이지 않고 지속적인 차단은 IP 품질이나 요청 동작을 가리키며, 이는 스크래핑 시 차단을 피하는 방법에서 다룹니다.

페이지가 실제로 JavaScript를 필요로 해서 브라우저를 사용해야 한다면, 이미지, 미디어, 폰트를 차단하여 절대 파싱하지 않을 픽셀에 대해 GB당 비용을 지불하지 않도록 하세요. 이 기법은 프록시 대역폭 비용을 줄이는 방법에 있습니다. 대부분의 Amazon 상품 필드에는 일반 HTTP만으로도 충분하고 가장 저렴합니다.

책임감 있게 사용하기

공개된 상품 데이터, 즉 어떤 구매자든 볼 수 있는 리스팅, 가격, 평점, 리뷰 텍스트만 스크래핑하고, 개인 데이터는 피하세요. 리뷰어 신원과 리뷰에 첨부된 모든 개인정보는 대상이 아닙니다. Amazon의 이용약관과 속도 제한을 준수하고, 사이트 성능을 저하시키지 마세요. Amazon의 서비스 약관이 자동화된 접근을 제한한다는 점을 인지하고, 수집을 공개 데이터로 제한하며 불확실한 부분에 대해서는 법률 자문을 받으세요(웹 스크래핑은 합법인가 참고). 프록시는 요청이 오는 IP를 바꿀 뿐, 그 요청을 해야 하는지 여부를 바꾸지는 않습니다. Shifter에서 허용되는 것에 대한 신뢰할 수 있는 기준은 허용 사용 정책입니다.

FAQ

프록시 없이 Amazon을 스크래핑할 수 있나요? 어떤 규모에서도 안정적으로는 불가능합니다. Amazon은 데이터센터 및 반복 IP 트래픽을 CAPTCHA와 503으로 빠르게 감지하며, 한 국가의 마켓플레이스만 보게 될 것입니다. 레지덴셜 프록시를 사용하면 각 대상 국가에서 실제 구매자처럼 요청할 수 있습니다.

왜 프록시 국가가 마켓플레이스와 일치해야 하나요? Amazon 마켓플레이스는 국가별로 나뉘어 있고 지역별로 개인화되기 때문입니다. 미국 IP로 amazon.de를 요청하면 리다이렉트가 발생하거나 독일 구매자가 보지 못할 데이터를 보여줄 수 있습니다. 정확한 데이터를 위해 IP 국가를 도메인과 일치시키세요(amazon.de는 DE IP에서).

Amazon에는 헤드리스 브라우저가 필요한가요? 보통은 필요하지 않습니다. 가격, 제목, 평점, 재고 여부와 같은 대부분의 상품 필드는 초기 HTML에 있으므로, 일반 HTTP 요청이 더 빠르고 대역폭 측면에서 훨씩 저렴합니다. 브라우저는 실제로 JavaScript에 의존하는 페이지에만 사용하세요.

Amazon에는 레지덴셜 프록시와 데이터센터 프록시 중 무엇이 좋나요? 레지덴셜입니다. Amazon은 데이터센터 IP를 공격적으로 감지하고 차단하므로, 데이터센터 프록시는 Robot Check와 503을 초래합니다. 레지덴셜 IP는 실제 구매자가 보는 실제 지역 정확 리스팅을 볼 수 있습니다.

Amazon을 스크래핑하는 것은 합법인가요? 공개된 상품 데이터는 일반적으로 공개적으로 노출되어 있으며, 약관과 속도 제한을 준수하고 개인 데이터를 피하며 책임감 있게 수행한다면 대체로 문제가 없습니다. Amazon의 서비스 약관은 자동화된 접근을 제한하므로, 공개 데이터로만 제한하고 불확실한 부분에는 법률 자문을 받으세요. 프록시는 기본 활동의 합법성을 바꾸지 않습니다.

결론

Amazon은 공개 상품 데이터의 보고이지만, 마켓플레이스별로 나뉘어 있고, 지역별로 개인화되어 있으며, 차단당하지 않고 스크래핑하기 가장 어려운 사이트 중 하나입니다. 방법은 간단합니다. 마켓플레이스의 국가와 일치하는 레지덴셜 IP를 통해 라우팅하고, 현실적인 클라이언트로 HTML을 가져오고, 방어적으로 파싱하고, 대규모로 로테이션하며, Robot Check에는 더 강하게 밀어붙이는 대신 IP를 전환하여 대응하세요. 이렇게 하면 추적하는 모든 마켓플레이스에서 구매자가 보는 실제 가격, 리뷰, 순위를 얻을 수 있습니다.

성패를 가르는 요소는 IP 품질입니다. 깨끗한 레지덴셜 IP는 Robot Check 대신 실제 리스팅을 의미합니다. 품질 좋은 레지덴셜 프록시 네트워크는 Amazon 스크래핑을 신뢰할 수 있게 만드는 접근 계층이며, 가격 모니터링디지털 셀프 분석을 뒷받침하는 것과 동일한 기반입니다. 가격 페이지에는 관심 있는 ASIN과 마켓플레이스를 대상으로 테스트해볼 수 있는 GB당 요금제가 있습니다.

시작할 준비가 되셨나요?

205M개 이상의 IP, 195개 이상의 국가를 지원하는 Shifter의 레지덴셜 프록시를 $0.75/GB부터 이용해보세요.

시작하기