學會如何用 Python 抓取 Amazon 商品資料

最後更新於 April 16, 2026

如果你照著某篇 Amazon 爬蟲教學一路做到底,最後卻只換來一堆 CAPTCHA、503 錯誤,或是整頁空白——別懷疑,你不是唯一。網路上大多數 Python Amazon 爬取教學,其實都還停在 2022 或 2023 年,裡面用的選擇器和技巧,早就被 Amazon 修掉了。

我在 Thunderbit 做資料擷取工具已經很多年了,實戰經驗告訴我一件事:Amazon 是最難穩定爬取的網站之一。它會一直改 HTML 結構、部署六層級的反機器人防禦,甚至還會透過 A/B 測試,讓不同使用者看到不同版面。在這篇指南裡,我會帶你一步一步做出一個在 2025 年真的還能用的 Python Amazon 爬蟲——包含驗證過的 CSS 選擇器、多層防封鎖策略,以及大多數教學都完全沒提到的排程與匯出方法。至於那些只想拿到資料、不想跟 Python 硬碰硬的人,我也會示範如何用 大概兩下就完成同樣的工作。

什麼是 Amazon 商品爬取?

Amazon 商品爬取,指的是透過程式自動擷取 Amazon 商品頁與搜尋結果頁上的公開資料——像是商品名稱、價格、評分、評論數、圖片、庫存狀態等等。你不用再手動從成百上千筆商品列表裡複製資訊,只要讓爬蟲逐頁讀取 HTML,再把你指定的資料整理成 CSV、Excel 或資料庫等結構化格式。

你可以把它想成,請了一位永遠不會累的實習生,在你喝完一杯早咖啡的時間內,就能跑完一千個商品頁。差別是,這位實習生不會拼錯字,也不需要休息吃午餐。

為什麼要用 Python 抓 Amazon 商品?

Amazon 在 30 多個類別裡,擁有約 ,背後由大約 驅動。第三方賣家如今已佔總商品交易額的 69%。要人工追蹤哪怕只是其中一小部分,都幾乎不可能。以下就是團隊為什麼會去抓 Amazon:

使用情境受益對象擷取內容
價格監控與動態調價電商營運、平台賣家價格、庫存狀態、賣家資訊
競品分析產品經理、品牌團隊商品特色、評分、評論數
市場研究分析師、新品團隊類別趨勢、價格分布
開發名單蒐集業務團隊賣家名稱、品牌資訊、聯絡資料
聯盟行銷內容創作者、優惠網站價格、促銷、商品細節
庫存追蹤供應鏈、採購團隊庫存狀態、預計到貨時間

光是 Amazon 的價格變動量,就足以說明自動化有多重要:Amazon 每天會變價 ,平均每個商品大約每 10 分鐘就會更新一次價格。相較之下,像 Best Buy 和 Walmart 每個月大約只變價 5 萬次左右。靠人力根本追不上。

amazon-product-price-monitor-dashboard.webp

Python 讓你能完全掌控爬蟲流程——你可以決定要抓什麼、錯誤怎麼處理、資料存哪裡。但同時也代表,你得自己負責維護、反封鎖,以及跟上 Amazon 頻繁的 HTML 改版。

能從 Amazon 抓哪些資料,哪些不要碰?

從公開可存取的商品頁面,通常可以擷取:

  • 商品標題(名稱、品牌)
  • 價格(目前價、原價、促銷價)
  • 評分(星等平均)
  • 評論數
  • 商品圖片(主圖網址)
  • 庫存 / 上架狀態
  • ASIN(Amazon Standard Identification Number)
  • 商品描述與重點條列
  • 賣家資訊
  • 商品變體(尺寸、顏色等)

以下資料則建議避開:

  • 登入後才能看到的資料:延伸評論頁、個人帳戶資料、訂單紀錄
  • 個資:買家姓名、地址、付款資訊
  • 受版權保護、用於再發佈的內容:商品描述與圖片可用於分析,但不要拿來當成你自己的內容重新發布

Amazon 的 封鎖了 50 多個已命名的 bot(包含 GPTBot、Scrapy 和 ClaudeBot),也禁止存取像帳戶、購物車、願望清單等路徑。商品詳情頁並沒有被明文禁止,但 Amazon 的服務條款確實不允許自動化存取。法院通常也會區分 ToS 違規(民事層面)與 CFAA 下的刑事違規——這部分我們會在文章最後再補充。

你會需要哪些工具與套件?

這篇教學會用到的 Python 工具如下:

套件用途為什麼選它
requests發送 HTTP 請求簡單、支援度高
beautifulsoup4HTML 解析適合用 CSS 選擇器擷取資料
lxml高速 HTML 解析器作為 BeautifulSoup 的解析後端
curl_cffi模擬 TLS 指紋繞過 Amazon 偵測的關鍵
pandas資料整理與匯出DataFrame、CSV / Excel 匯出

可選配套(當內容是 JavaScript 動態渲染時):

  • seleniumplaywright — 無頭瀏覽器自動化

建立你的 Python 環境

打開終端機,執行:

1mkdir amazon-scraper && cd amazon-scraper
2python -m venv venv
3source venv/bin/activate  # Windows 上:venv\Scripts\activate
4pip install requests beautifulsoup4 lxml curl_cffi pandas

確認安裝是否成功:

1import requests, bs4, curl_cffi, pandas
2print("All good!")

如果你看到「All good!」而且沒有任何錯誤,就可以開始了。

laptop-coding-workspace.webp

為什麼大多數 Amazon 爬蟲教學都失效了(而這篇不一樣)

這一段通常是很多教學直接略過的重點,也正是你大概會點進來看這篇文章的原因。

Amazon 經常更新 HTML 結構、class 名稱和元素 ID。根據爬蟲社群回報,大約有 ,原因就是 DOM 變動和指紋偵測更新。最經典的失效案例,就是 #priceblock_ourprice 這個選擇器;2018 到 2023 年間,數百篇教學都在用它,但它現在已經不再出現在 Amazon 商品頁上了。

先來看哪些選擇器已經壞掉、哪些在 2025 年還能用:

資料點失效選擇器(2024 前)2025 可用選擇器
價格#priceblock_ourpricediv#corePriceDisplay_desktop_feature_div span.a-price .a-offscreen
標題#productTitlespan#productTitle(仍可使用)
評分span.a-icon-alt(有時上下文不對)#acrPopover span.a-icon-alt
評論數#acrCustomerReviewCountspan#acrCustomerReviewText
庫存狀態#availability spandiv#availability span.a-size-medium

這篇指南裡的每段程式碼,都已經在 2025 年的 Amazon 實際頁面上測試過。我會直接列出真正能用的 CSS 選擇器和預期輸出,不是那種 2022 年複製貼上的舊內容。

開始前先確認

  • 難度:中階(需要基本 Python 知識)
  • 時間:完整教學約 30–45 分鐘;基礎爬蟲約 10 分鐘
  • 你需要準備:Python 3.9+、Chrome 瀏覽器(用來檢查 Amazon 頁面)、終端機,以及可選的 ,如果你想比較免寫程式的做法

第 1 步:先向 Amazon 發出第一個請求

在瀏覽器中打開任一 Amazon 商品頁,複製網址。我們先從最基本的 requests.get() 開始:

1import requests
2url = "https://www.amazon.com/dp/B0DGNFM9YJ"
3response = requests.get(url)
4print(response.status_code)
5print(response.text[:500])

執行後,你幾乎一定會拿到 503 狀態碼,或是 HTML 裡出現「To discuss automated access to Amazon data please contact…」這類字樣。這代表 Amazon 的 WAF(Web Application Firewall)已經把你的 Python 腳本辨識出來了。單純的 requests.get() 如果沒有適當標頭,對 Amazon 的成功率大約只有

你應該會看到像 503 和一個封鎖頁面 HTML。這很正常——下一步我們會修好它。

第 2 步:設定自訂標頭與 TLS 指紋模擬

現在光加 User-Agent 已經不夠了。Amazon 會同時比對你的 HTTP 標頭和 TLS 指紋。如果你宣稱自己是 Chrome 120,但 TLS 握手卻露出 Python requests 的特徵,很快就會被

2025 年比較穩定的做法,是搭配瀏覽器模擬使用 curl_cffi

1from curl_cffi import requests as cfreq
2headers = {
3    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
4    "Accept-Language": "en-US,en;q=0.9",
5    "Accept-Encoding": "gzip, deflate, br",
6    "Referer": "https://www.google.com/",
7    "DNT": "1",
8    "Connection": "keep-alive",
9    "Upgrade-Insecure-Requests": "1",
10}
11url = "https://www.amazon.com/dp/B0DGNFM9YJ"
12response = cfreq.get(url, headers=headers, impersonate="chrome124")
13print(response.status_code)
14print(len(response.text))

curl_cffi 模擬 Chrome 124 時,成功率大約可提升到 ——比單純 requests 高出 47 倍。這時你應該會看到 200 狀態碼,以及長很多的 HTML 回應(10 萬字元以上)。

如果還是拿到 503,可以換別的 impersonate 值,例如 "chrome131",或是等幾秒再重試。

第 3 步:解析 HTML 並擷取商品資料

既然我們已經拿到完整 HTML,接下來就用 BeautifulSoup 搭配 2025 年驗證過的選擇器來抓資料:

1from bs4 import BeautifulSoup
2soup = BeautifulSoup(response.text, "lxml")
3# 商品標題
4title_el = soup.select_one("span#productTitle")
5title = title_el.get_text(strip=True) if title_el else None
6# 價格
7price_el = soup.select_one(
8    "div#corePriceDisplay_desktop_feature_div span.a-price .a-offscreen"
9)
10if not price_el:
11    price_el = soup.select_one("span.priceToPay .a-offscreen")
12if not price_el:
13    price_el = soup.select_one(".apexPriceToPay .a-offscreen")
14price = price_el.get_text(strip=True) if price_el else None
15# 評分
16rating_el = soup.select_one("#acrPopover span.a-icon-alt")
17rating = rating_el.get_text(strip=True) if rating_el else None
18# 評論數
19reviews_el = soup.select_one("span#acrCustomerReviewText")
20reviews = reviews_el.get_text(strip=True) if reviews_el else None
21# 庫存狀態
22avail_el = soup.select_one("div#availability span")
23availability = avail_el.get_text(strip=True) if avail_el else None
24# 主圖網址
25img_el = soup.select_one("#landingImage")
26image_url = img_el.get("src") if img_el else None
27print(f"Title: {title}")
28print(f"Price: {price}")
29print(f"Rating: {rating}")
30print(f"Reviews: {reviews}")
31print(f"Availability: {availability}")
32print(f"Image: {image_url}")

預期輸出(範例):

1Title: Apple AirPods Pro (2nd Generation) with USB-C
2Price: $189.99
3Rating: 4.7 out of 5 stars
4Reviews: 98,432 ratings
5Availability: In Stock
6Image: https://m.media-amazon.com/images/I/61SUj2...

注意價格這裡用了多組備援選擇器——Amazon 會依商品類型、促銷狀態和 A/B 測試版本,把價格放在不同容器裡。每次擷取都先做條件判斷,能避免選擇器不匹配時整個爬蟲直接掛掉。

第 4 步:從搜尋結果抓多個商品

如果你要建立真正可用的資料集,通常會從 Amazon 搜尋結果頁開始,先收集 ASIN,再逐一抓商品詳情頁。

1import time
2import random
3def get_search_asins(keyword, max_pages=1):
4    """從 Amazon 搜尋結果頁收集 ASIN。"""
5    asins = []
6    for page in range(1, max_pages + 1):
7        search_url = f"https://www.amazon.com/s?k={keyword}&page={page}"
8        resp = cfreq.get(search_url, headers=headers, impersonate="chrome124")
9        if resp.status_code != 200:
10            print(f"Search page {page} returned {resp.status_code}")
11            break
12        search_soup = BeautifulSoup(resp.text, "lxml")
13        results = search_soup.select('div[data-component-type="s-search-result"]')
14        for r in results:
15            asin = r.get("data-asin")
16            if asin:
17                asins.append(asin)
18        print(f"Page {page}: found {len(results)} products")
19        time.sleep(random.uniform(2, 5))  # 禮貌性延遲
20    return asins
21asins = get_search_asins("wireless+earbuds", max_pages=2)
22print(f"Collected {len(asins)} ASINs")

每個 ASIN 都能對應到乾淨的商品網址:https://www.amazon.com/dp/{ASIN}。這比直接使用完整搜尋結果網址更穩定,因為搜尋網址常帶有與 session 有關的參數。

第 5 步:處理分頁,並大規模爬取

接著我們把搜尋收集和詳情頁抓取整合成完整流程:

1import pandas as pd
2def scrape_product(asin):
3    """抓取單一 Amazon 商品詳情頁。"""
4    url = f"https://www.amazon.com/dp/{asin}"
5    try:
6        resp = cfreq.get(url, headers=headers, impersonate="chrome124")
7        if resp.status_code != 200:
8            return None
9        soup = BeautifulSoup(resp.text, "lxml")
10        title_el = soup.select_one("span#productTitle")
11        price_el = (
12            soup.select_one("div#corePriceDisplay_desktop_feature_div span.a-price .a-offscreen")
13            or soup.select_one("span.priceToPay .a-offscreen")
14            or soup.select_one(".apexPriceToPay .a-offscreen")
15        )
16        rating_el = soup.select_one("#acrPopover span.a-icon-alt")
17        reviews_el = soup.select_one("span#acrCustomerReviewText")
18        avail_el = soup.select_one("div#availability span")
19        img_el = soup.select_one("#landingImage")
20        return {
21            "asin": asin,
22            "title": title_el.get_text(strip=True) if title_el else None,
23            "price": price_el.get_text(strip=True) if price_el else None,
24            "rating": rating_el.get_text(strip=True) if rating_el else None,
25            "reviews": reviews_el.get_text(strip=True) if reviews_el else None,
26            "availability": avail_el.get_text(strip=True) if avail_el else None,
27            "image_url": img_el.get("src") if img_el else None,
28            "url": url,
29        }
30    except Exception as e:
31        print(f"Error scraping {asin}: {e}")
32        return None
33# 抓取全部已收集的 ASIN
34products = []
35for i, asin in enumerate(asins):
36    print(f"Scraping {i+1}/{len(asins)}: {asin}")
37    product = scrape_product(asin)
38    if product:
39        products.append(product)
40    time.sleep(random.uniform(2, 5))  # 每次請求之間加上隨機延遲
41df = pd.DataFrame(products)
42print(f"\nScraped {len(df)} products successfully")
43print(df.head())

這裡 2–5 秒的隨機延遲非常重要。完全固定的間隔(例如每次都剛好 3 秒)對 Amazon 的行為分析來說很可疑。隨機間隔比較像真人瀏覽。

第 6 步:把 Amazon 資料存成 CSV

1df.to_csv("amazon_products.csv", index=False, encoding="utf-8-sig")
2print("Saved to amazon_products.csv")

現在你應該會有一份乾淨的 CSV,裡面包含 ASIN、標題、價格、評分、評論、庫存狀態、圖片網址和商品網址。多數教學到這裡就結束了——但如果你要做的是正式工作流程,CSV 其實只是起點。

反封鎖實戰:讓你的爬蟲穩定跑下去

是任何想用 Python 抓 Amazon 商品的人最頭痛的問題。Amazon 的六層防禦包含 IP 信譽分析、TLS 指紋辨識、瀏覽器環境檢查、行為生物特徵、CAPTCHA,以及由機器學習驅動的異常偵測。下面我會拆成多層策略來應對。

輪換 User-Agent 與完整標頭

如果一直用同一個固定的 User-Agent,很快就會被標記。建議在目前常見的瀏覽器字串之間輪換:

1import random
2USER_AGENTS = [
3    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36",
4    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36",
5    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0",
6    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0 Safari/605.1.15",
7]
8def get_headers():
9    return {
10        "User-Agent": random.choice(USER_AGENTS),
11        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
12        "Accept-Language": "en-US,en;q=0.9",
13        "Accept-Encoding": "gzip, deflate, br",
14        "Referer": "https://www.google.com/",
15        "DNT": "1",
16        "Connection": "keep-alive",
17    }

有個很容易踩雷的細節:你的 Accept-Language 必須和 IP 所在地區一致。如果你從德國 IP 卻送出 Accept-Language: en-US,這就很可疑。

用 curl_cffi 做 TLS 指紋模擬

前面第 2 步已經提過,但這個方法真的值得再強調一次:它是提升成功率最大的一招。標準 Python requests 對 Amazon 的成功率大約只有 2%;換成 curl_cffi 模擬後,大約能到 94%。這就是「能跑」和「不能跑」的差別。

1from curl_cffi import requests as cfreq
2# 連模擬的瀏覽器版本也一起輪換
3BROWSERS = ["chrome120", "chrome124", "chrome131"]
4response = cfreq.get(
5    url,
6    headers=get_headers(),
7    impersonate=random.choice(BROWSERS),
8)

Proxy 輪換

如果你要爬的不只是幾頁而已,就需要代理輪換。Amazon 會追蹤 IP,當單一 IP 請求太多時就會封掉。

1PROXIES = [
2    "http://user:pass@proxy1.example.com:8080",
3    "http://user:pass@proxy2.example.com:8080",
4    "http://user:pass@proxy3.example.com:8080",
5]
6proxy = random.choice(PROXIES)
7response = cfreq.get(
8    url,
9    headers=get_headers(),
10    impersonate="chrome124",
11    proxies={"http": proxy, "https": proxy},
12)

住宅代理通常比資料中心代理更有效(Amazon 會主動封鎖資料中心 IP 段),但價格也比較高。如果只是小型專案,可以先從 開始,再視需求擴充。

限流與指數退避

我看過的競品文章幾乎都沒講這點,但它非常重要。當你收到 503 或 CAPTCHA 回應時,不要立刻重試——那只會更快被永久封鎖。

1import time
2import random
3def fetch_with_backoff(url, max_retries=3):
4    """失敗時使用指數退避方式抓取 URL。"""
5    for attempt in range(max_retries):
6        response = cfreq.get(
7            url,
8            headers=get_headers(),
9            impersonate=random.choice(BROWSERS),
10        )
11        if response.status_code == 200:
12            return response
13        # 指數退避加上隨機抖動
14        wait = min(2 ** attempt + random.uniform(0, 1), 30)
15        print(f"Attempt {attempt+1} failed ({response.status_code}). Waiting {wait:.1f}s...")
16        time.sleep(wait)
17    return None  # 重試次數已用完

公式 wait = min(2^attempt + jitter, max_delay) 可以讓等待時間逐步增加(2 秒、4 秒、8 秒……),但不會超過合理上限。隨機抖動則能避免重試節奏被辨識出來。

當 JS 動態渲染內容時,改用 Selenium 或 Playwright

有些 Amazon 頁面(特別是帶有動態價格元件或變體選擇器的頁面)需要 JavaScript 才能完整渲染。當 curl_cffi 回來的 HTML 不完整時,就要改用無頭瀏覽器:

1from playwright.sync_api import sync_playwright
2def scrape_with_browser(url):
3    with sync_playwright() as p:
4        browser = p.chromium.launch(headless=True)
5        page = browser.new_page()
6        page.goto(url, wait_until="domcontentloaded")
7        page.wait_for_timeout(3000)  # 等 JS 跑完
8        html = page.content()
9        browser.close()
10        return html

這方法速度比較慢——每頁約 3–5 秒,而 curl_cffi 則可以低於 1 秒。只有真的需要時才用它。

以我的經驗來看,curl_cffi 已經能處理 90% 以上的 Amazon 商品頁,不需要動到瀏覽器。

反封鎖總結

技巧難度效果大多數教學有提到嗎?
自訂 User-Agent容易低(Amazon 會偵測模式)
完整標頭輪換容易很少
TLS 指紋模擬(curl_cffi)高(約 94% 成功率)幾乎沒有
Proxy 輪換頂多簡單提一下
限流 + 指數退避容易沒有
Selenium / Playwright 備援高(處理 JS 內容時)有提,但很少示範

不只 CSV:把 Amazon 資料匯出到 Google Sheets、Airtable 等工具

我看過的每篇教學都只講到 CSV 匯出。但真正的商業流程,往往需要把資料送進 Google Sheets、資料庫,或 Airtable、Notion 這類工具。

用 gspread 匯出到 Google Sheets

先建立 Google Service Account(一次性設定):

  1. 前往 → APIs & Services → Credentials
  2. 建立 service account 並下載 JSON 金鑰檔
  3. 將檔案存到 ~/.config/gspread/service_account.json
  4. 把目標試算表分享給 JSON 裡的 client_email

接著:

1import gspread
2from gspread_dataframe import set_with_dataframe
3gc = gspread.service_account()
4sh = gc.open("Amazon Scrape Data")
5worksheet = sh.sheet1
6set_with_dataframe(worksheet, df)
7print("Data exported to Google Sheets!")

這會把整個 DataFrame 直接寫進 Google Sheet,能即時分享,也方便做儀表板。

存進 SQLite 做本機分析

如果資料量比較大,或你想追蹤歷史紀錄,SQLite 很適合——不用架伺服器,只有一個檔案:

1import sqlite3
2conn = sqlite3.connect("amazon_products.db")
3df.to_sql("products", conn, if_exists="append", index=False)
4print(f"Stored {len(df)} products in SQLite")
5# 之後再查:
6historical = pd.read_sql_query(
7    "SELECT * FROM products WHERE price IS NOT NULL ORDER BY rowid DESC LIMIT 100",
8    conn,
9)

免寫程式的替代方案

如果你不想維護 Python 的匯出腳本, 可免費匯出到 Google Sheets、Airtable、Notion、Excel、CSV 和 JSON,甚至包含可直接在 Airtable 和 Notion 顯示的圖片欄位。你不需要設定 gspread、不需要 API 憑證,也不用寫任何程式碼。對於需要把資料導入既有工具的團隊來說,這能省下非常多時間。

自動排程 Amazon 爬取:很多教學都沒寫到的章節

價格監控和庫存追蹤需要的是定期爬取,不是一跑就結束的單次任務。但我幾乎找不到任何競品文章有完整講到排程。下面就是如何把你的 Python 爬蟲自動化。

Cron Job(Linux / macOS)

打開 crontab:

1crontab -e

加入以下內容,讓爬蟲每天早上 6 點執行:

10 6 * * * cd /path/to/amazon-scraper && /path/to/venv/bin/python scraper.py >> ~/scraper.log 2>&1

或每 6 小時執行一次:

10 */6 * * * cd /path/to/amazon-scraper && /path/to/venv/bin/python scraper.py >> ~/scraper.log 2>&1

Windows 工作排程器

建立一個批次檔 run_scraper.bat

1@echo off
2cd /d "C:\path\to\amazon-scraper"
3call venv\Scripts\activate
4python scraper.py
5deactivate

接著打開 Task Scheduler → Create Basic Task → 設定排程(Daily、Hourly)→ Action 選「Start a program」→ 指向 run_scraper.bat

GitHub Actions(免費方案)

如果你想要雲端排程,又不想自己架基礎設施:

1name: Amazon Scraper
2on:
3  schedule:
4    - cron: "0 6 * * *"  # UTC 每天早上 6 點
5  workflow_dispatch:       # 手動觸發
6jobs:
7  scrape:
8    runs-on: ubuntu-latest
9    steps:
10      - uses: actions/checkout@v3
11      - name: Set up Python
12        uses: actions/setup-python@v4
13        with:
14          python-version: "3.11"
15      - name: Install dependencies
16        run: pip install -r requirements.txt
17      - name: Run scraper
18        run: python scraper.py
19      - name: Commit results
20        run: |
21          git config user.name 'GitHub Actions'
22          git config user.email 'actions@github.com'
23          git add data/
24          git diff --staged --quiet || git commit -m "Update scraped data"
25          git push

把代理憑證放進 GitHub Secrets,你就有一條免費又自動化的爬取管線了。

免寫程式的替代方案:Thunderbit 的排程爬蟲

如果你的團隊不想研究 cron 語法或雲端基礎設施,Thunderbit 內建的 就很好用。你只要用白話輸入排程需求(例如「每天早上 8 點」或「每週一」),再加入 Amazon URL,按下「排程」即可。沒有終端機、沒有 YAML、也不用部署流程。對需要持續監控價格或庫存的電商團隊來說,特別方便。

Python 自架、爬蟲 API、免寫程式:到底該選哪個?

這是我在論壇上很常看到的問題,但幾乎沒有任何排名前段的文章有條理地回答。所以我直接給你最誠實的看法:

評估項目Python + BS4/curl_cffi爬蟲 API(ScraperAPI、Oxylabs)免寫程式(Thunderbit)
建置時間30–60 分鐘10–20 分鐘約 2 分鐘
需要寫程式嗎需要(Python)需要(API 呼叫)不需要
內建防封鎖沒有(自己做)
支援 JS 渲染只有搭配 Selenium / Playwright視供應商而定有(Browser 或 Cloud 模式)
排程自行處理(cron / 雲端)部分服務有內建
成本免費(另加代理成本)每月 $30–100+有免費方案
維護成本高(選擇器容易失效)幾乎沒有(AI 會自動調整)
最適合想完全掌控的開發者追求規模與穩定性追求速度、非工程人員、商務使用者

如果你想學習、需要高度客製化,而且不介意後續維護,Python 是正確選擇。爬蟲 API 會幫你處理反封鎖,但你還是得寫程式。而 Thunderbit 則是銷售、電商營運,或任何只想拿到資料的人最快的路徑——不用選擇器、不用寫程式,Amazon HTML 一變也不用自己修。

Thunderbit 如何只用 2 下抓 Amazon 商品

我當然有偏袒,畢竟這是我團隊做的產品。但這流程真的就是這麼簡單:

  1. 安裝
  2. 打開 Amazon 搜尋結果頁或商品頁
  3. 點擊 「AI Suggest Fields」(或直接使用即時 Amazon 爬蟲範本)
  4. 點擊 「Scrape」

Thunderbit 的 AI 會自動讀取頁面、辨識資料結構,並把內容擷取成乾淨表格。你可以免費匯出到 Excel、Google Sheets、Airtable 或 Notion。真正的好處是:就算 Amazon 下週又改 HTML(而且它一定會改),Thunderbit 的 AI 也會自動跟上,不需要修壞掉的腳本,也不用更新選擇器。

如果你想補強商品清單、再補抓詳情頁資料,Thunderbit 的 Subpage Scraping 功能可以自動追蹤商品連結,並抓進圖片、描述、變體等額外欄位——這在 Python 裡通常要多寫不少程式才能做到。

讓你的 Python Amazon 爬蟲長期可用的小技巧

如果你還是打算走 Python 路線,下面這些做法可以幫你減少後續維護痛苦:

  • 定期檢查選擇器。 Amazon 很常改。把這篇文章加書籤——我也會隨著變動更新選擇器表。
  • 監控成功率。 追蹤 200 回應和 503 / CAPTCHA 的比例。當成功率掉到 80% 以下時,就設個提醒(哪怕只是 email)。
  • 保留原始 HTML。 把完整 HTML 和解析後資料一起存起來。之後選擇器改了,還能直接重解析歷史資料,不必重爬。
  • 頻繁輪換代理與 User-Agent。 靜態指紋在大規模運作下,幾小時內就可能被標記。
  • 使用指數退避。 遇到封鎖後不要立刻重試。
  • 用 Docker 容器化。 把爬蟲包進 Docker,部署與移轉都更方便。
  • 加入資料驗證。 確認價格是數字、評分介於 1–5、標題不是空值。某團隊在加上驗證層之後,下游錯誤減少了

如果以上這些聽起來比你原本預期還麻煩,那也可以想想,像 Thunderbit 這類免寫程式工具是否更適合你的情境。選快一點的路徑沒有什麼好丟臉的——我修過太多爬蟲,太清楚有時候最好的程式,就是你根本不用寫的程式。

抓 Amazon 時的法律與道德注意事項

這個話題在每次談 Amazon 爬取時都會出現,所以這裡快速說明一下法律背景:

  • 在美國,抓取公開資料通常是合法的。 具有里程碑意義的 判決(2022)確立了存取公開資料不違反 CFAA。近期的 (2024)與 (2024)也強化了這個原則。
  • Amazon 的服務條款禁止自動化存取。 這屬於民事層面的契約違約,不是刑事問題。法院通常也會把兩者區分開來。
  • Amazon v. Perplexity(2025) 是一個涉及 AI 抓取 Amazon 頁面的進行中案件。法院在 2026 年 3 月曾核發初步禁制令。這件事值得持續關注。
  • 只抓公開頁面。 不要抓有登入保護的內容、個資,或任何需要驗證才能看到的東西。
  • 尊重速率限制。 不要把 Amazon 的伺服器打爆。每次請求間隔 2–5 秒是合理的。
  • 負責任地使用資料。 只用於分析,不要把受版權保護的內容直接再發佈。
  • 大規模商業使用前請諮詢法律顧問,尤其是你在歐盟時(涉及 GDPR 時,個資規範更要注意)。

如果你想深入了解,可以參考我們的

總結

現在你已經擁有一個能運作的 Python Amazon 爬蟲,包含 2025 年驗證過的選擇器、遠超「只加個 User-Agent」的多層防封鎖策略、實用的排程方式,以及能把資料匯出到 Google Sheets、資料庫或團隊常用工具的方法。

重點整理:

  • Python + curl_cffi + BeautifulSoup 能讓你完全掌控流程,搭配 TLS 指紋模擬後成功率可達約 94%
  • 反封鎖需要多層防護:標頭輪換、TLS 指紋模擬、Proxy 輪換、限流與指數退避缺一不可
  • 排程 能把一次性腳本變成持續監控管線(cron、GitHub Actions,或 Thunderbit 內建排程器)
  • 不只匯出 CSV,Google Sheets、SQLite、Airtable、Notion 才是真正有商業價值的落點
  • Thunderbit 提供了兩下完成的替代方案,特別適合非開發者,或是寧可把時間花在分析資料,而不是除錯選擇器的人

如果你想直接動手試程式,這篇指南裡的內容都已經可以複製就跑。若你想完全跳過寫程式, 也能讓你馬上在 Amazon 上體驗免寫程式的做法。

更多相關內容,請參考我們的指南: 以及 。你也可以到 看逐步教學影片。

祝你爬得順利——也希望你的選擇器能撐到下一次 Amazon 更新。

常見問題

1. 為什麼我的 Python Amazon 爬蟲跑幾次後就被擋?

Amazon 採用六層防禦系統:IP 信譽分析、TLS 指紋辨識(JA3/JA4)、瀏覽器環境偵測、行為生物特徵、CAPTCHA 驗證,以及機器學習驅動的異常偵測。只靠一個 User-Agent 的基本 requests 腳本,成功率大約只有 。你需要 TLS 模擬(curl_cffi)、完整標頭輪換、Proxy 輪換,以及帶隨機抖動的限流,才能穩定存取。

2. 2025 年抓 Amazon 商品最推薦哪些 Python 套件?

curl_cffi 用來發送帶 TLS 模擬的 HTTP 請求(這是單一提升幅度最大的工具)、BeautifulSoup4 搭配 lxml 做 HTML 解析、pandas 負責資料整理與匯出,另外遇到 JavaScript 渲染內容時,可用 SeleniumPlaywright 當備援。Python 也是 的爬蟲開發者使用的語言。

3. 抓 Amazon 商品資料合法嗎?

在美國,抓取公開可存取的資料通常是合法的,像 hiQ v. LinkedIn 與 Meta v. Bright Data 這類判決都支持這個方向。Amazon 的服務條款雖然禁止自動化存取,但法院通常會把 ToS 違規視為民事問題,而非刑事問題。請務必避免登入保護內容、遵守速率限制,若是大規模商業用途,最好諮詢法律顧問。

4. 可以完全不寫程式就抓 Amazon 嗎?

可以。像 這類工具,只要用 Chrome 擴充功能兩下就能抓 Amazon 商品。它的 AI 欄位辨識會自動把資料整理成結構化表格,而且可以免費匯出到 Excel、Google Sheets、Airtable 或 Notion。當 Amazon HTML 改版時,Thunderbit 的 AI 會自動適應,不需要手動更新。

5. Amazon 的 HTML 選擇器多久會變一次?我該怎麼維護爬蟲?

很頻繁,而且常常不會先通知。爬蟲社群回報,大約有 的爬蟲每週都得修補,原因就是 DOM 變動。要跟上變化,請持續監控成功率、保留原始 HTML 方便重新解析,並定期用實際頁面檢查選擇器。或者,你也可以直接改用像 Thunderbit 這類 AI 工具,讓它自動適應,省下這些維護工作。

延伸閱讀

Shuai Guan
Shuai Guan
Co-founder/CEO @ Thunderbit. Passionate about cross section of AI and Automation. He's a big advocate of automation and loves making it more accessible to everyone. Beyond tech, he channels his creativity through a passion for photography, capturing stories one picture at a time.
目錄

試試 Thunderbit

只要 2 次點擊,就能抓取潛在客戶與其他資料。AI 驅動。

取得 Thunderbit 免費使用
用 AI 擷取資料
輕鬆將資料轉移到 Google Sheets、Airtable 或 Notion
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week