價格與評論可支援選品及定價。真正的難點不是增加請求量,而是正確理解資料語義、取得適當授權,並讓每筆資料可以追溯。
Amazon 各國站點分屬不同市場;同一個 ASIN 的報價、幣別和配送結果可能不同。Amazon 使用 Marketplace IDs 區分市場,Sellers API 提供市場語言與幣別,而 Catalog Items 的 locale 參數會影響摘要語系。因此,不應只用 ASIN 合併不同市場的資料。
合規取得路徑
- 聯盟行銷用途可以先評估 Amazon Creators API。
- 符合資格的 Sellers 或 Vendors 可以使用 Catalog Items;Product Pricing v2022-05-01 僅供符合資格的 Sellers 使用。
- Customer Feedback API 提供每週更新、目前僅支援英文的評論趨勢,並不是完整評論下載介面。其他需求須取得書面授權,或使用經授權的資料來源。
每個 marketplace 都須分別檢查對應網域的服務條款、robots.txt、隱私規則和資料權利;Amazon.com 的使用條款與 robots.txt 不能替代其他國家站點的規則。
RFC 9309 也明確指出,robots 規則本身不是存取授權。遇到 CAPTCHA、登入要求或其他存取控制時應停止,不應嘗試繞過。
Python 請求控制
下列示例只展示認證完成後的傳輸、代理、逾時、重試和限流流程。
authorized_session 必須由 Amazon 官方 SDK 或獲批准的內部簽名層提供,負責對每次請求進行授權或簽名;示例本身不實作 SP-API 認證。
import os, time
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
def collect(authorized_session, urls):
authorized_session.mount("https://", HTTPAdapter(max_retries=Retry(
total=2, backoff_factor=1,
status_forcelist=(429, 500, 502, 503, 504),
allowed_methods={"GET"}, respect_retry_after_header=True)))
proxy = os.getenv("SOLIS_PROXY_URL")
gap = max(0.1, float(os.environ["REQUEST_GAP"]))
due, payloads = 0.0, []
urls = [url.strip() for url in urls if url.strip()]
for url in urls:
time.sleep(max(0, due - time.monotonic()))
response = authorized_session.get(
url,
proxies={"https": proxy} if proxy else None,
timeout=(3.05, 20),
)
due = time.monotonic() + gap
response.raise_for_status()
payloads.append(response.json())
return payloads
請求間隔應根據各 API operation 的官方配額設定。該示例不會自動讀取配額,而且只適用於單一進程;多進程環境需要共享限流器,並監控 429 回應和配額標頭。
程式不應主動把代理憑證寫入日誌,正式環境還應對異常和錯誤資訊進行遮罩。
價格欄位與去重
| 欄位 | 定義 |
|---|---|
marketplace_id、asin | 對應市場和商品 |
seller_identity、condition、fulfillment | 記錄報價主體、商品狀況和履約方式 |
offer_key | 優先使用帶有官方唯一命名空間的來源 ID;使用 seller SKU 時,至少組合 seller_identity + seller_sku;沒有穩定來源 ID 時才使用報價屬性生成內部鍵,並限定在 marketplace_id + asin 範圍內 |
price_type、amount、currency | 使用 Decimal(str(raw_amount));商品價格、運費、稅額和落地價必須分欄,不能混同比較 |
observed_at、ingested_at | 分別記錄來源觀測時間和資料庫寫入時間,統一使用 UTC |
source、source_batch_id、content_hash | 批次鍵負責重複執行時的冪等寫入;內容雜湊只負責檢測資料是否發生變化 |
換匯時應保留匯率、匯率日期和原始幣別。評論趨勢資料則應保留統計期間、語言和更新時間,不能把系統推算結果當成原始評論。
代理使用邊界
| 類型 | 適合的已授權用途 | 限制 |
|---|---|---|
| 動態住宅代理 | 驗證不同地區看到的公開體驗 | 不得用於規避存取控制 |
| 靜態資料中心代理 | 固定出口、IP 白名單和授權 API | 不代表真實消費者網路 |
代理只是一種網路路由工具,不會自動授予資料使用權。專案還應保留資料來源、授權依據和刪除期限,並避免蒐集評論者的非必要個人資料。
當條款、robots.txt 或介面權限發生變化時,應暫停排程並重新檢查。建議先使用少量 ASIN 驗證資料模型和業務價值,確認無誤後再擴大處理規模。