Amazon Rufus Scraper API: 大規模にAmazonから会話型ショッピングのインサイトを抽出する方法
Specialist in Anti-Bot Strategies
Amazon Rufus Scraper API
Amazon Rufusは、ますます多くのAmazonでの購入前調査を促進する会話型ショッピングアシスタントです。「この食器洗い機は食器洗い機に対応していますか?」、「これはM2モデルと比較してどうですか?」、*「€100以下のベストランニングシューズは?」*といった質問に、製品を意識した応答で答えます。リプライサー、比較エンジン、ブランドモニター、AIショッピングパイプラインにとって、Rufusが提供する回答は非常に影響力のあるシグナルです。
Rufusはログインした顧客セッションに制限されており、サーバー送信イベント(SSE)としてその応答をストリーミングします。これにより、匿名ブラウジングではアクセスできず、DIYスクレイピングを通じて統合するのが非現実的になります。Scrapeless Amazon Rufus Scraper APIは、認証、ボット対策トークン、マーケットプレイスのルーティング、ストリームの解析をすべてサーバーサイドで処理し、クリーンなHTTP POSTで公開します。このガイドでは、APIの使用理由、リクエストとレスポンスの仕組み、パラメーターリファレンス、PythonとNode.jsでの統合、および一般的な問題とその解決策について説明します。
パート 1: Scrapeless Amazon Rufus Scraper APIを使用する理由
Rufus APIは、認証済みのストリーミングAmazonインターフェースを単一の構造化JSON HTTPコールに変換します。
- Amazonログイン不要。 認証はScrapelessで処理されます。呼び出し側はログインフォーム、MFAプロンプト、クッキージャーを見ることはありません。
- ストリーミング応答、解析済み。 一般的なRufusの応答は、7つのイベントタイプにわたる60〜80のサーバー送信イベントのチャンクです。APIはこのストリームを単一の解析済み
resultオブジェクトにまとめます—iter_lines、\\n\\n境界検出、呼び出し側でのイベントタイプのディスパッチは不要です。 - 1つのパラメータでマーケットプレイスのルーティング。
domain: "www.amazon.es"、"www.amazon.com"、"www.amazon.de"—APIはロケールに一致したプロキシを自動的に通します。 - アウトオブボックスの構造化製品データ。
result.productsは、asin、title、rating、reviews、image_url、category、およびfooterエディトリアルタグを持つ辞書のリストを返します—Rufusがクエリに対してキュレーションしたセットです。 - 関連質問のマイニング。 各応答には、Rufusが生成した3〜5のフォローアップ質問も含まれています。これはSEO調査、コンテンツ計画、または連鎖的なRufus呼び出しのためのクリーンなクエリ拡張ソースです。
- 同じScrapelessアカウント、同じダッシュボード。 Rufus APIは、Scrapeless製品ラインの他のAPIトークンと同じAPIトークンを使用します—スクレイパーAPI、スクレイピングブラウザ、ユニバーサルスクレイピングAPI。1つのアカウントで多くのインターフェースが利用可能です。
ベストAmazon Rufusスクレイピングソリューション
Scrapeless Amazon Rufus Scraper APIは、Rufusの会話型出力を構造化データとして必要とする生産パイプライン向けに構築されており、各クエリごとに認証されたヘッドフルブラウザを実行する統合課題を避けることができます。
- サーバーサイド認証。 Scrapelessは認証されたAmazonセッションを保持し、これを回転させます。呼び出し側はクエリを送信し、解析されたJSONを受け取ります。
- 事前解析された出力。 デフォルトの応答は
resultオブジェクトを持つJSONエンベロープで、すでにproducts、related_questions、interim_messages、およびrequest_contextで埋められています。一般的なケースではストリーミングクライアントの結合は不要です。 - オプションの生SSE。
is_sse_data: trueを設定すると、進行中のUI更新や完全なイベント監査が必要な呼び出し側向けに生のevent:<type>\ndata:<json>\n\nストリームが公開されます。 - マルチマーケットプレイス。
www.amazon.esはエンドツーエンドで確認されており、他のマーケットプレイスドメイン(.com、.co.uk、.de、.co.jp、.com.au、.in、.com.mx、.com.br)にも同じ形が適用されます。
Scrapeless Scraper APIでAmazon Rufusをスクレイピングする方法
エンドツーエンドのワークフローは4つのステップで構成されています:APIトークンを取得する、リクエストボディを構築する、POSTを送信する、レスポンスを解析する。scrapeless.comにサインアップし、ダッシュボードからAPIトークンをコピーして環境変数として保存します:
bash
export SCRAPELESS_API_TOKEN=sk_your_token_here
エンドポイントはPOST https://api.scrapeless.com/api/v1/scraper/requestで、ヘッダーにx-api-token: <YOUR_TOKEN>を含め、JSONボディをとります。レスポンスはJSONエンベロープで、resultに解析されたRufus出力が含まれています。
キーワードクエリでRufusをスクレイピングする方法
これはRufusに質問して構造化されたAmazonに基づく回答を得るための標準的なフローです。
ステップ 1: リクエストボディを構築する
リクエストボディには、inputの下に3つの必須フィールドがあります:type(常に"rufus")、keywords(質問またはショッピングの意図)、domain(Amazonマーケットプレイス)です。
json
{
"actor": "scraper.amazon",
"input": {
"type": "rufus",
"keywords": "macbook air m3は動画編集に適していますか?",
"domain": "www.amazon.es"
}
}
ステップ 2: パラメータを設定する
keywords は自由形式の自然言語クエリを受け入れます — 直接の質問(「これは防水ですか?」)、比較(「M1 と M3 のビデオ性能の違いは?」)、またはショッピング意図(「学生に最適な MacBook は?」)です。 domain は Amazon のマーケットプレイスを選択します。これは、Rufus がその回答をどの地域に基づくかに合わせるためのものです。オプションの is_sse_data ブール値はデフォルトで false(解析された JSON エンベロープ)になっています。これを true に設定すると、生の SSE ストリームを受け取ることができます。
ステップ3: リクエストの送信
x-api-token ヘッダーを使用して、ボディをエンドポイントに POST します。デフォルトの応答は、クエリの約 130 KB(通常のクエリ)のチャンク化された HTTP 応答として、エンドツーエンドで 5~15 秒で届きます。JSON を解析し、result.products と result.related_questions を読み取ります。
典型的な成功応答:
json
{
"html": "id:CHUNK_0\nevent:context\ndata:{...}\n\nid:CHUNK_1\nevent:affordance\n...",
"metadata": {
"rawUrl": "https://api.scrapeless.com/storage/scrapeless.scraper.amazon/.../<id>.html",
"type": "rufus"
},
"result": {
"request_context": { "requestId": "TMWTVKB12QFTQEV9D2GJ", "sessionId": "257-9398007-5193547", "bsr": {...} },
"user_query": "MacBook Air M3 はビデオ編集に良いですか",
"interim_messages": ["確認中...", "データ収集中…"],
"products": [ { "asin": "B08N5TLVQ2", "title": "Apple MacBook Air...", "rating": "4.8", "reviews": "2.045", ... }, ... ],
"related_questions": ["MacBook Air vs MacBook Pro の違い", "学生に最適な MacBook はどれですか?", ...],
"feedback_controls": { "groupId": "...", "text": "..." }
}
}
Scrapeless Amazon Rufus スクレイピング API パラメータ
| パラメータ | 必須 | 型 | 説明 |
|---|---|---|---|
actor |
はい | 文字列 | "scraper.amazon" である必要があります |
input.type |
はい | 文字列 | "rufus" である必要があります |
input.keywords |
はい | 文字列 | Rufus 用の自由形式のクエリ — 質問、比較、またはショッピング意図 |
input.domain |
はい | 文字列 | Amazon マーケットプレイスのドメイン、例: "www.amazon.es", "www.amazon.com", "www.amazon.de" |
input.is_sse_data |
任意 | ブール値 | true の場合、応答は生の SSE ストリームになります。false(デフォルト)の場合、応答は result オブジェクトが事前に埋め込まれた解析済み JSON エンベロープです。 |
API が返す解析された result オブジェクト:
| フィールド | 型 | 説明 |
|---|---|---|
request_context |
オブジェクト | サーバー側の識別子 — requestId、sessionId、bsr (UI 動作ヒント) |
user_query |
文字列 | 入力された keywords のエコー — 非同期パイプラインでの往復に便利 |
interim_messages |
文字列の配列 | マーケットプレイスにローカライズされたローディング状態メッセージ(例: "確認中...", "データ収集中…" は .es 用) |
products |
オブジェクトの配列 | Rufus のキュレーションされた製品リスト — 通常は 3~6 アイテムで、asin、url、title、rating、reviews、category、image_url、image_alt、footer を含む |
related_questions |
文字列の配列 | Rufus が生成した 3~5 のフォローアップ質問 — クエリの拡張やチェーンコールに使用可能 |
feedback_controls |
オブジェクト | Rufus が回答の下に表示するいいね/バッドフィードバック用の文字列 |
完全な API リファレンス: apidocs.scrapeless.com/api-34218448。
Scrapeless をプロジェクトに統合する方法
統合は単一の HTTP POST です。以下は、Python と Node.js における作業例です — どちらも標準リクエストをターゲットにしています(keywords="MacBook Air M3 はビデオ編集に良いですか"、domain="www.amazon.es")。
Python
python
import os
import requests
URL = "https://api.scrapeless.com/api/v1/scraper/request"
HEADERS = {
"x-api-token": os.environ["SCRAPELESS_API_TOKEN"],
"Content-Type": "application/json",
}
BODY = {
"actor": "scraper.amazon",
"input": {
"type": "rufus",
"keywords": "MacBook Air M3 はビデオ編集に良いですか",
"domain": "www.amazon.es",
},
}
resp = requests.post(URL, headers=HEADERS, json=BODY, timeout=60)
resp.raise_for_status()
data = resp.json()
# 解析された Rufus 出力
for product in data["result"]["products"]:
print(f"{product['asin']} {product['rating']}★ {product['title'][:80]}")
print("\n関連質問:")
for q in data["result"]["related_questions"]:
print(f" - {q}")
Node.js (18+)
js
const URL = "https://api.scrapeless.com/api/v1/scraper/request";
const resp = await fetch(URL, {
method: "POST",
headers: {
"x-api-token": process.env.SCRAPELESS_API_TOKEN,
"Content-Type": "application/json",
},
body: JSON.stringify({
actor: "scraper.amazon",
input: {
type: "rufus",
keywords: "MacBook Air M3 はビデオ編集に良いですか",
domain: "www.amazon.es",
},
}),
});
if (!resp.ok) throw new Error(`HTTP ${resp.status}: ${await resp.text()}`);
const data = await resp.json();
for (const p of data.result.products) {
console.log(`${p.asin} ${p.rating}★ ${p.title.slice(0, 80)}`);
}
console.log("\n関連質問:");
以下の英語のテキストを日本語に翻訳します。
javascript
for (const q of data.result.related_questions) {
console.log(` - ${q}`);
}
両方のクライアントは解析された data.result オブジェクトを返し、その形状は同一です — SSE 処理なし、チャンクの再組み立てなし。生の SSE 消費のために(進行中の UI、フルフィデリティのイベント監査など)、ボディ内に input.is_sse_data: true を設定し、応答をストリームとして読み取ります。
Python — 生の SSE モード
python
import os, json, requests
resp = requests.post(URL, headers=HEADERS, json={
"actor": "scraper.amazon",
"input": {
"type": "rufus",
"keywords": "macbook air m3は動画編集に適していますか",
"domain": "www.amazon.es",
"is_sse_data": True,
},
}, stream=True, timeout=60)
event_type, data_buf = None, []
for line in resp.iter_lines(decode_unicode=True):
if line is None:
continue
if line.startswith("event:"):
event_type = line[len("event:"):].strip()
elif line.startswith("data:"):
data_buf.append(line[len("data:"):])
elif line == "":
if event_type and data_buf:
payload = json.loads("".join(data_buf))
print(event_type, "->", str(payload)[:120])
event_type, data_buf = None, []
Node.js — 生の SSE モード
js
const resp = await fetch(URL, {
method: "POST",
headers: { "x-api-token": process.env.SCRAPELESS_API_TOKEN, "Content-Type": "application/json" },
body: JSON.stringify({
actor: "scraper.amazon",
input: {
type: "rufus", keywords: "macbook air m3は動画編集に適していますか",
domain: "www.amazon.es", is_sse_data: true,
},
}),
});
const reader = resp.body.getReader();
const decoder = new TextDecoder("utf-8");
let buf = "";
while (true) {
const { value, done } = await reader.read();
if (done) break;
buf += decoder.decode(value, { stream: true });
const frames = buf.split("\n\n");
buf = frames.pop();
for (const frame of frames) {
const lines = frame.split("\n");
const evtLine = lines.find(l => l.startsWith("event:"));
const dataLine = lines.find(l => l.startsWith("data:"));
if (evtLine && dataLine) {
const event = evtLine.slice("event:".length).trim();
const data = JSON.parse(dataLine.slice("data:".length));
console.log(event, "->", JSON.stringify(data).slice(0, 120));
}
}
}
生モードでは、60〜80のフレームを7つのイベントタイプ(context、affordance、interim、inference、feedback、remove、close)で期待します。inference イベントは統合された回答を運び、close はストリームの終わりを示します。
データスクレイピングで遭遇する一般的な問題を避ける方法
目にする可能性のあるエラーレスポンス
API はすべてのエラーケースに対して構造化された JSON を返します — code は Scrapeless エラーコード、message は人間に読める説明です。意図的に無効なリクエストからキャプチャされた実際のレスポンス:
| シナリオ | HTTP | レスポンスボディ |
|---|---|---|
| 無効な API トークン | 401 |
{"code":14404,"message":"無効なアクセストークン"} |
| 誤ったアクター名 | 400 |
{"code":14002,"message":"無効なアクター: <name>"} |
欠落または誤ったフィールド名(例: page の代わりに type) |
400 |
{"code":20404,"message":"入力の未定義エラー"} |
欠落または無効な domain |
400 |
{"code":20500,"message":"Type:rufus スクレイパーエラー: rpc エラー: コード = Code(20500) 説明 = Rufus スクレイピング失敗、エラーが続く場合はリージョンを変更してください"} |
一時的な上流の障害(Amazonからのunexpected EOF) |
400 |
{"code":20500,"message":"Type:rufus スクレイパーエラー: [Amazon] rufusStreaming リクエスト <url> 失敗 :status=599,msg=unexpected EOF"} |
空または欠落した keywords |
200 |
成功したエンベロープですが、SSE ストリームには event:softlanding_error チャンクが含まれており、result.products は空です。result.products.length === 0 を確認するか、htmlで softlanding_error をスキャンしてください。 |
144xx 範囲のコードは認証とアクター検証、204xx はリクエスト形状(入力フィールド)エラー、205xx は上流の Amazon エラーです。unexpected EOF や リージョンを変更してください といった 205xx は一時的なものと見なし、小さなバックオフで再試行してください。
結論
Amazon Rufus は、製品発見、比較、および購入前研究のための重要なサーフェスになりつつあります。ショッピング意図データに依存するチームにとって、製品推奨、比較コンテキスト、および SEO、価格設定、AI ショッピングのワークフローにフィードバックできるフォローアップ質問などの貴重なシグナルを提供します。
Scrapeless Amazon Rufus Scraper API は、Rufus と作業する際の最も困難な部分を取り除きます。Amazon のログインセッション、SSE の解析、ボット対策の挑戦、およびマーケットプレイスのルーティングを自分で管理する代わりに、1 回のリクエストを送信し、構造化された出力を受け取ります。これにより、Rufus 生成のショッピングインテリジェンスへの信頼性の高い、スケーラブルなアクセスが必要なプロダクションパイプラインにとって実用的な選択肢となります。
無料プランを請求し、スクレイピングを開始してください:
Scrapelessの活気あるコミュニティに参加して、$5-10の無料プランを手に入れ、革新者たちとつながりましょう:
Scrapeless公式Discordコミュニティ
Scrapeless公式Telegramコミュニティ
Amazon Rufus Scraper APIに関するFAQ
Q: AmazonアカウントやMFAは必要ですか?
いいえ。認証はScrapelessによってサーバー側で処理されます。呼び出し元のコードはresult.productsとresult.related_questionsのみを見ます — Amazonのログインフォーム、MFAチャレンジ、クッキージャーは決して表示されません。
Q: Amazon Rufusは何に使われますか?
Amazon Rufusは、Amazonの会話型ショッピングアシスタントです。シッパーはそれを使って、商品に関する質問をしたり、オプションを比較したり、利用ケース、予算、商品属性に基づいて推奨を受けたりします。
Q: Amazon RufusがSEOや商品リサーチに重要な理由は?
Rufusは、ユーザーが購入前に考えることを反映するリアルなショッピング質問とフォローアップ意図を暴露します。それらの質問は、キーワードの拡張、コンテンツ計画、商品ポジショニング、およびショッパーが最も気にしていることの理解に役立ちます。
Q: Amazon Rufusのデータは直接Amazonから取得できますか?
匿名ブラウジングでは信頼性がありません。Rufusはログインした顧客セッションに関連付けられており、その応答をストリームします。これにより、手動でのスクレイピングは脆弱で拡張が難しくなります。Scrapelessがその複雑さをサーバー側で処理します。
Q: ScrapelessはカスタムRufusスクレイパーよりも優れている理由は?
Scrapelessは認証、アンチボットトークン、ストリームの解析、市場ルーティングをあなたのために処理します。それにより、メンテナンス負担が軽減され、DIYブラウザやSSEパイプラインよりもAPIを本番環境で使いやすくします。
Q: Rufus APIはどの市場をサポートしていますか?
このAPIはwww.amazon.com、www.amazon.es、www.amazon.deなどのAmazonマーケットプレイスドメイン向けに設計されています。これにより、Rufusの回答が地域ごとにローカライズされる必要があるマルチマーケットワークフローに適しています。現在、ヨーロッパとUSAのドメインがサポートされており、Scrapelessはサポートされるドメインを継続的に拡大しています!
Q: Rufus APIはどのようなデータを返しますか?
通常、商品推奨、関連質問、およびリクエストコンテキストを含む構造化されたJSONオブジェクトを返します。クエリに応じて、イベントレベルの全データが必要な場合は、生のストリーミング出力も使用できます。
Q: ブランドはRufusデータをどのように活用できますか?
ブランドはRufusデータを競合リサーチ、商品比較分析、コンテンツ戦略、ショッピング意図のマイニング、AI支援のマーチャンダイジングに使用できます。Rufusが最も頻繁に強調する商品属性を理解したいときに特に便利です。
Q: Rufus APIはAIエージェントや自動化に役立ちますか?
はい。ブラウザセッションの代わりに構造化データを返すため、AIエージェント、エンリッチメントパイプライン、推奨システム、および他の自動化されたワークフローにきれいにフィットします。
Scrapelessでは、適用される法律、規制、およびWebサイトのプライバシーポリシーを厳密に遵守しながら、公開されているデータのみにアクセスします。 このブログのコンテンツは、デモンストレーションのみを目的としており、違法または侵害の活動は含まれません。 このブログまたはサードパーティのリンクからの情報の使用に対するすべての責任を保証せず、放棄します。 スクレイピング活動に従事する前に、法律顧問に相談し、ターゲットウェブサイトの利用規約を確認するか、必要な許可を取得してください。



