首頁 / 博客 / 網路資料採集
【2026】Amazon 商品價格與評論資料採集:Python 工作流程與代理策略

【2026】Amazon 商品價格與評論資料採集:Python 工作流程與代理策略

分類:網路資料採集 釋出時間:2026-07-21 16:57 作者:SolisProxy 瀏覽:7

價格與評論可支援選品及定價。真正的難點不是增加請求量,而是正確理解資料語義、取得適當授權,並讓每筆資料可以追溯。

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_idasin對應市場和商品
seller_identityconditionfulfillment記錄報價主體、商品狀況和履約方式
offer_key優先使用帶有官方唯一命名空間的來源 ID;使用 seller SKU 時,至少組合 seller_identity + seller_sku;沒有穩定來源 ID 時才使用報價屬性生成內部鍵,並限定在 marketplace_id + asin 範圍內
price_typeamountcurrency使用 Decimal(str(raw_amount));商品價格、運費、稅額和落地價必須分欄,不能混同比較
observed_atingested_at分別記錄來源觀測時間和資料庫寫入時間,統一使用 UTC
sourcesource_batch_idcontent_hash批次鍵負責重複執行時的冪等寫入;內容雜湊只負責檢測資料是否發生變化

換匯時應保留匯率、匯率日期和原始幣別。評論趨勢資料則應保留統計期間、語言和更新時間,不能把系統推算結果當成原始評論。

代理使用邊界

類型適合的已授權用途限制
動態住宅代理驗證不同地區看到的公開體驗不得用於規避存取控制
靜態資料中心代理固定出口、IP 白名單和授權 API不代表真實消費者網路

代理只是一種網路路由工具,不會自動授予資料使用權。專案還應保留資料來源、授權依據和刪除期限,並避免蒐集評論者的非必要個人資料。

當條款、robots.txt 或介面權限發生變化時,應暫停排程並重新檢查。建議先使用少量 ASIN 驗證資料模型和業務價值,確認無誤後再擴大處理規模。