이 튜토리얼에서는 Bright Data와 생산 환경에 바로 적용 가능한 스크래핑 프로젝트를 활용해 Amazon 데이터를 추출하는 방법을 배웁니다.
다음 내용을 다룹니다:
- Amazon 스크레이퍼 API 사용 방법
- 프로젝트 설정 및 아마존 스크래핑 대상 구성
- 아마존 페이지 가져오기 및 렌더링
- 검색 및 상품 페이지에서 상품 데이터 추출
- 클로드 데스크톱을 활용한 브라이트 데이터 웹 MCP로 아마존 스크래핑하기
왜 아마존을 스크래핑해야 할까요?

아마존은 세계 최대의 제품 마켓플레이스이자 인터넷에서 실시간 상거래 데이터를 제공하는 가장 풍부한 소스 중 하나입니다. 가격 동향부터 고객 감정까지, 이 플랫폼은 다른 웹사이트가 따라잡기 어려운 규모로 시장 행동을 반영합니다.
아마존 스크래핑을 통해 팀은 수동 조사와 정적 데이터 세트를 넘어 대규모로 자동화된 데이터 기반 의사 결정을 가능하게 합니다.
아마존 스크래핑의 일반적인 활용 사례
기업과 개발자가 아마존을 스크래핑하는 가장 일반적인 이유는 다음과 같습니다:
- 가격 모니터링 및 경쟁 정보 수집: 카테고리와 판매자 전반에 걸쳐 제품 가격, 할인, 재고 현황을 거의 실시간으로 추적합니다.
- 시장 및 제품 연구: 제품 목록, 카테고리, 베스트셀러 순위를 분석하여 수요 동향과 새로운 기회를 파악합니다.
- 리뷰 및 감성 분석: 고객 리뷰와 평점을 수집하여 구매자 감성, 제품 성능, 기능적 격차를 파악합니다.
- AI 기반 애플리케이션: 쇼핑 어시스턴트, 동적 가격 모델, 자동화된 시장 분석 등의 작업을 위해 LLM 및 AI 에이전트에 실시간 아마존 데이터를 공급합니다.
사용 사례가 명확해진 만큼, 이제 Bright Data를 사용하여 아마존을 스크래핑하는 방법을 실용적으로 살펴보겠습니다.
Bright Data Amazon 스크레이퍼 API를 통한 아마존 데이터 수집
맞춤형 스크레이퍼 구축이나 Claude를 통한 MCP 사용 외에도 Bright Data는 관리형 Amazon Scraper API를 제공합니다. 인증을 위해 API 키가 필요합니다.
아마존 스크레이퍼 선택하기
Bright Data 스크레이퍼 라이브러리를 열어 시작하세요.
사용 가능한 스크레이퍼 목록에서 사용 사례에 맞는 Amazon 스크레이퍼를 선택하세요. 예를 들어:
- ASIN별 제품 상세 정보
- 검색 결과
- 리뷰
각 스크레이퍼는 특정 유형의 Amazon 데이터를 위해 설계되었습니다.
스크레이퍼 엔드포인트 선택
각 스크레이퍼는 원하는 데이터(예: 제품 상세 정보, 검색 결과, 리뷰)에 따라 서로 다른 엔드포인트를 제공합니다.
사용 사례에 맞는 엔드포인트를 클릭하세요.
요청 구성

중앙 패널에서 요청을 구성할 수 있는 양식이 표시됩니다:
- 단일 입력: 제품 URL, ASIN 또는 키워드를 붙여넣으세요.
- 대량 CSV: 일괄 처리를 위한 여러 입력이 포함된 CSV 파일을 업로드하세요.
선택적 설정: - 출력 스키마: 필요한 필드만 선택하세요.
- 외부 저장소: S3, GCS 또는 Azure를 설정하여 직접 전달받으세요.
- 웹훅 URL: 결과를 자동으로 수신할 웹훅 설정.
API 요청 수행
제품 페이지에 대한 curl 사용 기본 예시:
curl -i --silent --compressed "https://api.brightdata.com/dca/trigger?customer=hl_ee3f47e5&zone=YOUR_ZONE_NAME"
-H "Content-Type: application/json"
-H "Authorization: Bearer YOUR_API_KEY"
-d '{
"input": {
"url": "https://www.amazon.com/dp/B08L5TNJHG"
}
}'
YOUR_ZONE_NAME 과 YOUR_API_KEY를 실제 영역 및 API 키로 대체하십시오.
### 결과 가져오기
- 실시간 작업(최대 20개 URL)의 경우 결과를 바로 확인할 수 있습니다.
- 배치 작업의 경우, 결과를 확인하기 위한 작업 ID를 받거나 웹훅/외부 저장소를 통해 결과를 가져올 수 있습니다.
이제 Bright Data의 주거용 프록시를 사용하여 맞춤형 스크레이퍼를 구축하는 방법을 살펴보겠습니다.
프로젝트 설정
저장소에서 제공되는 프로젝트 코드를 사용하여 이 튜토리얼을 따라 할 수 있습니다.

시작하기 전에 시스템에 다음 필수 요소가 설치되어 있는지 확인하십시오.
필수 사항
이 프로젝트에는 다음이 필요합니다:
- Python 3.10 이상
- 의존성 관리를 위한 pip
- Node.js 18 이상 (Vercel 필수)
- Vercel CLI
추가로 다음이 필요합니다:
- Bright Data 계정
- Bright Data의 Web MCP 접근 권한
- Claude Desktop
의존성 설치
제공된 requirements.txt 파일을 사용하여 필요한 Python 종속성을 설치하십시오:
pip install -r requirements.txt
이렇게 하면 페이지 가져오기, 브라우저 자동화, HTML 파싱 및 데이터 추출에 사용되는 모든 라이브러리가 설치됩니다.
Bright Data CA 인증서
이 프로젝트는 프록시를 통해 요청을 라우팅할 때 TLS 검증을 위해 Bright Data CA 인증서를 사용합니다.
다음 경로에 인증서 파일이 존재하는지 확인하십시오:
certs/brightdata-ca.crt
이 파일은 요청 중에 HTTP 클라이언트로 전달됩니다. 이 파일이 없거나 잘못 참조된 경우 TLS 확인 오류로 인해 Amazon 요청이 실패합니다.
Vercel 설정
이 프로젝트는 Vercel 서버리스 함수로 실행되도록 설계되었습니다.
api/search.py 파일은 API 진입점 역할을 하며, Vercel이 들어오는 HTTP 요청에 응답하여 실행합니다.
Vercel CLI가 설치되고 인증되었는지 확인하십시오:
vercel login

환경 변수
이 프로젝트는 런타임 설정을 위해 환경 기반 구성을 사용합니다.
프로젝트 루트에 .env 파일을 생성하고 저장소에 명시된 대로 필요한 변수를 정의하세요. 이 값들은 스크레이퍼가 Amazon 페이지를 가져오고, 렌더링하고, 처리하는 방식을 제어합니다.
의존성 설치 및 환경 변수 구성이 완료되면 프로젝트를 사용할 준비가 된 것입니다.
프로젝트 구조 이해
스크레이퍼를 실행하기 전에 프로젝트가 어떻게 구성되어 있고 스크래핑 파이프라인이 시작부터 끝까지 어떻게 흐르는지 이해해야 합니다.
이 프로젝트는 명확한 책임 분담을 중심으로 구성됩니다.
구성
프로젝트의 이 부분은 Amazon 대상, 런타임 옵션 및 스크레이퍼 동작을 정의합니다. 이러한 설정은 스크레이핑 대상과 스크레이퍼의 작동 방식을 제어합니다.
페이지 가져오기 및 렌더링
프로젝트의 이 부분은 Amazon 페이지를 로드하고 사용 가능한 HTML을 반환하는 역할을 담당합니다. 다운스트림 로직이 완전히 렌더링된 콘텐츠로 작동할 수 있도록 탐색, 페이지 로딩 및 JavaScript 실행을 처리합니다.
추출 로직
HTML이 준비되면 추출 계층이 페이지를 파싱하여 구조화된 데이터를 추출합니다. 여기에는 아마존 검색 결과 페이지와 개별 상품 페이지 모두에 대한 로직이 포함됩니다.
실행 흐름
실행 흐름은 가져오기, 렌더링, 추출 및 출력을 조정합니다. 각 단계가 올바른 순서로 실행되도록 보장합니다.
출력 처리
스크랩된 데이터는 구조화된 형식으로 디스크에 기록되어 다른 워크플로에서 쉽게 검사하거나 활용할 수 있습니다.
이러한 구조는 스크레이퍼를 모듈화하여 개별 구성 요소를 재사용하기 쉽게 만듭니다. 특히 튜토리얼 후반부에 Bright Data의 Web MCP와 같은 외부 가져오기 방법을 통합할 때 유용합니다.
이 개요를 바탕으로 Amazon 타깃을 구성하고 스크레이퍼가 수집할 데이터를 정의할 수 있습니다.
Amazon 대상 구성
이 섹션에서는 다음 두 가지를 구성합니다:
- 스크래핑할 Amazon 검색 키워드
- Amazon 페이지를 성공적으로 가져오기 위해 필요한 Bright Data 자격 증명
1. 아마존 검색 키워드 전달
Amazon 키워드는 q라는 쿼리 매개변수를 통해 전송합니다.
이는 api/search.py에서 처리됩니다. API는 요청 URL에서 q를 읽고, q가 누락된 경우 즉시 중단합니다:
# api/search.py
query = query_params.get("q", [None])[0]
if not query:
self._send_json_response(400, {"error": "필수 매개변수 q 누락"})
return
이 코드의 의미:
엔드포인트를 호출할 때 반드시 ?q=... 형식을 사용해야 합니다.
q를 생략하면 400 응답을 받고 스크레이퍼가 실행되지 않습니다
원하는 상품 수 설정
선택적 limit 매개변수를 사용하여 반환할 상품 수를 제어할 수도 있습니다.
여전히 api/search.py에서 limit을 파싱하여 정수로 변환하고 안전한 범위로 제한합니다:
# api/search.py
limit_str = query_params.get("limit", [None])[0]
limit = DEFAULT_SEARCH_LIMIT
if limit_str:
try:
limit = int(limit_str)
limit = min(limit, MAX_SEARCH_LIMIT)
limit = max(1, limit)
except ValueError:
limit = DEFAULT_SEARCH_LIMIT
따라서:
제한값을 전달하지 않으면 기본값을 사용합니다.
잘못된 값을 전달하면 기본값으로 돌아갑니다.
허용된 값보다 큰 값이 전달되면 상한값으로 제한됩니다.
기본값과 최대값은 src/settings.py에 정의되어 있습니다:
# src/settings.py
DEFAULT_SEARCH_LIMIT = 10
MAX_SEARCH_LIMIT = 50
기본 동작을 변경하려면 여기서 수행합니다.
2. 쿼리를 Amazon 검색 엔드포인트에 매핑하기
q를 확보한 후, Bright Data를 통해 fetch_products(query, limit)로 Amazon 검색 결과를 가져옵니다:
# api/search.py
raw_response = fetch_products(query, limit)
스크래핑 대상 아마존 엔드포인트는 src/brightdata_client.py에 정의되어 있습니다:
# src/brightdata_client.py
AMAZON_SEARCH_URL = "https://www.amazon.com/s"
결과를 가져올 때 k 매개변수를 사용하여 키워드를 아마존에 전달합니다:
# src/brightdata_client.py
r = requests.get(
AMAZON_SEARCH_URL,
params={"k": query},
proxies=proxies,
headers=headers,
timeout=60,
verify=BRIGHTDATA_CA_CERT_PATH,
)
이는 다음을 의미합니다:
- API 매개변수는
q입니다 - 아마존의 검색 매개변수는
k입니다 - q=wireless headphones를 제공하면 요청은
https://www.amazon.com/s?k=wireless+headphones형태로 아마존에 전송됩니다

3. Bright Data 인증 정보 구성
Bright Data를 통해 요청을 전송하려면 환경 변수로 설정된 프록시 자격 증명이 필요합니다.
src/settings.py에서 다음과 같이 Bright Data 설정을 로드합니다:
# src/settings.py
BRIGHTDATA_USERNAME = os.getenv('BRIGHTDATA_USERNAME', '')
BRIGHTDATA_PASSWORD = os.getenv('BRIGHTDATA_PASSWORD', '')
BRIGHTDATA_PROXY_HOST = os.getenv('BRIGHTDATA_PROXY_HOST', 'brd.superproxy.io')
BRIGHTDATA_PROXY_PORT = os.getenv('BRIGHTDATA_PROXY_PORT', 'your_port)
.env 파일에 다음 자격 증명을 추가하세요:
BRIGHTDATA_USERNAME=your_brightdata_username
BRIGHTDATA_PASSWORD=your_brightdata_password
BRIGHTDATA_PROXY_HOST=brd.superproxy.io
BRIGHTDATA_PROXY_PORT=your_port
스크레이퍼를 실행할 때, 이 값들은 src/brightdata_client.py 내부에서 Bright Data 프록시 URL을 생성하는 데 사용됩니다:
# src/brightdata_client.py
proxy_url = (
f"http://{BRIGHTDATA_USERNAME}:{BRIGHTDATA_PASSWORD}"
f"@{BRIGHTDATA_PROXY_HOST}:{BRIGHTDATA_PROXY_PORT}")
proxies = {"http": proxy_url, "https": proxy_url}
BRIGHTDATA_USERNAME 또는 BRIGHTDATA_PASSWORD를 설정하지 않으면 스크레이퍼가 명확한 오류와 함께 조기에 실패합니다:
# src/brightdata_client.py
if not BRIGHTDATA_USERNAME or not BRIGHTDATA_PASSWORD:
raise ValueError(
"Bright Data 프록시 자격 증명이 설정되지 않았습니다. "
"BRIGHTDATA_USERNAME과 BRIGHTDATA_PASSWORD를 설정하세요."
)
키워드와 Bright Data 자격 증명을 구성했으므로 이제 Amazon 페이지를 가져올 준비가 되었습니다.
Amazon 페이지 가져오기
이 단계에서는 이미 입력값 검증이 완료되었고 Bright Data도 설정되었습니다. 이제 아마존 요청이 실행되는 위치와 최소한의 가정 사항에 집중합니다.
모든 Amazon 요청은 src/brightdata_client.py에서 전송됩니다.
Amazon 검색 엔드포인트
아마존 검색 엔드포인트를 한 번 정의하고 모든 검색 요청에 재사용합니다:
# src/brightdata_client.py
AMAZON_SEARCH_URL = "https://www.amazon.com/s"
요청 헤더
아마존이 표준 데스크톱 HTML 레이아웃을 반환하도록 보장하기 위해 일반적인 브라우저와 유사한 헤더를 전송합니다. 이 헤더는 사용자의 운영 체제와 관련이 없습니다.
# src/brightdata_client.py
headers = {
"User-Agent": (
"Mozilla/5.0 "
"AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/120.0 Safari/537.36"
),
"Accept-Language": "en-US,en;q=0.9",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
}
요청 전송
엔드포인트, 헤더, 프록시 구성이 이미 설정된 상태에서 Amazon 요청을 실행합니다:
# src/brightdata_client.py
response = requests.get(
AMAZON_SEARCH_URL,
params={"k": query},
proxies=proxies,
headers=headers,
timeout=60,
verify=BRIGHTDATA_CA_CERT_PATH,)
response.raise_for_status()
html = response.text or ""
이 호출이 완료되면 html에는 아마존 검색 페이지의 원본 콘텐츠가 포함됩니다.
페치 단계가 완료되었으므로 이제 HTML을 파싱하고 Amazon 검색 결과 페이지에서 제품 링크와 메타데이터를 추출할 수 있습니다.
검색 결과 추출
Amazon 검색 페이지가 가져온 후, 다음 단계는 반환된 HTML에서 제품 목록을 추출하는 것입니다. 이 전체 단계는 src/brightdata_client.py 내부에서 수행됩니다.
요청이 완료된 후, 원시 HTML을 내부 파서로 전달합니다:
products = _parse_amazon_search_html(html, limit=limit)
return {"products": products}
모든 검색 결과 추출 로직은 _parse_amazon_search_html 내부에서 구현됩니다.
HTML 파싱
먼저 BeautifulSoup을 사용하여 원시 HTML을 DOM 트리로 파싱합니다. 이를 통해 페이지 구조를 안정적으로 쿼리할 수 있습니다.
soup = BeautifulSoup(html, "lxml")
요청된 제한값을 정규화하여 항상 최소 한 개의 항목을 추출하도록 보장합니다:
max_items = max(1, int(limit)) if isinstance(limit, int) else 10
검색 결과 컨테이너 찾기
아마존 검색 페이지에는 상품 목록이 아닌 여러 요소가 포함됩니다. 실제 결과를 분리하기 위해 먼저 아마존의 주요 검색 결과 컨테이너를 대상으로 합니다:
containers = soup.select('div[data-component-type="s-search-result"]')
대안으로, 유효한 data-asin 속성을 포함하는 요소도 찾습니다:
fallback = soup.select('div[data-asin]:not([data-asin=""])')
주 선택자가 결과를 반환하지 않지만 대체 선택자가 결과를 반환하는 경우 대체 선택자로 전환합니다:
if not containers and fallback:
containers = fallback
이를 통해 실제 제품 항목에 한정된 추출을 유지하면서도 사소한 레이아웃 변동에 대한 복원력을 확보합니다.
결과 반복 처리
선택된 컨테이너를 반복 처리하며 요청된 한도에 도달하면 중지합니다:
products = []
for c in containers:
if len(products) >= max_items:
break
각 컨테이너에서 핵심 필드를 추출합니다. 제품 카드에 제목과 URL이 모두 포함되지 않은 경우 건너뜁니다.
title = _extract_title(c)
url = _extract_url(c)
if not title or not url:
continue
제품 필드 추출
각 상품 카드는 동일한 파일에 정의된 작은 헬퍼 함수들을 사용하여 파싱됩니다.
image = _extract_image(c)
rating = _extract_rating(c)
reviews = _extract_reviews_count(c)
price = _extract_price(c)
그런 다음 구조화된 제품 객체를 조립합니다:
products.append(
{
"title": title,
"price": price,
"rating": rating,
"reviews": reviews,
"url": url,
"image": image,
}
)
필드 추출 헬퍼
각 헬퍼는 하나의 필드에 집중하며 누락되거나 부분적인 마크업을 안전하게 처리합니다.
제목 추출
def _extract_title(container) -> str:
a = container.select_one('a.a-link-normal[href*="/dp/"]')
if a:
t = a.get_text(" ", strip=True)
if t:
return t
img = container.select_one("img.s-image")
alt = img.get("alt") if img else ""
return alt.strip() if isinstance(alt, str) else ""
제품 URL
def _extract_url(container) -> str:
a = container.select_one('a.a-link-normal[href*="/dp/"]')
href = a.get("href") if a else ""
if isinstance(href, str) and href:
return "https://www.amazon.com" + href if href.startswith("/") else href
return ""
이미지
def _extract_image(container) -> Optional[str]:
img = container.select_one("img.s-image")
src = img.get("src") if img else None
return src if isinstance(src, str) and src else None
평점
def _extract_rating(container) -> Optional[float]:
el = container.select_one("span.a-icon-alt")
text = el.get_text(" ", strip=True) if el else ""
if not text:
el = container.select_one('span:contains("out of 5 stars")')
text = el.get_text(" ", strip=True) if el else ""
if not text:
return None
m = re.search(r"(d+(?:.d+)?)", text)
return float(m.group(1)) if m else None
리뷰 수
def _extract_reviews_count(container) -> Optional[int]:
el = container.select_one("span.s-underline-text")
text = el.get_text(" ", strip=True) if el else ""
m = re.search(r"(d[d,]*)", text)
return int(m.group(1).replace(",", "")) if m else None
가격
def _extract_price(container) -> str:
whole = container.select_one("span.a-price-whole")
frac = container.select_one("span.a-price-fraction")
whole_text = whole.get_text(strip=True).replace(",", "") if whole else ""
frac_text = frac.get_text(strip=True) if frac else ""
if not whole_text:
return ""
return f"${whole_text}.{frac_text}" if frac_text else f"${whole_text}"
이 단계가 끝나면 아마존 검색 결과에서 직접 추출한 구조화된 상품 항목 목록을 얻게 됩니다.
각 항목에는 다음이 포함됩니다:
- title
- 가격
- 평점
- 리뷰
- 제품 URL
- 이미지 URL
검색 결과 추출이 완료되면, src/normalize.py에서 처리되는 응답의 정규화 및 반환 단계로 넘어갑니다.
응답 정규화
이 시점에서 검색 추출은 제품 객체를 반환하지만, 필드는 아직 표준화되지 않았습니다. 예를 들어, 가격은 여전히 문자열(“$129.99” 등)이고, 리뷰 수는 쉼표를 포함할 수 있으며, 카드에 따라 일부 필드가 누락될 수 있습니다.
API 응답을 일관되게 만들기 위해 src/normalize.py 내부에서 모든 것을 정규화합니다.
api/search.py에서는 원시 결과를 가져온 직후 정규화가 수행됩니다:
# api/search.py
normalized = normalize_response(raw_response, query)
이 단일 호출은 Bright Data의 원시 출력을 항상 다음과 같은 깔끔한 응답 형태로 변환합니다:
items: 정규화된 제품 객체 목록count: 반환된 항목 수
딕셔너리 응답 정규화
normalize_response는 여러 입력 유형을 지원합니다. API 흐름에서 fetch_products(...)로부터 {"products": [...]} 와 같은 딕셔너리를 전달합니다.
다음은 딕셔너리 분기 처리 코드입니다:
# src/normalize.py
if isinstance(raw_response, dict):
products = raw_response.get("products", []) or raw_response.get("items", [])
normalized_items = [normalize_product(p) for p in products if isinstance(p, dict)]
return {"items": normalized_items[:limit], "count": len(normalized_items[:limit])}
이 코드의 역할:
- products(또는 존재하는 경우 items)에서 제품을 읽습니다.
- 각 제품을 normalize_product를 사용하여 정규화합니다
- 일관된
{"items": [...], "count": N}페이로드를 반환합니다
단일 상품 정규화
각 제품은 normalize_product(...)로 정규화됩니다.
가격은 parse_price(...)를 사용하여 숫자 값과 통화 코드로 파싱됩니다 :
# src/normalize.py
price_str = raw_product.get("price", "")
price, currency = parse_price(price_str)
가능한 경우 평점은 부동 소수점으로 강제 변환됩니다:
# src/normalize.py
rating = raw_product.get("rating")
if rating is not None:
try:
rating = float(rating)
except (ValueError, TypeError):
rating = None
else:
rating = None
리뷰 수는 정수로 정규화되며, reviews 및 reviews_count 키 모두 지원됩니다:
# src/normalize.py
reviews_count = raw_product.get("reviews") or raw_product.get("reviews_count")
if reviews_count is not None:
try:
reviews_count = int(str(reviews_count).replace(",", ""))
except (ValueError, TypeError):
reviews_count = None
else:
reviews_count = None
마지막으로 표준화된 제품 객체를 반환합니다:
# src/normalize.py
return {
"title": raw_product.get("title", ""),
"price": price,
"currency": currency,
"rating": rating,
"reviews_count": reviews_count,
"url": raw_product.get("url", ""),
"image": raw_product.get("image"),
"source": "brightdata",
}
정규화가 완료되면 API에서 안전하게 반환할 수 있고 클라이언트가 쉽게 활용할 수 있는 일관된 아이템 목록을 확보하게 됩니다.
Vercel에서 스크레이퍼 실행하기
이 스크레이퍼는 Vercel 서버리스 함수로 실행됩니다. 로컬에서는 Vercel 개발 서버를 사용하여 api/ 경로가 프로덕션 환경과 동일하게 동작하도록 실행합니다.
Vercel로 로컬 실행
저장소 루트에서 개발 서버를 시작합니다:
vercel dev

기본적으로 서버는 다음 위치에서 시작됩니다:
http://localhost

이제 전체 스크래퍼 프로젝트가 준비되었습니다. 다양한 아마존 제품을 실행하고 스크래핑해 볼 수 있습니다.
또한 Bright Data MCP와 AI 에이전트를 사용해 스크래핑할 수도 있습니다. 간단히 어떻게 하는지 살펴보겠습니다.
Claude Desktop을 Bright Data의 Web MCP에 연결하기
Bright Data의 Web MCP 서버를 시작하도록Claude Desktop을 구성해야 합니다.
Claude Desktop 구성 파일을 엽니다.
설정(Settings)으로 이동하여 개발자 아이콘(Developer icon)을 클릭한 후 구성 편집(Edit Config)을 선택하세요. 그러면 Claude Desktop에서 사용하는 구성 파일이 열립니다.

다음 구성을 추가하고 YOUR_TOKEN_HERE를 본인의 Bright Data API 토큰으로 대체하세요:
{
"mcpServers": {
"brightdata": {
"command": "npx",
"args": ["-y", "@brightdata/mcp"],
"env": {
"API_TOKEN": "YOUR_TOKEN_HERE"
}
}
}
}
파일을 저장하고 Claude Desktop을 재시작하세요.
Claude가 재시작되면 Bright Data의 Web MCP가 도구로 사용 가능해집니다.
Claude로 아마존 제품 목록 추출하기
Bright Data의 Web MCP가 연결된 상태에서 Claude에게 단일 단계로 Amazon 검색 결과를 가져와 추출하도록 요청할 수 있습니다.
다음과 같은 프롬프트를 사용하세요:
scrape_as_markdown 도구를 사용하여 다음 주소로 이동해 주세요:
https://www.amazon.com/s?k=wireless+headphones
그런 다음 마크다운 출력을 확인하고 모든 제품 목록을 다음 필드가 포함된 JSON 목록으로 추출해 주세요:
- title
- price
- rating
- reviews_count
- product_url
- image_url
Claude는 Bright Data의 Web MCP를 통해 페이지를 가져오고, 렌더링된 콘텐츠를 분석한 후 추출된 아마존 제품 데이터가 포함된 구조화된 JSON 응답을 반환합니다.

마무리
이 튜토리얼에서는 Bright Data를 사용해 아마존을 스크래핑하는 세 가지 방법을 살펴보았습니다:
- Amazon Scraper API– 가장 빠르게 시작할 수 있는 방법입니다. 스크래핑 코드를 작성하지 않고도 제품 상세 정보, 검색 결과, 리뷰를 위한 사전 구축된 엔드포인트를 사용하세요.
- Bright Data 프록시를 활용한 커스텀 스크레이퍼– Vercel 서버리스 함수로 프로덕션 환경에 바로 적용 가능한 스크레이퍼를 구축하며, 데이터 가져오기, 추출, 정규화 과정을 완전히 제어할 수 있습니다.
- Claude Desktop과 Web MCP– 코드 작성 없이 AI 기반 추출을 통해 대화식으로 아마존을 스크래핑합니다.
스크래핑을 완전히 건너뛰기
인프라 구축 없이 대규모의 생산 환경에 바로 적용 가능한 아마존 데이터가 필요하다면, Bright Data의 아마존 데이터 세트를 고려해 보세요. 다음에 대한 접근 권한을 얻으세요:
- 사전 수집된 제품 목록, 가격 및 리뷰
- 추세 분석을 위한 과거 데이터
- 정기적으로 업데이트되는 즉시 사용 가능한 데이터셋
- 여러 아마존 마켓플레이스 전반에 걸친 커버리지
실시간 스크래핑이 필요하든, 즉시 사용 가능한 데이터셋이 필요하든, Bright Data는 아마존 데이터에 안정적이고 대규모로 접근할 수 있는 인프라를 제공합니다.