Python으로 Amazon 베스트셀러를 4가지 방법으로 스크래핑해 봤더니...

최종 업데이트: April 17, 2026

지난 주말, Amazon 베스트셀러 페이지를 네 가지 방식으로 스크래핑하느라 커피를 한 주전자나 비웠습니다. 두 가지는 꽤 잘 됐고, 하나는 IP 차단 직전까지 갔고, 하나는 클릭 두 번이면 끝났습니다. 제가 배운 모든 걸 정리해 봤습니다.

Amazon은 어마어마하게 큰 마켓플레이스입니다. , , 그리고 매시간 갱신되는 Best Sellers Rank(BSR) 시스템까지 갖추고 있죠. FBA 상품 리서치, 경쟁 가격 분석, 혹은 경쟁사보다 먼저 트렌드를 잡아내고 싶다면 베스트셀러 데이터는 진짜 금맥입니다.

그런데 그 데이터를 Amazon 밖으로 꺼내서 스프레드시트에 넣는 순간부터 일이 복잡해집니다. 그래서 이번에는 requests + BeautifulSoup, Selenium, 스크래핑 API, 그리고 (노코드 AI 웹 스크래퍼)까지 직접 테스트하면서, 어떤 방식이 실제로 가장 잘 먹히는지, 또 어떤 방식은 CAPTCHA 화면만 덩그러니 남기는지 확인해 봤습니다.

Amazon 베스트셀러란 무엇이고, 왜 중요할까?

Amazon Best Sellers Rank(BSR)는 각 카테고리 안에서 판매량 기준으로 상품 순위를 매기는 Amazon의 실시간 랭킹입니다. 최근 판매량과 누적 판매량을 함께 반영해 매시간 갱신되는 인기 순위라고 보면 됩니다. Amazon은 이를 이렇게 설명합니다.

"Amazon Best Sellers 계산은 Amazon 판매 데이터를 기반으로 하며, Amazon에서 판매된 모든 상품의 최근 및 과거 판매를 반영하기 위해 매시간 업데이트됩니다." —

베스트셀러 페이지는 카테고리별 상위 100개 상품을 보여주며, 50개씩 두 페이지로 나뉩니다. 1페이지는 #1~50위, 2페이지는 #51~100위를 다룹니다. Amazon도 페이지 조회수나 고객 리뷰는 BSR에 영향을 주지 않는다고 밝혔습니다. 오직 판매량이 기준입니다.

이 데이터는 누가 필요할까요? FBA용 상품을 찾는 이커머스 셀러, 경쟁사 동향을 추적하는 세일즈팀, 가격 변동을 모니터링하는 운영팀, 카테고리 성장세를 분석하는 시장 조사 담당자들입니다. 제 경험상 Amazon에서 판매하든, Amazon과 경쟁하든 결국 이 데이터를 스프레드시트로 정리해야 하는 순간이 옵니다.

왜 Python으로 Amazon 베스트셀러를 스크래핑할까?

수작업으로 상품 조사하는 건 시간이 엄청 듭니다. 에 따르면 직원들은 주당 9.3시간을 정보 검색과 수집에 씁니다. 이커머스 팀이라면 Amazon 페이지를 하나씩 열어 보고, 상품명과 가격을 복사해서 스프레드시트에 붙여넣는 데 몇 시간을 쓰게 되고, 다음 주에는 또 같은 작업을 반복하게 됩니다.

아래는 베스트셀러 스크래핑이 실제로 쓸모 있는 대표적인 사례입니다.

활용 사례얻을 수 있는 것도움이 되는 대상
FBA 상품 리서치BSR과 리뷰 수를 기반으로 수요는 높고 경쟁은 낮은 상품 식별Amazon 셀러, 드랍쉬퍼
경쟁 가격 분석카테고리 내 주요 상품들의 가격 변동 추적이커머스 팀, 가격 분석가
시장 트렌드 모니터링상승 중인 카테고리와 계절성 변화 포착제품 관리자, 시장 조사 담당자
리드 생성잘 팔리는 브랜드와 제품군 목록 구축세일즈팀, B2B 아웃리치
경쟁사 분석자사 제품을 카테고리 리더와 비교브랜드 매니저, 전략팀

ROI도 분명합니다. 에 따르면, 2,700명의 커머스 전문가가 AI 도구를 통해 주당 평균 을 절약한다고 합니다. 또한 자동 가격 추적을 사용하는 판매자는 Buy Box 점유율이 로, 수동 추적의 42%보다 높습니다. 가격 변화에 더 빨리 대응한 덕분에 매출이 37% 증가한 셈입니다.

Python으로 Amazon 베스트셀러를 스크래핑하는 4가지 방법: 한눈에 비교

본격적인 단계별 설명에 들어가기 전에, 제가 처음 테스트할 때 미리 있었으면 했던 비교표를 먼저 보여드리겠습니다. 상황에 맞는 방법을 고르는 데 도움이 될 겁니다.

기준requests + BS4Selenium스크래핑 API (예: Scrape.do)Thunderbit (노코드)
설정 난이도중간높음(드라이버, 브라우저)낮음(API 키)매우 낮음(Chrome 확장 프로그램)
지연 로딩 처리불가가능(스크롤 시뮬레이션)가능(렌더링된 HTML)가능(AI가 렌더링 처리)
봇 차단 대응력낮음(IP 차단)중간(탐지 가능)높음(프록시 자동 전환)높음(클라우드 + 브라우저 모드)
유지보수 부담높음(셀렉터 깨짐)높음(드라이버 업데이트 + 셀렉터)낮음매우 낮음(AI가 레이아웃 변화에 적응)
비용무료무료유료(요청당 과금)무료 티어 + 유료 플랜
최적 용도단발성 스크래핑, 학습용JS가 많은 페이지, 로그인 필요 페이지대규모/프로덕션비개발자, 빠른 리서치, 반복 모니터링

Python 스크래핑 기초를 배우고 싶다면 1번이나 2번부터 시작하세요. 프로덕션 수준의 안정성이 필요하다면 3번이 맞습니다. 코드를 전혀 쓰지 않고 클릭 두 번으로 결과를 보고 싶다면 바로 4번으로 가면 됩니다.

시작하기 전에

  • 난이도: 초급~중급(방법에 따라 다름)
  • 소요 시간: Thunderbit 약 15분, Python 방식 약 45분
  • 준비물: Python 3.8+(방법 1~3), Chrome 브라우저, (방법 4), 그리고 대상 Amazon 베스트셀러 카테고리 URL

방법 1: requests + BeautifulSoup으로 Amazon 베스트셀러 스크래핑하기

가장 가볍고 입문자 친화적인 방식입니다. 브라우저 자동화 없이 HTTP 요청과 HTML 파싱만 사용하죠. 동시에 Amazon의 반스크래핑 방어가 얼마나 강한지도 가장 많이 체감하게 해 준 방법이었습니다.

1단계: 환경 설정

필요한 패키지를 설치합니다.

1pip install requests beautifulsoup4 pandas

그다음 import를 설정합니다.

1import requests
2from bs4 import BeautifulSoup
3import pandas as pd
4import random
5import time

2단계: 현실적인 헤더로 요청 보내기

Amazon은 봇처럼 보이는 요청을 막습니다. 가장 기본적인 방어는 실제 브라우저처럼 보이게 하는 User-Agent 헤더입니다. 아래는 현재 사용 가능한 현실적인 User-Agent 예시 묶음입니다( 기준, 2026년 3월).

1USER_AGENTS = [
2    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36",
3    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36",
4    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:149.0) Gecko/20100101 Firefox/149.0",
5    "Mozilla/5.0 (Macintosh; Intel Mac OS X 15.7; rv:149.0) Gecko/20100101 Firefox/149.0",
6    "Mozilla/5.0 (Macintosh; Intel Mac OS X 15_7_5) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0 Safari/605.1.15",
7]
8headers = {"User-Agent": random.choice(USER_AGENTS)}
9url = "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/"
10response = requests.get(url, headers=headers)
11print(response.status_code)  # 200이어야 함

상태 코드가 200이면 성공입니다. 503이 뜨거나 CAPTCHA 페이지로 넘어가면 Amazon이 요청을 막은 것입니다.

3단계: BeautifulSoup으로 상품 데이터 파싱하기

브라우저 개발자 도구에서 Amazon 페이지 HTML을 확인해 보세요(우클릭 → 검사). 상품 컨테이너는 gridItemRoot ID를 사용합니다. 각 컨테이너 안에서 상품명, 가격, 평점, URL을 찾을 수 있습니다.

1soup = BeautifulSoup(response.text, "html.parser")
2products = []
3for item in soup.find_all("div", id="gridItemRoot"):
4    title_tag = item.find("div", class_="_cDEzb_p13n-sc-css-line-clamp-3_g3dy1")
5    price_tag = item.find("span", class_="_cDEzb_p13n-sc-price_3mJ9Z")
6    link_tag = item.find("a", class_="a-link-normal")
7    title = title_tag.get_text(strip=True) if title_tag else "N/A"
8    price = price_tag.get_text(strip=True) if price_tag else "N/A"
9    url = "https://www.amazon.com" + link_tag["href"] if link_tag else "N/A"
10    products.append({"Title": title, "Price": price, "URL": url})

주의: _cDEzb_로 시작하는 클래스명은 Amazon이 주기적으로 다시 생성하는 CSS 모듈 해시입니다. gridItemRoot ID와 a-link-normal 클래스는 비교적 안정적이지만, 스크래퍼를 돌리기 전에는 항상 DevTools로 셀렉터를 다시 확인하세요.

4단계: CSV로 내보내기

1df = pd.DataFrame(products)
2df.to_csv("amazon_best_sellers.csv", index=False)
3print(f"{len(products)}개의 상품을 스크래핑했습니다")

결과와 한계

제 테스트에서는 이 방법이 50개가 아니라 약 30개 정도만 가져왔습니다. 코드 오류가 아니라 Amazon의 지연 로딩 때문입니다. 초기 로딩 시점에는 약 30개만 렌더링되고, 나머지는 스크롤 후 JavaScript 실행이 되어야 표시되는데 requests는 그걸 처리하지 못합니다.

그 밖의 한계는 다음과 같습니다.

  • 프록시 전환이 없으면 IP 차단이 빠르게 발생합니다(저는 짧은 시간에 약 15번 요청한 뒤 차단됐습니다)
  • Amazon이 페이지 레이아웃을 바꾸면 CSS 셀렉터가 깨집니다. 그리고 이런 일은 자주 일어납니다
  • 기본적으로 페이지네이션 처리가 없습니다

Python 스크래핑을 배우기엔 좋지만, 프로덕션에는 취약합니다.

방법 2: Selenium으로 Amazon 베스트셀러 스크래핑하기

Selenium은 실제 브라우저를 띄워 지연 로딩 문제를 해결합니다. 설정은 더 무겁지만, 페이지당 50개 상품을 모두 가져올 수 있습니다.

1단계: Selenium 설치하기

1pip install selenium pandas

좋은 소식은 Selenium 4.6+부터는 webdriver-manager가 필요 없다는 점입니다. Selenium Manager가 드라이버 다운로드를 자동으로 처리합니다.

1from selenium import webdriver
2from selenium.webdriver.chrome.options import Options
3from selenium.webdriver.common.by import By
4from selenium.webdriver.common.keys import Keys
5import time
6import pandas as pd
7options = Options()
8options.add_argument("--headless=new")
9options.add_argument("--window-size=1920,1080")
10options.add_argument("--disable-blink-features=AutomationControlled")
11driver = webdriver.Chrome(options=options)

--headless=new 플래그(Chrome 109+ 도입)는 일반 Chrome과 같은 렌더링 파이프라인을 사용해 Amazon이 탐지하기 더 어렵게 만듭니다.

2단계: 지연 로딩을 넘기 위해 스크롤하기

이 단계가 바로 Selenium을 사용할 가치가 있는 이유입니다. Amazon 베스트셀러는 처음에 약 30개만 불러오고, 나머지는 스크롤해야 나타납니다.

1def scroll_page(driver, scrolls=5, delay=2):
2    for _ in range(scrolls):
3        driver.find_element(By.TAG_NAME, "body").send_keys(Keys.PAGE_DOWN)
4        time.sleep(delay)
5driver.get("https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/")
6time.sleep(3)
7scroll_page(driver)

스크롤 후에는 50개 상품이 모두 DOM에 렌더링되어야 합니다. 제 경우에는 2초 딜레이로 5번 페이지 다운을 하면 충분했지만, 네트워크 속도에 따라 조정이 필요할 수 있습니다.

3단계: 상품 데이터 추출하기

1items = driver.find_elements(By.ID, "gridItemRoot")
2products = []
3for item in items:
4    try:
5        title = item.find_element(By.CSS_SELECTOR, "div._cDEzb_p13n-sc-css-line-clamp-3_g3dy1").text
6    except:
7        title = "N/A"
8    try:
9        price = item.find_element(By.CSS_SELECTOR, "span._cDEzb_p13n-sc-price_3mJ9Z").text
10    except:
11        price = "N/A"
12    try:
13        url = item.find_element(By.CSS_SELECTOR, "a.a-link-normal").get_attribute("href")
14    except:
15        url = "N/A"
16    products.append({"Title": title, "Price": price, "URL": url})

각 항목을 try/except로 감싸는 것이 중요합니다. 품절 상품이거나 필드가 비어 있는 경우가 있어서, 하나의 요소 때문에 전체 스크래핑이 중단되면 안 되기 때문입니다.

4단계: 페이지네이션 처리하기

Amazon은 100개 베스트셀러를 서로 다른 URL 구조의 두 페이지로 나눕니다.

1urls = [
2    "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/",
3    "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/ref=zg_bs_pg_2_electronics?_encoding=UTF8&pg=2"
4]
5all_products = []
6for url in urls:
7    driver.get(url)
8    time.sleep(3)
9    scroll_page(driver)
10    # ... 위와 같은 방식으로 상품 추출 ...
11    all_products.extend(products)
12driver.quit()

결과

제 테스트에서는 Selenium이 페이지당 50개 상품을 모두 가져왔습니다. requests + BS4보다 확실히 낫습니다. 단점은 페이지당 약 45초가 걸렸고(스크롤 대기 시간 포함), 프록시 전환 없이 너무 자주 실행하니 여전히 차단이 발생했다는 점입니다. Selenium도 anti-detection 플래그를 써도 Amazon의 봇 탐지에 걸릴 수 있습니다. 규모가 크다면 추가 대응이 필요합니다(아래 Anti-Ban 가이드 참고).

그 외 불편한 점도 있습니다.

  • Selenium Manager 덕분에 많이 줄었지만, 여전히 WebDriver 버전 불일치가 가끔 발생합니다
  • Amazon이 DOM을 바꾸면 CSS 셀렉터를 다시 맞춰야 합니다
  • 메모리 사용량이 높습니다. 브라우저 인스턴스 하나당 200~400MB RAM을 먹습니다

방법 3: 스크래핑 API로 Amazon 베스트셀러 스크래핑하기

스크래핑 API는 “어려운 건 다른 사람에게 맡기자”는 방식입니다. Scrape.do, Oxylabs, ScrapingBee 같은 서비스가 프록시 전환, JavaScript 렌더링, 봇 방어를 대신 처리해 줍니다. 사용자는 URL만 보내고 HTML이나 JSON을 받으면 됩니다.

동작 방식

대상 URL을 API 엔드포인트로 전송하면, API가 자체 인프라의 실제 브라우저로 페이지를 렌더링하고, 프록시를 바꾸고, CAPTCHA를 처리한 뒤 깨끗한 HTML을 돌려줍니다. 이후는 평소처럼 BeautifulSoup으로 파싱하면 됩니다.

1단계: API를 통해 요청 보내기

아래는 Scrape.do 예시입니다(요금은 150,000 크레딧에 월 $29부터 시작하며, 렌더링 여부와 상관없이 1크레딧 = 1요청입니다).

1import requests
2from bs4 import BeautifulSoup
3api_token = "YOUR_API_TOKEN"
4target_url = "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/"
5api_url = f"https://api.scrape.do?token={api_token}&url={target_url}&render=true&geoCode=us"
6response = requests.get(api_url)
7soup = BeautifulSoup(response.text, "html.parser")

이후의 파싱 방식은 방법 1과 동일합니다. 셀렉터도 같고, 추출 로직도 같습니다.

가격 현실 점검

주요 API들의 Amazon 요청 1,000건당 비용은 최저 요율 기준으로 다음과 같습니다.

제공업체1,000건당 비용비고
Scrape.do약 $0.19크레딧 배수 없음, 정액형
Oxylabs약 $1.80JS 렌더링 시 5배 배수
ScrapingBee약 $4.90프리미엄 기능에 따라 5~25배 배수
Bright Data$5.00+데이터 범위는 가장 넓음(상품당 686개 필드) 하지만 가장 느림(요청당 약 66초)

장단점

장점: 높은 안정성(), 드라이버 유지보수 불필요, 봇 차단 자동 대응, 대규모 확장에 유리합니다.

단점: 요청당 과금이라 규모가 커지면 비용이 누적됩니다. 여전히 파싱 코드는 직접 작성해야 하고, CSS 셀렉터 변경에 취약합니다. 월 100,000페이지 기준으로 총비용 차이는 꽤 큽니다. 자체 구축은 3년 기준 약 , 외부 제공업체는 약 $293,000으로, 71% 절감 효과가 있습니다.

손익분기점은 보통 월 50만~100만 요청 수준입니다. 그 이하라면 API가 주는 시간 절약 효과가 비용보다 훨씬 큽니다.

방법 4: Thunderbit으로 Amazon 베스트셀러 스크래핑하기(Python 불필요)

먼저 밝히자면, 저는 Thunderbit에서 일합니다. 그래서 이 섹션은 그 점을 감안해 봐 주세요. 다만 네 가지 방법을 연달아 직접 테스트해 봤고, 데이터가 나오기까지 걸린 시간 차이는 정말 컸습니다.

은 Chrome 확장 프로그램 형태의 AI 웹 스크래퍼입니다. 핵심 아이디어는 CSS 셀렉터나 Python 코드를 직접 쓰는 대신, AI가 페이지를 읽고 어떤 데이터를 추출할지 판단하는 것입니다. 특히 Amazon 베스트셀러는 원클릭으로 바로 쓸 수 있는 사전 제작 템플릿이 있습니다.

1단계: Thunderbit Chrome 확장 프로그램 설치하기

로 가서 "Chrome에 추가"를 클릭하세요. 무료 계정에 가입하면 테스트하기 충분한 크레딧을 받을 수 있습니다.

2단계: Amazon 베스트셀러 페이지 열기

Chrome에서 아무 Amazon 베스트셀러 카테고리 페이지나 엽니다. 예를 들면 다음과 같습니다. https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/

3단계: "AI Suggest Fields" 클릭하기

Thunderbit 사이드바를 열고 "AI Suggest Fields"를 클릭하세요. AI가 페이지 구조를 분석해 Product Name, Price, Rating, Image URL, Vendor, Product URL, Rank 같은 열을 제안합니다. 제 테스트에서는 약 3초 만에 관련 필드를 모두 정확하게 잡아냈습니다.

amazon-thunderbit-product-data.webp

열 이름을 바꾸거나 삭제하거나 추가할 수 있습니다. 각 필드에 맞춤 AI 프롬프트도 넣을 수 있는데, 예를 들어 "Electronics/Apparel/Home로 분류" 같은 지시를 넣어 각 상품에 카테고리 태그를 붙일 수도 있습니다.

4단계: "Scrape" 클릭하기

"Scrape" 버튼을 누르세요. Thunderbit가 페이지의 모든 상품 데이터를 구조화된 표로 채워 줍니다. 클라우드 모드에서는 최대 50페이지까지 병렬로 처리하면서 지연 로딩과 페이지네이션도 자동으로 다룹니다.

5단계: 무료로 내보내기

"Export"를 클릭하고 대상 형식을 선택하세요. Excel, Google Sheets, Airtable, Notion으로 보낼 수 있습니다. 모든 플랜에서 내보내기는 무료입니다. 숨은 비용도 없습니다.

product-data-export.webp

페이지를 연 순간부터 완성된 스프레드시트를 얻기까지 전체 과정은 약 90초밖에 걸리지 않았습니다. 비교해 보면 방법 1은 약 20분(지연 로딩 문제 디버깅 포함), 방법 2는 약 35분(Selenium 설정 포함), 방법 3은 약 15분(API 계정 설정 포함)이었습니다.

Thunderbit이 Amazon에 강한 이유

AI가 매번 페이지를 새로 읽기 때문에 레이아웃이 바뀌어도 자동으로 적응합니다. 즉, 유지해야 할 CSS 셀렉터가 없습니다. 이는 스크래핑 포럼에서 가장 흔한 불만인 “기본 웹 스크래퍼로는 부족하고, 요소가 바뀔 때마다 예외 처리를 엄청 많이 넣어야 한다”는 문제를 직접 해결합니다. Amazon이 DOM을 바꿔도(실제로 자주 바뀝니다) 따로 고칠 필요가 없습니다.

클라우드 스크래핑 모드는 프록시 전환, 렌더링, 봇 방어를 투명하게 처리합니다. "그냥 되기만 하면 좋겠다"는 사용자에게는 이게 가장 큰 장점입니다. 차단 걱정을 거의 없애 주니까요.

Anti-Ban 플레이북: Amazon 차단을 피하는 방법

Amazon의 봇 탐지는 꽤 공격적입니다. 테스트 중에 제 IP도 잠시 차단됐고, 포럼 사용자들도 비슷한 경험을 말합니다. “오류가 여기저기서 터지고, Amazon이 아예 홈으로 리디렉션하기 시작했다”는 식이죠. Python 방식(방법 1~3)을 쓴다면 이 섹션이 중요합니다.

아래는 기본부터 고급까지 단계별 대응 전략입니다.

1. User-Agent 문자열을 번갈아 사용하기

같은 User-Agent를 반복해서 보내면 바로 수상하게 보입니다. 방법 1의 코드 예시처럼 5개 이상의 문자열 풀을 만들고, 요청마다 랜덤으로 선택하세요.

1headers = {"User-Agent": random.choice(USER_AGENTS)}

2. 요청 사이에 랜덤 지연 추가하기

고정된 딜레이는 패턴으로 잡힐 수 있습니다. 랜덤 딜레이가 더 안전합니다.

1time.sleep(random.uniform(2, 5))

제 테스트에서는 요청 사이를 2~5초로 두면 소규모 배치(50건 미만)에서는 비교적 안전했습니다. 더 큰 작업이라면 3~7초로 늘리는 편이 좋습니다.

3. 프록시 전환 사용하기

이게 가장 중요합니다. 에 따르면 Amazon에서 residential proxy는 평균 약 94% 성공률을 보인 반면, 데이터센터 프록시는 약 59%에 그쳤습니다. 무려 35%p 차이입니다. Amazon의 탐지 스택에는 TLS fingerprinting, 행동 분석, IP별 rate limiting이 포함되기 때문에 일반 데이터센터 IP는 몇 초 만에 걸릴 수 있습니다.

Residential proxy는 더 비싸지만(제공업체에 따라 GB당 $2~$12) 신뢰성이 훨씬 높습니다. 예시는 다음과 같습니다.

1proxies = {
2    "http": "http://user:pass@residential-proxy.example.com:8080",
3    "https": "http://user:pass@residential-proxy.example.com:8080"
4}
5response = requests.get(url, headers=headers, proxies=proxies)

4. 브라우저 지문을 더 자연스럽게 만들기(Selenium)

1options.add_argument('--disable-blink-features=AutomationControlled')
2options.add_experimental_option("excludeSwitches", ["enable-automation"])
3options.add_experimental_option('useAutomationExtension', False)
4# 드라이버 초기화 후 navigator.webdriver 플래그 제거
5driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {
6    'source': "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"
7})

5. 세션과 쿠키 관리하기

요청 사이에 쿠키를 유지하면 스크래퍼가 실제 사용자 세션처럼 보입니다.

1session = requests.Session()
2# 먼저 홈페이지만 방문해 현실적인 쿠키 확보
3session.get("https://www.amazon.com", headers=headers)
4time.sleep(2)
5# 그다음 대상 페이지 스크래핑
6response = session.get(target_url, headers=headers)

6. 아예 번거로움을 건너뛰기

이런 걸 일일이 관리하고 싶지 않다면, Thunderbit의 클라우드 스크래핑은 프록시 전환, 렌더링, 봇 방어를 투명하게 처리합니다. 스크래핑 API도 대부분의 문제를 기본적으로 해결해 줍니다. 제 경험상 anti-ban 문제를 디버깅하는 데 드는 시간이 실제 스크래핑 코드를 짜는 시간보다 더 길어지는 경우가 많습니다. 그래서 "그냥 되는" 방식은 실제로 ROI가 있습니다.

서브페이지 확장: 더 풍부한 데이터를 위해 상품 상세페이지 스크래핑하기

베스트셀러 목록 페이지에는 상품명, 가격, 평점, 순위 같은 기본 정보만 나옵니다. 하지만 FBA 리서치에서 진짜 가치 있는 정보는 개별 상품 상세페이지에 있습니다. 목록 페이지만 스크래핑하면 놓치는 항목은 다음과 같습니다.

필드목록 페이지상품 상세페이지
상품명
가격
평점
BSR 순위✅(하위 카테고리 순위 포함)
브랜드
ASIN
최초 판매일
크기/무게
판매자 수
핵심 기능 항목
Buy Box 보유자

특히 "최초 판매일"은 매우 유용합니다. 상품이 시장에 얼마나 오래 있었는지를 보여 주기 때문에 경쟁 분석의 핵심 신호가 됩니다. 또한 판매자 수와 Buy Box 보유자를 알면 특정 상품군에 진입할 만한지 판단하는 데 도움이 됩니다(만약 Amazon 자체가 Buy Box의 30% 이상을 차지한다면 경쟁은 상당히 어렵습니다).

Python 방식: 상품 URL을 돌면서 상세 정보 수집하기

목록 페이지에서 상품 URL을 모은 뒤, 각 URL을 지연을 두고 순회합니다.

1for product in products:
2    time.sleep(random.uniform(3, 6))
3    detail_response = session.get(product["URL"], headers={"User-Agent": random.choice(USER_AGENTS)})
4    detail_soup = BeautifulSoup(detail_response.text, "html.parser")
5    # 브랜드 추출
6    brand_tag = detail_soup.find("a", id="bylineInfo")
7    product["Brand"] = brand_tag.get_text(strip=True) if brand_tag else "N/A"
8    # 페이지 소스 또는 URL에서 ASIN 추출
9    # 상품 상세 정보 표에서 최초 판매일 추출
10    # ... 추가 필드 ...

주의할 점은, 개별 상품 페이지 100개를 연속으로 긁으면 차단 위험이 크게 올라간다는 것입니다. 프록시 전환과 더 긴 지연 시간을 예산에 포함하세요.

Thunderbit 방식: 원클릭 서브페이지 스크래핑

목록 페이지를 표로 만든 뒤 Thunderbit에서 "Scrape Subpages"를 클릭하세요. AI가 각 상품 URL을 방문해 브랜드, ASIN, 사양, 기능 같은 추가 열을 자동으로 채워 줍니다. 추가 코드도, 셀렉터도, 설정도 필요 없습니다. 특히 소싱 결정을 위해 전체 그림이 필요하지만 상세페이지 파서를 직접 만들고 유지하고 싶지 않은 이커머스 팀에 매우 유용합니다.

반복 스크래핑 자동화: 시간에 따라 베스트셀러를 모니터링하기

한 번만 스크래핑하는 것도 유용하지만, 진짜 경쟁 우위는 지속적인 모니터링에서 나옵니다. 어떤 상품이 오르고 내리는지, 트렌드가 언제 시작되는지, 수주 또는 수개월에 걸친 가격 변화를 추적하는 것 — 이것이 단순 리서치와 데이터 기반 의사결정의 차이입니다.

Python 방식: cron으로 예약 실행하기

Linux/Mac에서는 cron으로 Python 스크립트를 예약할 수 있습니다. 매일 오전 8시에 실행하는 crontab 예시는 다음과 같습니다.

10 8 * * * /usr/bin/python3 /home/user/amazon_scraper.py >> /home/user/logs/scrape.log 2>&1

매주 월요일 오전 9시 실행은 다음과 같습니다.

10 9 * * 1 /usr/bin/python3 /home/user/amazon_scraper.py >> /home/user/logs/scrape.log 2>&1

Windows에서는 Task Scheduler를 사용하면 됩니다. 노트북을 켜 두지 않고 계속 돌리고 싶다면 VPS나 AWS Lambda에 배포할 수도 있지만, 그만큼 인프라 복잡도는 늘어납니다.

로그와 오류 알림도 꼭 넣으세요. 스크래퍼가 2주 전에 조용히 망가졌다는 걸 나중에 발견하는 것만큼 답답한 일도 없습니다.

Thunderbit 방식: 자연어로 쓰는 Scheduled Scraper

Thunderbit의 Scheduled Scraper는 자연어로 간격을 지정할 수 있습니다. "매주 월요일 오전 9시" 또는 "매일 오전 8시"처럼 입력하면 AI가 일정을 해석합니다. 스크래핑은 Thunderbit 클라우드 서버에서 실행되므로 브라우저나 컴퓨터를 켜 둘 필요가 없고, 데이터는 Google Sheets나 Airtable로 자동 내보내기 됩니다. 서버 관리 없이 실시간 모니터링 대시보드를 만들 수 있어, DevOps 부담 없이 지속적인 관찰이 필요한 운영팀에 잘 맞습니다.

Amazon 스크래핑 시 법적·윤리적 고려사항

저는 변호사가 아니며, 이 내용은 법률 자문이 아닙니다. 하지만 스크래핑 튜토리얼에서 법적 이슈를 빼놓는 건 무책임합니다. 포럼 사용자들도 ToS 문제를 분명히 제기하는데, 그럴 만한 이유가 있습니다.

Amazon robots.txt: 2026년 기준 Amazon의 robots.txt에는 80개가 넘는 구체적인 Disallow 경로가 있지만, /gp/bestsellers/는 표준 사용자 에이전트 기준으로 명시적으로 차단되어 있지 않습니다. 다만 ClaudeBot, GPTBot, Scrapy 등 35개 이상의 AI 전용 사용자 에이전트에는 Disallow: /가 일괄 적용됩니다. 특정 경로가 막혀 있지 않다고 해서 Amazon이 스크래핑을 허용한다는 뜻은 아닙니다.

Amazon 이용 약관: Amazon의 (2025년 5월 업데이트)는 서면 허가 없이 "Amazon 웹사이트의 일부에 접근, 수집, 복사 또는 모니터링하기 위해 자동화된 프로세스나 기술을 사용하는 것"을 명시적으로 금지합니다. 이는 이론이 아닙니다. Amazon은 2025년 11월 을 제기했고, 무단 자동 접근과 관련해 예비금지명령도 얻어냈습니다.

hiQ v. LinkedIn 판례: (제9순회항소법원, 2022)에서는 공개 데이터 스크래핑이 CFAA(컴퓨터 사기 및 남용 방지법)를 위반하지 않을 가능성이 높다고 판단했습니다. 하지만 hiQ는 결국 합의했고 스크래핑을 중단하기로 했습니다. CFAA에서 이긴다고 해서 계약 위반 책임까지 없어지는 건 아닙니다.

실무 가이드라인:

  • 공개된 데이터만 스크래핑하세요(가격, BSR, 상품명 등. PII는 제외)
  • 요청 속도를 지키고 서버에 과부하를 주지 마세요
  • 정당한 경쟁 정보 수집 목적에만 사용하세요
  • 대규모 스크래핑 전에는 반드시 법률 자문을 받으세요
  • 가 이미 포괄적 개인정보보호 법제를 갖추고 있다는 점을 인지하세요

Thunderbit의 클라우드 스크래핑은 일반 브라우저와 유사한 요청 패턴을 사용하지만, 항상 자체 법률 자문과 함께 적법성을 확인해야 합니다.

어떤 방법을 써야 할까? 빠른 결정 가이드

짧게 정리하면 다음과 같습니다.

  • "Python을 배우는 중이고 주말 프로젝트를 하고 싶다." → 방법 1(requests + BeautifulSoup). HTTP 요청, HTML 파싱, Amazon의 봇 방어에 대해 많이 배울 수 있습니다.
  • "JavaScript가 많은 페이지나 로그인 세션을 스크래핑해야 한다." → 방법 2(Selenium). 더 무겁지만 동적 콘텐츠를 처리할 수 있습니다.
  • "대규모 프로덕션 스크래핑을 운영 중이다." → 방법 3(스크래핑 API). 프록시와 렌더링 관리는 다른 데 맡기세요. 도 월 50만 요청 이하라면 API 쪽이 유리합니다.
  • "개발자가 아니고 2분 안에 데이터를 보고 싶다." → 방법 4(). 코드도, 셀렉터도, 유지보수도 없습니다.
  • "서버 관리 없이 계속 모니터링하고 싶다." → Thunderbit Scheduled Scraper. 설정해 두고 잊어버리면 됩니다.

결론과 핵심 요약

주말 동안 테스트해 본 뒤 실제로 남은 결론은 다음과 같습니다.

requests + BeautifulSoup는 배우기엔 좋지만, 지연 로딩 제한(50개 중 약 30개만 표시)과 깨지기 쉬운 CSS 셀렉터 때문에 프로덕션에는 적합하지 않습니다.

Selenium은 지연 로딩 문제를 해결하고 페이지당 50개 상품을 모두 가져오지만, 느리고 메모리를 많이 쓰며 여전히 Amazon 봇 방어에 탐지될 수 있습니다.

스크래핑 API는 프로덕션 규모 스크래핑에서 가장 안정적입니다. Amazon 기준 을 제공하지만, 비용이 누적되고 파싱 코드는 여전히 직접 작성해야 합니다.

Thunderbit는 압도적으로 가장 빠르게 데이터를 얻을 수 있었습니다. AI가 레이아웃 변화, 지연 로딩, 페이지네이션, 봇 방어를 별도 설정 없이 처리합니다. 비개발자나 DevOps 부담 없이 반복 데이터를 필요로 하는 팀에게 가장 실용적인 선택입니다.

가장 큰 교훈은 하나입니다. Amazon의 강력한 봇 방어와 잦은 레이아웃 변경을 생각하면, 유지보수가 거의 필요 없는 솔루션이 장기적으로 가장 많은 시간을 절약해 줍니다. 깨진 셀렉터를 고치고 프록시를 돌리는 데 쓰는 한 시간은, 실제 분석에 써야 할 한 시간입니다.

노코드 방식을 직접 써 보고 싶다면 로 몇 개의 베스트셀러 카테고리를 스크래핑해 결과를 확인해 보세요. Python 방식을 선호한다면 위의 코드 예시로 시작하면 됩니다. 어느 쪽이든, Amazon 베스트셀러 데이터가 브라우저 탭 안에만 머무르지 않고 스프레드시트에 들어가 있게 될 겁니다.

웹 스크래핑 방식에 대해 더 알고 싶다면 , , 가이드를 참고하세요. 에서 단계별 시연 영상도 볼 수 있습니다.

더 읽어보기

Fawad Khan
Fawad Khan
Fawad writes for a living, and honestly, he kind of loves it. He's spent years figuring out what makes a line of copy stick — and what makes readers scroll past. Ask him about marketing, and he'll talk for hours. Ask him about carbonara, and he'll talk longer.
목차

Thunderbit 사용해보기

리드와 기타 데이터를 단 2번 클릭으로 수집하세요. AI로 구동됩니다.

Thunderbit 받기 무료예요
AI로 데이터 추출하기
Google Sheets, Airtable, Notion으로 데이터를 쉽게 옮기세요
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week