先週末、Amazon の Best Sellers ページを4通りの方法でスクレイピングしようとして、コーヒーを丸ごと1ポット飲み干してしまいました。うまくいった方法が2つ、IP を ban されかけたものが1つ、そして文字通りワンクリックで終わったものが1つ。そこで分かったことを、すべてまとめます。
Amazon は巨大すぎるマーケットプレイスです。取扱商品は 6億件、アクティブな顧客アカウントは 3億1,000万件超 、さらに Best Sellers Rank(BSR)は1時間ごとに更新されます。FBA の商品リサーチ、競合価格の分析、あるいは競合より先にトレンドを見つけたいとき、この Best Seller データはまさに金鉱です。
ただし、そのデータを Amazon から取り出してスプレッドシートに落とし込むのは簡単ではありません。そこで今回は、requests + BeautifulSoup、Selenium、スクレイピング API、そして Thunderbit(私たちのノーコード AI ウェブスクレイパー)を実際に試し、どの方法が本当に使えるのか、そして CAPTCHA 画面とにらめっこするだけで終わるのはどれかを検証しました。
Amazon Best Sellers とは?なぜ重要なのか?
Amazon Best Sellers Rank(BSR)は、各カテゴリ内での販売数をもとに商品をリアルタイムで順位付けする Amazon のランキングです。最近の売れ行きと過去の販売実績の両方を反映し、1時間ごとに更新される人気投票のようなものだと考えると分かりやすいでしょう。Amazon 自身は次のように説明しています。
「Amazon Best Sellers の計算は Amazon の販売実績に基づいており、Amazon で販売された各商品について、最近の販売状況と過去の販売状況を反映するために毎時更新されます。」— Amazon Seller Central
Best Sellers ページには、カテゴリごとの上位100商品が表示され、50件ずつ2ページに分かれています。1ページ目が #1〜#50、2ページ目が #51〜#100 です。なお、Amazon はページ閲覧数やカスタマーレビューは BSR に影響しないと明言しており、純粋に販売数ベースです。
このデータを欲しがるのは誰でしょうか。FBA 用の商品を探す E コマース事業者、競合情報を集める営業チーム、価格動向を追うオペレーション担当、市場成長を追跡するリサーチャーなどです。私の経験では、Amazon で販売している人も、Amazon と競合している人も、最終的にはこのデータをスプレッドシートで扱いたくなります。
なぜ Python で Amazon Best Sellers をスクレイピングするのか?
手作業での商品リサーチは、時間をどんどん奪います。McKinsey の調査では、社員は週に 9.3 時間も情報の検索と収集に費やしているとされています。E コマースチームにとっては、Amazon のページを次々開いて商品名や価格をコピーし、スプレッドシートに貼り付ける作業に何時間も取られてしまう、ということです。しかも翌週にはまた同じ作業の繰り返しです。
Best Sellers のスクレイピングが価値を生む主な用途を、さっと見てみましょう。
| ユースケース | 得られるもの | 役立つ人 |
|---|---|---|
| FBA 商品リサーチ | BSR とレビュー数から、高需要・低競争の商品を見つける | Amazon セラー、ドロップシッパー |
| 競合価格分析 | 自分のカテゴリ内の上位商品における価格変動を追跡する | E コマースチーム、価格分析担当 |
| 市場トレンド監視 | 伸びているカテゴリや季節変動を見つける | プロダクトマネージャー、市場調査担当 |
| リード獲得 | 売れ筋ブランドとその商品群のリストを作る | 営業チーム、B2B アウトリーチ担当 |
| 競合分析 | 自社商品をカテゴリ上位商品と比較する | ブランドマネージャー、戦略チーム |
ROI もはっきりしています。Salesforce の調査では、2,700人のコマース関係者のうち、AI ツールによって E コマース担当者は週平均 6.4 時間を節約できることが分かっています。さらに、自動価格追跡を使うセラーは Buy Box を 67% の確率で獲得するのに対し、手動トラッカーでは 42% にとどまり、価格変動への素早い対応によって売上が 37% 増加したという結果もあります。
Python で Amazon Best Sellers をスクレイピングする4つの方法:ざっくり比較
手順に入る前に、実際に試す前に欲しかった比較表をここで共有します。この表を見れば、自分に合う方法が選びやすくなるはずです。
| 比較項目 | requests + BS4 | Selenium | スクレイピング API(例: Scrape.do) | Thunderbit(ノーコード) |
|---|---|---|---|---|
| 初期設定の難易度 | 中 | 高(driver、ブラウザが必要) | 低(API キーのみ) | かなり低い(Chrome 拡張) |
| 遅延読み込み対応 | いいえ | はい(スクロールを模擬) | はい(レンダリング済み HTML) | はい(AI がレンダリングを処理) |
| ボット対策への強さ | 低い(IP ban のリスク) | 中 | 高い(プロキシを自動ローテーション) | 高い(クラウド + ブラウザモード) |
| 保守の手間 | 高い(セレクターが壊れやすい) | 高い(driver 更新 + セレクター管理) | 低い | かなり低い(レイアウト変更に AI が追従) |
| コスト | 無料 | 無料 | 有料(リクエスト課金) | 無料枠 + 有料プラン |
| 向いている用途 | 単発スクレイプ、学習用途 | JS が重いページ、ログイン必須ページ | 大規模運用、本番用途 | 非エンジニア、素早いリサーチ、継続監視 |
Python の基礎を学びたいなら Method 1 か 2 から始めるとよいでしょう。本番レベルの安定性が必要なら Method 3。コードを書かずに、ワンクリックで結果を得たいなら Method 4 が最短です。
始める前に
- 難易度: 初級〜中級(方法による)
- 必要時間: Thunderbit なら約15分、Python 方式なら約45分
- 必要なもの: Python 3.8 以上(Method 1〜3)、Chrome ブラウザ、Thunderbit Chrome 拡張機能(Method 4)、対象の Amazon Best Sellers カテゴリ URL
方法1: requests + BeautifulSoup で Amazon Best Sellers をスクレイピングする
これは軽量で初心者にも取り組みやすい方法です。ブラウザ自動化は使わず、HTTP リクエストと HTML 解析だけで済みます。そのぶん、Amazon のスクレイピング対策について一番学べたのもこの方法でした。
Step 1: 環境を整える
必要なパッケージをインストールします。
pip install requests beautifulsoup4 pandas
次に、import を準備します。
import requests
from bs4 import BeautifulSoup
import pandas as pd
import random
import time
Step 2: 現実的なヘッダーを付けてリクエストを送る
Amazon は、ボットらしいリクエストをブロックします。最も基本的な対策は、実際のブラウザを装った User-Agent ヘッダーを付けることです。以下は、Geekflare から取得した、2026年3月時点の現実的な User-Agent の例です。
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 に怪しまれています。
Step 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 module のハッシュです。gridItemRootの ID とa-link-normalのクラスは比較的安定していますが、実行前には必ず DevTools でセレクターを確認してください。
Step 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 ban がすぐ起きる(短時間に15回ほどでブロックされました)
- Amazon がページ構造を変更すると CSS セレクターが壊れる。しかも変更はかなり頻繁です
- ページネーションは自前で実装する必要がある
Python のスクレイピングを学ぶには良い方法ですが、本番運用には脆いです。
方法2: Selenium で Amazon Best Sellers をスクレイピングする
Selenium は実際のブラウザを動かすことで、遅延読み込みの問題を解決します。セットアップは重めですが、1ページあたり 50 件すべてを取得できます。
Step 1: Selenium をインストールする
pip install selenium pandas
朗報です。Selenium 4.6 以降では webdriver-manager は不要になりました。driver のダウンロードは 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 に検知されにくくなります。
Step 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回の Page Down で十分でしたが、通信速度によっては調整が必要です。
Step 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 で包むのは重要です。売り切れ商品や欠損フィールドがあると、1件のエラーで全体が止まるのを防げます。
Step 4: ページネーションを処理する
Amazon は Best Sellers の100件を2ページに分けており、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 より明らかに優秀です。ただし、スクロール待ちを含めて 1ページあたり約45秒かかり、プロキシを使わずに何度も実行するとやはりフラグが立ちました。さらに、Selenium は anti-detection フラグを付けても Amazon のボット検知に引っかかることがあります。大規模運用では、追加対策が必要です(後述の Anti-Ban Playbook を参照)。
他にも次のような悩みがあります。
- WebDriver のバージョン不一致はたまに起こる。ただし Selenium Manager でかなり減りました
- Amazon が DOM を変更するたびに CSS セレクターを更新する必要がある
- メモリ消費が大きい。ブラウザインスタンス1つで 200〜400MB の RAM を使います
方法3: スクレイピング API で Amazon Best Sellers を取得する
スクレイピング API は、「面倒な部分は全部お任せ」する方法です。Scrape.do、Oxylabs、ScrapingBee などのサービスが、プロキシのローテーション、JavaScript レンダリング、ボット対策を代行してくれます。ユーザーは URL を送るだけで、HTML か JSON を受け取れます。
仕組み
対象 URL を API エンドポイントへ送信します。API 側が自社インフラ上の実ブラウザでページをレンダリングし、プロキシを回し、CAPTCHA を処理し、きれいな HTML を返してくれます。あとは通常どおり BeautifulSoup で解析するだけです。
Step 1: API 経由でリクエストを送る
以下は Scrape.do の例です(料金は 150,000 credits で月額29ドルから。1 credit はレンダリング有無にかかわらず 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")
ここから先は Method 1 と同じです。セレクターも抽出ロジックも同じまま使えます。
価格の現実
主要 API の Amazon 向け料金を、1,000リクエストあたりで比較するとこうなります。
| プロバイダー | 1,000リクエストあたりのコスト | 備考 |
|---|---|---|
| Scrape.do | 約 $0.19 | 定額、クレジット倍率なし |
| Oxylabs | 約 $1.80 | JS レンダリングで 5倍の倍率 |
| ScrapingBee | 約 $4.90 | プレミアム機能では 5〜25倍の倍率 |
| Bright Data | $5.00以上 | 最も充実したデータ(1商品あたり686項目)だが最も遅い(約66秒/リクエスト) |
メリットとデメリット
メリット: 高い信頼性(主要プロバイダーでは Amazon で 約99% の成功率)、driver の保守不要、ボット対策を自動処理、拡張しやすい。
デメリット: リクエストごとの課金なので、大規模になるほどコストが積み上がる。さらに、解析コードは自分で書く必要があり、CSS セレクターの変更にも弱いです。月10万ページを処理する場合、コスト差はかなり大きくなります。社内構築では3年間で約 $198万 かかるのに対し、API プロバイダーなら約 $33.2万で済み、71% の節約になります。
損益分岐点は通常、月間 50万〜100万リクエストです。それ以下なら、API による時間短縮の価値がコストを大きく上回ります。
方法4: Thunderbit で Amazon Best Sellers をスクレイピングする(Python 不要)
正直に言うと、私は Thunderbit の社員です。その前提はぜひ踏まえてください。ただし、4つの方法を実際に連続で試したうえで言うと、データ取得までの速さは本当に際立っていました。
Thunderbit は Chrome 拡張機能として動く AI ウェブスクレイパーです。核心は、CSS セレクターや Python コードを書く代わりに、AI がページを読み取り、抽出すべきデータを判断する点にあります。Amazon Best Sellers については、ワンクリックで使えるテンプレートがあらかじめ用意されています。
Step 1: Thunderbit Chrome 拡張機能をインストールする
Chrome Web Store を開き、「Chrome に追加」をクリックします。無料アカウントを登録しましょう。無料枠だけでも試すには十分なクレジットがあります。
Step 2: Amazon Best Sellers ページを開く
Chrome で Amazon の Best Sellers カテゴリページを開きます。たとえば次のような URL です。
https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/
Step 3: 「One Click Extract」をクリックする
Thunderbit のサイドバーを開き、「One Click Extract」をクリックします。AI がページ構造を解析し、Product Name、Price、Rating、Image URL、Vendor、Product URL、Rank といった列を自動で見つけます。私のテストでは、約3秒で必要な項目をすべて正しく特定できました。

列名の変更、削除、追加もできます。さらに、各フィールドにカスタム AI プロンプトを追加することも可能です。たとえば「Electronics/Apparel/Home に分類して」と指定すれば、各商品にカテゴリタグを付けられます。
Step 4: 「Scrape」をクリックする
「Scrape」ボタンを押します。Thunderbit がページ上の全商品データを構造化テーブルとして埋め込みます。クラウドモードでは最大50ページを並列処理し、遅延読み込みやページネーションも自動で処理します。
Step 5: 無料でエクスポートする
「Export」をクリックして、保存先を選びます。Excel、Google Sheets、Airtable、Notion に出力できます。どのプランでもエクスポートは無料で、追加料金はありません。

ページを開いてから完全なスプレッドシートができるまで、全体で約90秒でした。比較すると、Method 1 は約20分(遅延読み込みの調整込み)、Method 2 は約35分(Selenium のセットアップ込み)、Method 3 は約15分(API アカウントの準備込み)でした。
Thunderbit が Amazon に強い理由
AI が毎回ページを新しく読み直すため、レイアウト変更にも自動で追従します。つまり、CSS セレクターの保守が不要です。これはスクレイピング関連フォーラムで最もよく聞く不満、つまり「基本的なスクレイパーでは足りない。要素が変わるたびに大量の例外処理が必要になる」という問題を直接解消します。Amazon が DOM を変更しても、更新作業は不要です。
クラウドスクレイピングモードでは、プロキシのローテーション、レンダリング、ボット対策を透過的に処理します。「とにかく動く」ことを求めるユーザーにとって、anti-ban の悩みを丸ごと消してくれる方法です。
セレクター保守をスキップ Amazon のマークアップが変わると、BeautifulSoup のセレクターは壊れます。Thunderbit は毎回 AI がページを読み直し、項目を再抽出します。 Get Started Free
Anti-Ban Playbook: Amazon にブロックされないための対策
Amazon のボット検知はかなり厳しめです。テスト中に私の IP も一時的にブロックされましたし、フォーラムでも同じ声が上がっています。「あちこちでエラーが出る、Amazon にホームページへリダイレクトされるようになった」などです。Python で進めるなら(Method 1〜3)、この章は重要です。
以下は、基本から高度なものまで段階的に並べた対策です。
1. User-Agent をローテーションする
同じ User-Agent を何度も送るのは不自然です。Method 1 のコード例にある 5種類以上の文字列プールを使い、リクエストごとにランダムで選びましょう。
headers = {"User-Agent": random.choice(USER_AGENTS)}
2. リクエスト間にランダムな待機時間を入れる
固定間隔はパターンとして検知されやすいです。ランダム化した方が安全です。
time.sleep(random.uniform(2, 5))
私の実験では、リクエスト間を 2〜5秒にすると、小規模バッチ(50リクエスト未満)では目立ちにくくなりました。より大きな処理では、3〜7秒に広げるとよいでしょう。
3. プロキシをローテーションする
ここが最重要です。Proxyway のベンチマークでは、Amazon に対する成功率は residential proxy が平均約94%、datacenter proxy は約59%でした。35ポイントの差です。Amazon の検知は TLS フィンガープリント、行動分析、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. セッションと Cookie を管理する
リクエスト間で Cookie を維持すると、スクレイパーが実際のユーザーセッションに近く見えます。
session = requests.Session()
# まずホームページを訪れて、自然な Cookie を取得する
session.get("https://www.amazon.com", headers=headers)
time.sleep(2)
# その後、対象ページを取得する
response = session.get(target_url, headers=headers)
6. 面倒ごとを最初から避けるべきケース
こうした管理を一切したくない場合、Thunderbit のクラウドスクレイピングならプロキシのローテーション、レンダリング、ボット対策を透過的に処理できます。スクレイピング API も、これらの多くを最初からカバーしています。私の経験では、anti-ban 対策のデバッグに費やす時間は、実際のスクレイピングコードを書く時間を上回ることが少なくありません。つまり、「とにかく動く」方式にはちゃんと ROI があります。
サブページの拡張: 商品詳細ページをスクレイピングして情報を増やす
Best Sellers の一覧ページで取れるのは、タイトル、価格、評価、順位といった基本情報だけです。しかし、FBA リサーチで本当に価値があるのは個別の商品詳細ページです。リストだけをスクレイピングした場合に、何が足りないかを見てみましょう。
| 項目 | 一覧ページ | 商品詳細ページ |
|---|---|---|
| 商品名 | ✅ | ✅ |
| 価格 | ✅ | ✅ |
| 評価 | ✅ | ✅ |
| BSR ランク | ✅ | ✅(サブカテゴリ順位も含む) |
| ブランド | ❌ | ✅ |
| ASIN | ❌ | ✅ |
| 初回販売日 | ❌ | ✅ |
| サイズ/重量 | ❌ | ✅ |
| 販売者数 | ❌ | ✅ |
| 箇条書きの特徴 | ❌ | ✅ |
| Buy Box の所有者 | ❌ | ✅ |
特に「初回販売日」は価値が高い項目です。商品の市場投入からどれくらい経っているかが分かり、競争分析の重要な指標になります。また、販売者数と Buy Box の所有者が分かれば、その商品ジャンルに参入する価値があるかどうかを判断しやすくなります(Amazon 自身が Buy Box を30%以上持っている場合、競争はかなり厳しいです)。
Python での商品 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件の個別商品ページにアクセスすると、ban のリスクは大きく上がります。プロキシのローテーションと長めの待機時間を前提に考えてください。
Thunderbit の方法: ワンクリックでサブページもスクレイピング
一覧ページをテーブル化したあと、Thunderbit で「Scrape Subpages」をクリックします。すると AI が各商品 URL を訪問し、ブランド、ASIN、仕様、特徴などの追加列を自動で補完します。コードもセレクターも追加設定も不要です。仕入れ判断のために全体像が欲しいが、詳細ページのパーサーを自作・保守したくない E コマースチームに特に向いています。
定期スクレイピングの自動化: 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 を使えば同じことができます。PC を起動したままにせず常時運用したい場合は、VPS や AWS Lambda に置く方法もありますが、その分インフラの複雑さは増します。
失敗を見逃さないよう、ログとエラー通知を追加しておきましょう。2週間前に壊れていたのを、あとから静かに発見するほど嫌なことはありません。
Thunderbit の方法: 自然言語で指定できる Scheduled Scraper
Thunderbit の Scheduled Scraper なら、間隔を自然言語でそのまま書けます。「毎週月曜の9時」や「毎日8時」のように入力するだけで、AI がスケジュールを解釈します。スクレイプは Thunderbit のクラウドサーバー上で実行されるため、ブラウザや自分の PC を起動し続ける必要はありません。データは Google Sheets や Airtable に自動で出力されるので、サーバー管理なしでライブ監視ダッシュボードを作れます。DevOps の手間をかけずに継続的な可視化をしたいオペレーションチームに最適です。
Amazon をスクレイピングする際の法的・倫理的な注意点
私は弁護士ではなく、これは法的助言ではありません。ただし、スクレイピングの解説で法的な論点を無視するのは無責任です。実際、フォーラムでも利用規約への懸念がはっきり示されていますし、それには理由があります。
Amazon の robots.txt: 2026年時点で、Amazon の robots.txt には80以上の Disallow パスがありますが、標準の User-Agent に対して /gp/bestsellers/ は明示的にはブロックされていません。ただし、ClaudeBot、GPTBot、Scrapy など 35以上の AI 向け User-Agent には一律で Disallow: / が適用されています。個別に禁止されていないからといって、Amazon がスクレイピングを容認しているわけではありません。
Amazon の利用規約: Amazon の Conditions of Use(2025年5月更新)では、書面による許可なく「Amazon サイトの一部にアクセス、取得、コピー、監視するために自動化された処理や技術を使用すること」を明確に禁止しています。これは理論上の話ではありません。Amazon は 2025年11月に、無許可の自動アクセスを行ったとして Perplexity AI を提訴し、予備差止命令を勝ち取りました。
hiQ v. LinkedIn の前例: hiQ Labs v. LinkedIn(第9巡回、2022年)では、公開データのスクレイピングは Computer Fraud and Abuse Act に違反しない可能性が高いとされました。ただし hiQ は最終的に和解し、スクレイピングを停止することで合意しています。CFAA で勝っても、契約違反の主張まで防げるわけではありません。
実務上の指針:
- 公開されているデータのみに絞る(価格、BSR、商品タイトルなど。PII は扱わない)
- レート制限を守り、サーバーに負荷をかけない
- 正当な競合情報収集の目的で使う
- 大規模に行う前に、必ず自社の法務に相談する
- 米国の20以上の州で包括的なプライバシー法が施行されていることを意識する
Thunderbit のクラウドスクレイピングは、ブラウザに近い標準的なリクエストパターンを使いますが、最終的な適法性は必ず自社の法務で確認してください。
このケースは Python 不要 目的がパイプラインではなくスプレッドシートなら、ワンクリックで到達できます。Excel、Google Sheets、Airtable、Notion にそのまま出力可能です。 Get Started Free
どの方法を使うべきか?簡単な判断ガイド
要するに、こう考えると分かりやすいです。
- 「Python を学びたい。週末の課題にしたい」 → Method 1(requests + BeautifulSoup)。HTTP リクエスト、HTML 解析、Amazon のボット対策を一気に学べます。
- 「JavaScript が重いページやログイン後セッションを扱いたい」 → Method 2(Selenium)。重いですが、動的コンテンツに対応できます。
- 「本番で大規模に回したい」 → Method 3(スクレイピング API)。プロキシやレンダリングはお任せできます。総所有コスト の面でも、月50万リクエスト未満なら API が有利です。
- 「開発者ではないけれど、2分でデータが欲しい」 → Method 4 (Thunderbit)。コード不要、セレクター不要、保守不要。
- 「サーバー管理なしで継続監視したい」 → Thunderbit Scheduled Scraper。設定したら放置で OK。
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 データをスプレッドシートで扱えるようになります。
Web スクレイピングの他の手法については、Amazon の商品・レビューのスクレイピング、Web サイトから Excel へデータを抽出する方法、おすすめの AI ウェブスクレイパー もご覧ください。さらに、Thunderbit の YouTube チャンネル では、手順付きの解説動画も視聴できます。
さらに詳しく学ぶ


