Python으로 Amazon Best Sellers를 스크래핑하는 4가지 방법

최종 업데이트: August 21, 2026
Python으로 Amazon Best Sellers를 스크래핑하는 4가지 방법

지난 주말, 저는 Amazon의 Best Sellers 페이지를 네 가지 방식으로 수집해 보느라 커피 한 주전자를 다 비웠습니다. 그중 두 가지는 꽤 잘 됐고, 하나는 제 IP가 차단될 뻔했으며, 하나는 정말 클릭 한 번이면 끝났습니다. 제가 얻은 모든 인사이트를 정리해 보겠습니다.

Amazon은 엄청나게 큰 마켓플레이스입니다. 6억 개의 상품 목록, 3억 1천만 개 이상의 활성 고객 계정, 그리고 매시간 갱신되는 Best Sellers Rank(BSR) 시스템까지 갖추고 있죠. FBA 상품 리서치, 경쟁사 가격 분석, 또는 경쟁자보다 먼저 트렌드를 잡아내려는 목적이라면 Best Seller 데이터는 정말 금광이나 다름없습니다.

하지만 그 데이터를 Amazon 밖으로 꺼내 스프레드시트로 옮기는 일은 또 다른 문제입니다. 저는 requests + BeautifulSoup, Selenium, 스크래핑 API, 그리고 Thunderbit (저희가 만든 노코드 AI 웹 스크래퍼)를 직접 테스트해 보면서, 어떤 방식이 실제로 쓸 만한지, 또 어떤 방식이 CAPTCHA 페이지 앞에서 멈춰 서게 만드는지 확인했습니다.

Amazon Best Sellers란 무엇이고, 왜 신경 써야 할까요?

Amazon Best Sellers Rank(BSR)는 각 카테고리 안에서 판매량을 기준으로 상품을 실시간으로 순위 매기는 랭킹입니다. 최근 판매와 누적 판매 데이터를 바탕으로 매시간 업데이트되는 일종의 인기 차트라고 보면 됩니다. Amazon은 이를 이렇게 설명합니다.

"Amazon Best Sellers 계산은 Amazon 판매 데이터를 기반으로 하며, Amazon에서 판매되는 각 상품의 최근 및 과거 판매 실적을 반영하도록 매시간 업데이트됩니다." — Amazon Seller Central

Best Sellers 페이지는 카테고리별 상위 100개 상품을 보여주며, 50개씩 두 페이지로 나뉘어 있습니다. 1페이지는 #1–50위, 2페이지는 #51–100위를 보여줍니다. Amazon도 페이지 조회수나 고객 리뷰는 BSR에 영향을 주지 않고, 오직 판매량만 반영된다고 분명히 밝히고 있습니다.

이 데이터가 왜 중요할까요? FBA용 상품을 찾는 이커머스 셀러, 경쟁 인텔리전스를 만드는 세일즈팀, 가격 변동 추이를 살피는 운영팀, 카테고리 성장세를 추적하는 시장 조사 담당자들이 모두 필요로 합니다. 제 경험상 Amazon에서 판매하거나 경쟁하는 사람이라면 결국 이 데이터를 스프레드시트로 정리해야 하는 순간이 옵니다.

왜 Python으로 Amazon Best Sellers를 수집할까요?

수작업 상품 리서치는 시간을 정말 많이 잡아먹습니다. McKinsey 연구에 따르면 직원들은 주당 9.3시간을 정보 검색과 수집에만 씁니다. 이커머스 팀 입장에서는 Amazon 페이지를 하나하나 클릭하면서 상품명과 가격을 복사해 스프레드시트에 붙여넣고, 다음 주에 똑같은 작업을 또 반복하는 셈이죠.

아래는 Best Sellers 수집이 왜 가치 있는지 보여 주는 대표 활용 사례입니다.

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

ROI도 꽤 분명합니다. Salesforce 설문에 참여한 2,700명의 커머스 전문가들에 따르면 AI 도구는 이커머스 실무자의 시간을 주당 평균 6.4시간 절약해 줍니다. 또 자동 가격 추적을 쓰는 셀러는 Buy Box를 67%의 시간 동안 차지하는 반면, 수동 추적은 42%에 그쳤습니다. 가격 변화에 더 빨리 대응한 결과, 매출이 37% 늘어난 셈입니다.

Python으로 Amazon Best Sellers를 수집하는 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 브라우저, Thunderbit Chrome Extension (방법 4), 그리고 대상 Amazon Best Sellers 카테고리 URL

방법 1: requests + BeautifulSoup로 Amazon Best Sellers 수집하기

가볍고 초보자 친화적인 방식입니다. 브라우저 자동화 없이 HTTP 요청과 HTML 파싱만 사용하죠. 다만 Amazon의 안티 스크래핑 방어가 얼마나 강한지도 가장 확실하게 보여 줬습니다.

1단계: 환경 설정

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

pip install requests beautifulsoup4 pandas

그다음 import를 설정합니다.

import requests
from bs4 import BeautifulSoup
import pandas as pd
import random
import time

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

Amazon은 봇처럼 보이는 요청을 차단합니다. 가장 기본적인 방어는 실제 브라우저처럼 보이게 User-Agent 헤더를 설정하는 것입니다. 아래는 최신이고 현실적인 User-Agent 문자열 풀의 예시입니다(Geekflare 제공, 2026년 3월 기준).

USER_AGENTS = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36",
    "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",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:149.0) Gecko/20100101 Firefox/149.0",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 15.7; rv:149.0) Gecko/20100101 Firefox/149.0",
    "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",
]

headers = {"User-Agent": random.choice(USER_AGENTS)}
url = "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/"
response = requests.get(url, headers=headers)
print(response.status_code)  # 200이 나와야 정상

상태 코드가 200이면 성공입니다. 503이 나오거나 CAPTCHA 페이지로 리디렉션되면 Amazon이 요청을 감지한 것입니다.

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

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

soup = BeautifulSoup(response.text, "html.parser")
products = []

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

주의: _cDEzb_로 시작하는 클래스명은 Amazon이 주기적으로 다시 생성하는 CSS 모듈 해시입니다. gridItemRoot ID와 a-link-normal 클래스가 더 안정적이긴 하지만, 스크래퍼를 돌리기 전에 항상 DevTools에서 선택자를 다시 확인해야 합니다.

4단계: CSV로 내보내기

df = pd.DataFrame(products)
df.to_csv("amazon_best_sellers.csv", index=False)
print(f"{len(products)}개 상품을 수집했습니다")

기대할 수 있는 점 — 그리고 문제점

제 테스트에서는 이 방식이 50개가 아니라 약 30개 상품만 가져왔습니다. 코드 오류가 아니라 Amazon의 지연 로딩 때문입니다. 초기 로딩 시 약 30개만 렌더링되고, 나머지는 스크롤 후 JavaScript 실행을 통해 나타납니다. 그런데 requests는 그걸 처리하지 못합니다.

다른 한계도 있습니다.

  • 프록시 회전이 없으면 IP 차단이 금방 발생합니다(저는 빠르게 연속 요청을 보낸 뒤 약 15회 만에 차단됐습니다)
  • Amazon이 페이지 레이아웃을 바꾸면 CSS 선택자가 깨집니다. 이런 변경은 자주 일어납니다
  • 기본 상태에서는 페이지네이션 처리가 없습니다

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

방법 2: Selenium으로 Amazon Best Sellers 수집하기

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

1단계: Selenium 설치

pip install selenium pandas

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

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
import pandas as pd

options = Options()
options.add_argument("--headless=new")
options.add_argument("--window-size=1920,1080")
options.add_argument("--disable-blink-features=AutomationControlled")

driver = webdriver.Chrome(options=options)

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

2단계: 지연 로딩을 넘어서 스크롤하기

Selenium을 쓰는 이유가 바로 이 단계입니다. Amazon Best Sellers는 처음에 약 30개만 불러오고, 나머지는 스크롤해야 나타납니다.

def scroll_page(driver, scrolls=5, delay=2):
    for _ in range(scrolls):
        driver.find_element(By.TAG_NAME, "body").send_keys(Keys.PAGE_DOWN)
        time.sleep(delay)

driver.get("https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/")
time.sleep(3)
scroll_page(driver)

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

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

items = driver.find_elements(By.ID, "gridItemRoot")
products = []

for item in items:
    try:
        title = item.find_element(By.CSS_SELECTOR, "div._cDEzb_p13n-sc-css-line-clamp-3_g3dy1").text
    except:
        title = "N/A"
    try:
        price = item.find_element(By.CSS_SELECTOR, "span._cDEzb_p13n-sc-price_3mJ9Z").text
    except:
        price = "N/A"
    try:
        url = item.find_element(By.CSS_SELECTOR, "a.a-link-normal").get_attribute("href")
    except:
        url = "N/A"
    
    products.append({"Title": title, "Price": price, "URL": url})

각 추출을 try/except로 감싸는 것이 중요합니다. 어떤 상품은 품절이거나 필드가 비어 있을 수 있는데, 하나의 문제가 전체 스크래핑을 멈추게 해서는 안 되니까요.

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

Amazon은 100개의 Best Sellers를 두 페이지로 나누며, URL 구조도 다릅니다.

urls = [
    "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/",
    "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/ref=zg_bs_pg_2_electronics?_encoding=UTF8&pg=2"
]

all_products = []
for url in urls:
    driver.get(url)
    time.sleep(3)
    scroll_page(driver)
    # ... 위와 같은 방식으로 상품 추출 ...
    all_products.extend(products)

driver.quit()

기대할 수 있는 점

제 테스트에서는 Selenium이 페이지당 50개 상품을 모두 가져왔습니다. requests + BS4보다 확실히 낫죠. 다만 각 페이지당 약 45초가 걸렸고(스크롤 지연 포함), 프록시 회전 없이 여러 번 실행하자 결국 차단 경고도 받았습니다. Selenium도 안티 디텍션 플래그를 써도 Amazon의 봇 탐지에 걸릴 수 있습니다. 진지하게 대량 수집하려면 추가 대책이 필요합니다(아래 Anti-Ban Playbook 참고).

다른 불편한 점도 있습니다.

  • WebDriver 버전 불일치는 여전히 가끔 발생하지만, Selenium Manager 덕분에 예전보다 훨씬 덜합니다
  • Amazon이 DOM을 바꾸면 CSS 선택자도 수정해야 합니다
  • 메모리 사용량이 높습니다. 브라우저 인스턴스 하나가 200~400MB RAM을 먹습니다

방법 3: 스크래핑 API로 Amazon Best Sellers 수집하기

스크래핑 API는 쉽게 말해 "어려운 부분은 남에게 맡기자"는 방식입니다. Scrape.do, Oxylabs, ScrapingBee 같은 서비스가 프록시 회전, JavaScript 렌더링, 봇 차단 대응을 처리해 주고, 여러분은 URL만 보내면 HTML 또는 JSON을 받게 됩니다.

작동 방식

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

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

다음은 Scrape.do를 사용하는 예시입니다(가격은 150,000 크레딧 기준 월 $29부터 시작, 렌더링 여부와 관계없이 1 요청 = 1 크레딧).

import requests
from bs4 import BeautifulSoup

api_token = "YOUR_API_TOKEN"
target_url = "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/"

api_url = f"https://api.scrape.do?token={api_token}&url={target_url}&render=true&geoCode=us"
response = requests.get(api_url)
soup = BeautifulSoup(response.text, "html.parser")

이후 파싱은 방법 1과 동일합니다. 같은 선택자, 같은 추출 로직을 쓰면 됩니다.

가격 현실 체크

주요 API들의 Amazon 요청 1,000회당 비용을 가장 좋은 조건 기준으로 정리하면 아래와 같습니다.

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

장단점

장점: 높은 안정성(상위 제공업체 기준 Amazon에서 약 99% 성공률), 드라이버 유지보수 없음, 안티봇 자동 처리, 확장성 우수.

단점: 요청당 과금이라 대규모로 갈수록 비용이 커짐, 여전히 파싱 코드는 직접 작성해야 함, CSS 선택자 변경에는 여전히 취약함. 월 100,000페이지를 처리한다고 하면 총비용 차이는 꽤 큽니다. 자체 구축은 3년 기준 약 $198만인 반면, API 제공업체를 쓰면 약 $33.2만으로 줄어듭니다. 약 71% 절감입니다.

손익분기점은 보통 월 50만~100만 요청 수준입니다. 그보다 적다면 API가 주는 시간 절감 효과가 비용을 훨씬 앞섭니다.

방법 4: Thunderbit으로 Amazon Best Sellers 수집하기 (Python 불필요)

솔직히 말씀드리면, 저는 Thunderbit에서 일합니다. 그래서 이 부분은 그 점을 감안해서 봐 주세요. 하지만 네 가지 방식을 연달아 실제로 테스트해 봤고, 데이터 확보까지 걸리는 시간 차이는 정말 컸습니다.

Thunderbit은 Chrome 확장 프로그램 형태로 동작하는 AI 웹 스크래퍼입니다. 핵심 아이디어는 CSS 선택자나 Python 코드를 직접 쓰는 대신, AI가 페이지를 읽고 무엇을 추출해야 하는지 알아서 파악한다는 것입니다. Amazon Best Sellers의 경우, Thunderbit에는 클릭 한 번으로 동작하는 사전 제작 템플릿이 있습니다.

1단계: Thunderbit Chrome Extension 설치하기

Chrome Web Store로 가서 "Chrome에 추가"를 클릭하세요. 무료 계정에 가입하면 테스트할 수 있을 만큼의 크레딧이 제공됩니다.

2단계: Amazon Best Sellers 페이지 열기

Chrome에서 원하는 Amazon Best Sellers 카테고리 페이지를 엽니다. 예를 들면: https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/

3단계: "One Click Extract" 클릭하기

Thunderbit 사이드바를 열고 "One Click Extract"를 클릭합니다. 그러면 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을 바꿔도(이건 꽤 자주 일어납니다) 아무것도 수정할 필요가 없습니다.

클라우드 스크래핑 모드는 프록시 회전, 렌더링, 안티봇 대응을 자연스럽게 처리합니다. "그냥 작동하는" 솔루션을 원하는 사용자에게는 이만한 안티밴 스트레스 해소가 없습니다.

선택자 유지보수는 이제 그만 Amazon이 마크업을 바꾸면 BeautifulSoup 선택자는 깨집니다. Thunderbit의 AI는 실행할 때마다 페이지를 다시 읽고 필드를 새로 파악합니다. Get Started Free

Anti-Ban Playbook: Amazon 차단을 피하는 방법

Amazon의 봇 탐지는 상당히 공격적입니다. 테스트 중 제 IP가 일시적으로 차단됐고, 포럼 사용자들도 비슷한 경험을 이야기합니다. "여기저기 에러가 나고, Amazon이 아예 홈페이지로 돌려보내기 시작했다"는 식이죠. Python 방식(방법 1~3)을 쓴다면 이 섹션은 정말 중요합니다.

아래는 기본부터 고급 순으로 정리한 대응 전략입니다.

1. User-Agent 문자열을 바꾸기

같은 User-Agent를 반복해서 보내면 바로 수상해집니다. 방법 1의 예시에 있는 5개 이상의 문자열 풀을 사용하고, 요청마다 무작위로 선택하세요.

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

2. 요청 사이에 랜덤 딜레이 넣기

고정 지연은 패턴이 보여 탐지될 수 있습니다. 랜덤이 더 안전합니다.

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

제 경험상 요청 간 25초 정도면 소규모 배치(50회 미만)에서는 비교적 안전했습니다. 더 큰 작업이라면 37초로 늘리세요.

3. 프록시 회전 사용하기

핵심은 이 부분입니다. Proxyway 벤치마크에 따르면 Amazon에서 residential proxy는 평균 약 94% 성공률을 보인 반면, datacenter proxy는 약 59%에 그쳤습니다. 무려 35%포인트 차이입니다. Amazon의 탐지 스택에는 TLS fingerprinting, 행동 분석, IP별 속도 제한이 포함되므로, 일반적인 데이터센터 IP는 몇 초 만에 걸립니다.

Residential proxy는 더 비싸지만($2~$12/GB, 제공업체에 따라 다름) 훨씬 신뢰할 수 있습니다. 코드 예시는 다음과 같습니다.

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

4. 브라우저 지문을 강화하기(Selenium)

options.add_argument('--disable-blink-features=AutomationControlled')
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)

# driver 초기화 후 navigator.webdriver 플래그 제거
driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {
    'source': "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"
})

5. 세션과 쿠키 관리하기

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

session = requests.Session()
# 먼저 홈페이지에 방문해 현실적인 쿠키 확보
session.get("https://www.amazon.com", headers=headers)
time.sleep(2)
# 그다음 대상 페이지 수집
response = session.get(target_url, headers=headers)

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

이 모든 것을 관리하고 싶지 않다면, Thunderbit의 클라우드 스크래핑은 프록시 회전, 렌더링, 안티봇 대응을 투명하게 처리합니다. 스크래핑 API도 대부분의 부분을 기본으로 해결해 줍니다. 제 경험상 안티밴 문제를 디버깅하는 데 드는 시간이 실제 스크래핑 코드를 작성하는 시간보다 더 길어지기 쉽습니다. 그래서 "그냥 되는" 방식이 실제로 ROI가 있습니다.

하위 페이지 강화: 더 풍부한 데이터를 위해 상품 상세 페이지까지 수집하기

Best Sellers 목록 페이지에는 제목, 가격, 평점, 순위 정도만 표시됩니다. 하지만 FBA 리서치에서 진짜 가치 있는 정보는 개별 상품 상세 페이지에 있습니다. 목록만 수집하면 놓치게 되는 항목은 다음과 같습니다.

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

특히 "최초 출시일"은 매우 유용합니다. 상품이 시장에 나온 지 얼마나 됐는지 알려 주므로, 경쟁 수준을 판단하는 중요한 신호가 됩니다. 판매자 수와 Buy Box 소유자를 알면 그 니치 시장에 들어갈 가치가 있는지도 더 잘 판단할 수 있습니다(Amazon이 Buy Box 점유율의 30% 이상을 가져가는 경우 경쟁은 매우 어렵습니다).

Python 방식: 상품 URL을 순회하며 수집하기

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

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

주의할 점은, 100개의 개별 상품 페이지를 때리는 방식은 차단 위험을 크게 높인다는 것입니다. 프록시 회전과 더 긴 딜레이를 예산에 넣어야 합니다.

Thunderbit 방식: 원클릭 하위 페이지 스크래핑

목록 페이지를 먼저 표로 스크래핑한 뒤, Thunderbit에서 "Scrape Subpages"를 클릭하세요. 그러면 AI가 각 상품 URL을 방문해 브랜드, ASIN, 사양, 기능 같은 추가 컬럼을 자동으로 채워 줍니다. 추가 코드도, 선택자도, 설정도 필요 없습니다. 조달 의사결정에 필요한 전체 그림이 필요하지만 상세 페이지 파서를 직접 만들고 유지보수하고 싶지 않은 이커머스 팀에게 특히 유용합니다.

반복 수집 자동화: 시간이 지나도 Best Sellers 모니터링하기

한 번만 수집하는 것도 유용하지만, 지속적인 모니터링에서 진짜 경쟁 우위가 생깁니다. 어떤 상품이 오르고 내리는지 추적하고, 트렌드를 조기에 발견하고, 수주 또는 수개월에 걸친 가격 변동을 살피는 일 말이죠. 이런 작업이야말로 단순한 리서치와 데이터 기반 의사결정을 가르는 기준입니다.

Python 방식: Cron으로 스케줄링하기

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

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

매주 월요일 오전 9시에 실행하려면 다음과 같습니다.

0 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의 Conditions of Use(2025년 5월 업데이트)는 서면 허가 없이 "Amazon 웹사이트의 일부에 접근, 획득, 복사 또는 모니터링하기 위해 자동화된 프로세스나 기술을 사용하는 행위"를 명시적으로 금지합니다. 이는 단순한 이론이 아닙니다. Amazon은 2025년 11월 Perplexity AI를 상대로 무단 자동화 접근 소송을 제기했고, 예비 금지명령을 받아냈습니다.

hiQ 대 LinkedIn 판례: hiQ Labs v. LinkedIn(제9순회, 2022)에서 법원은 공개적으로 접근 가능한 데이터의 스크래핑이 Computer Fraud and Abuse Act를 위반하지 않을 가능성이 높다고 판단했습니다. 하지만 hiQ는 결국 합의하고 스크래핑을 중단했습니다. CFAA에서 이긴다고 해도 계약 위반 소송까지 막아 주는 건 아닙니다.

실무 가이드:

  • 공개적으로 접근 가능한 데이터만 수집하세요(가격, BSR, 상품명 — 개인정보는 제외)
  • 요청 속도를 존중하고 서버에 과부하를 주지 마세요
  • 정당한 경쟁 정보 분석 목적으로만 사용하세요
  • 대규모 수집 전에 반드시 자체 법률 자문을 받으세요
  • 미국 20개 이상 주가 이미 포괄적 개인정보 보호법을 시행하고 있다는 점을 유의하세요

Thunderbit의 클라우드 스크래핑은 일반 브라우저와 유사한 요청 패턴을 사용하지만, 반드시 자체 법률 자문을 통해 준수 여부를 확인해야 합니다.

이건 Python이 필요 없습니다 목표가 파이프라인이 아니라 스프레드시트라면, 클릭 한 번으로 끝낼 수 있습니다. Excel, Google Sheets, Airtable, Notion으로 바로 내보내세요. Get Started Free

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

간단히 정리하면 다음과 같습니다.

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

Amazon Best Sellers용 Thunderbit 사용해 보기 Get Started Free

결론 및 핵심 요약

주말 내내 테스트한 결과, 실제로 남은 인상은 이렇습니다.

requests + BeautifulSoup는 배우기에는 좋지만, 지연 로딩 한계(50개 중 약 30개만 보임)와 취약한 CSS 선택자 때문에 프로덕션에서는 비효율적입니다.

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

스크래핑 API는 프로덕션 규모 수집에서 가장 안정적입니다. Amazon 기준 약 99% 성공률을 기대할 수 있지만, 비용이 누적되고 파싱 코드는 직접 작성해야 합니다.

Thunderbit는 데이터 확보까지 걸리는 시간을 압도적으로 줄였습니다. AI가 레이아웃 변화, 지연 로딩, 페이지네이션, 안티봇 대응까지 별도 설정 없이 처리합니다. 비기술 사용자나 DevOps 부담 없이 반복 데이터를 필요로 하는 팀에게는 가장 실용적인 옵션입니다.

가장 큰 교훈은 무엇일까요? Amazon의 강력한 봇 방어와 잦은 레이아웃 변경 때문에, 장기적으로는 유지보수 없는 솔루션이 가장 많은 시간을 절약해 준다는 점입니다. 깨진 선택자를 고치고 프록시를 바꾸는 데 쓰는 1시간은 실제 분석에 쓰지 못하는 1시간입니다.

노코드 방식을 직접 써 보고 싶으신가요? Thunderbit 무료 플랜에는 몇 개의 Best Sellers 카테고리를 직접 수집해 결과를 확인해 볼 만큼의 크레딧이 들어 있습니다. Python 방식을 선호한다면 위의 코드 예시로 시작하시면 됩니다. 어느 쪽이든, 브라우저 탭만 멍하니 바라보는 대신 Amazon Best Seller 데이터를 스프레드시트로 가져올 수 있습니다.

웹 스크래핑 방식에 대해 더 알고 싶다면 Amazon 상품 및 리뷰 수집 가이드, 웹사이트 데이터를 Excel로 추출하는 방법, 최고의 AI 웹 스크래퍼도 확인해 보세요. Thunderbit YouTube 채널에서 단계별 데모 영상도 볼 수 있습니다.

더 알아보기

Fawad Khan
Fawad Khan
파와드는 글을 쓰며 생계를 이어가고, 솔직히 꽤 좋아해요. 그는 문구 한 줄이 사람들 기억에 남게 만드는 요소와, 반대로 그냥 스크롤해 지나치게 만드는 요소를 오랜 시간 연구해 왔어요. 마케팅에 대해 물어보면 몇 시간이고 이야기할 거예요. 카르보나라에 대해 물어보면 더 오래 이야기할 거고요.
목차
Thunderbit · AI 웹 데이터 에이전트

1클릭 안에서 어떤 페이지든 데이터 추출

25만 명 이상의 사용자가 신뢰
무료 플랜 제공
웹페이지에서 스프레드시트까지
필요한 내용만 설명하세요 — Thunderbit의 AI 에이전트가 수집하고 Excel, Google Sheets, Airtable, Notion으로 내보냅니다. 시작은 무료입니다.
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week