Tôi đã thử 4 cách để Scrape Amazon Best Sellers bằng Python và ...

Cập nhật lần cuối vào April 17, 2026

Cuối tuần trước, tôi đã “đốt” gần hết một ấm cà phê chỉ để thử scrape trang Best Sellers của Amazon theo 4 cách khác nhau. Hai cách chạy khá ổn, một cách thì suýt làm IP của tôi bị chặn, và một cách thì chỉ cần đúng hai cú nhấp chuột. Đây là toàn bộ những gì tôi rút ra được.

Amazon đúng là một “quái vật” trong thế giới thương mại điện tử — , , và hệ thống Best Sellers Rank (BSR) được cập nhật theo giờ. Nếu bạn đang nghiên cứu sản phẩm FBA, phân tích giá cạnh tranh, hay đơn giản là muốn bắt nhịp xu hướng trước đối thủ, dữ liệu Best Seller thực sự là một “mỏ vàng”.

Nhưng kéo được dữ liệu đó ra khỏi Amazon rồi đưa vào bảng tính thì sao? Đó mới là chỗ mọi thứ bắt đầu thú vị. Tôi đã thử requests + BeautifulSoup, Selenium, một scraping API, và (AI web scraper không cần code của chính chúng tôi) để xem cách nào thật sự hiệu quả — và cách nào chỉ khiến bạn ngồi nhìn màn hình CAPTCHA đầy bất lực.

Amazon Best Sellers là gì, và vì sao bạn nên quan tâm?

Amazon Best Sellers Rank (BSR) là bảng xếp hạng theo thời gian thực của Amazon, dùng để sắp sản phẩm theo doanh số trong từng danh mục. Nói đơn giản, đây là một cuộc đua độ phổ biến được cập nhật mỗi giờ, dựa trên cả dữ liệu bán hàng gần đây lẫn lịch sử. Bản thân Amazon cũng mô tả như sau:

“Tính toán Amazon Best Sellers dựa trên doanh số Amazon và được cập nhật theo giờ để phản ánh doanh số gần đây và lịch sử của mọi mặt hàng bán trên Amazon.” —

Trang Best Sellers hiển thị 100 sản phẩm hàng đầu cho mỗi danh mục, chia thành 2 trang, mỗi trang 50 sản phẩm. Trang 1 chứa hạng #1–50, trang 2 chứa hạng #51–100. Amazon đã xác nhận rằng lượt xem trang và đánh giá của khách hàng KHÔNG ảnh hưởng đến BSR — hoàn toàn chỉ dựa trên doanh số.

Ai cần dữ liệu này? Người bán e-commerce tìm sản phẩm cho FBA, đội sales xây dựng tình báo cạnh tranh, nhóm vận hành theo dõi xu hướng giá, và các nhà nghiên cứu thị trường muốn đo tăng trưởng danh mục. Theo kinh nghiệm của tôi, bất kỳ ai bán trên Amazon hoặc cạnh tranh với Amazon rồi cũng sẽ cần dữ liệu này trong một bảng tính.

Vì sao nên scrape Amazon Best Sellers bằng Python?

Nghiên cứu sản phẩm thủ công là một hố đen ngốn thời gian. Một cho thấy nhân viên dành tới 9,3 giờ mỗi tuần chỉ để tìm kiếm và thu thập thông tin. Với đội e-commerce, điều đó đồng nghĩa với hàng giờ click qua các trang Amazon, copy tên sản phẩm, giá bán rồi dán vào spreadsheet — và tuần sau lại lặp lại y nguyên.

Dưới đây là cái nhìn nhanh về những trường hợp khiến việc scrape Best Sellers trở nên đáng làm:

Trường hợp sử dụngBạn nhận được gìAi hưởng lợi
Nghiên cứu sản phẩm FBAXác định sản phẩm nhu cầu cao, cạnh tranh thấp dựa trên BSR và số lượng reviewNgười bán Amazon, dropshipper
Theo dõi giá cạnh tranhBám sát biến động giá của các sản phẩm top đầu trong danh mụcĐội e-commerce, chuyên viên phân tích giá
Theo dõi xu hướng thị trườngPhát hiện danh mục đang tăng trưởng và biến động theo mùaProduct manager, nhà nghiên cứu thị trường
Tạo leadLập danh sách các thương hiệu bán chạy và dòng sản phẩm của họĐội sales, outreach B2B
Phân tích đối thủĐối chiếu sản phẩm của bạn với các sản phẩm dẫn đầu danh mụcBrand manager, đội chiến lược

ROI là có thật: một với 2.700 chuyên gia thương mại cho thấy các công cụ AI giúp tiết kiệm trung bình . Và những người bán dùng công cụ theo dõi giá tự động giữ được Buy Box so với 42% của người theo dõi thủ công — tức doanh số tăng 37% nhờ phản ứng nhanh hơn với biến động giá.

4 cách scrape Amazon Best Sellers bằng Python: so sánh nhanh

Trước khi đi vào hướng dẫn từng bước, đây là bảng so sánh mà tôi ước mình có trước khi bắt đầu thử nghiệm. Bảng này sẽ giúp bạn chọn phương pháp phù hợp với nhu cầu của mình:

Tiêu chírequests + BS4SeleniumScraping API (ví dụ: Scrape.do)Thunderbit (không cần code)
Độ khó cài đặtTrung bìnhCao (driver, trình duyệt)Thấp (API key)Rất thấp (tiện ích Chrome)
Xử lý lazy loadingKhôngCó (mô phỏng cuộn trang)Có (HTML đã render)Có (AI xử lý render)
Chống botThấp (dễ bị chặn IP)Trung bình (có thể bị phát hiện)Cao (xoay proxy)Cao (chế độ cloud + browser)
Gánh nặng bảo trìCao (selector dễ gãy)Cao (cập nhật driver + selector)ThấpRất thấp (AI tự thích nghi layout)
Chi phíMiễn phíMiễn phíTrả phí (theo request)Có gói miễn phí + gói trả phí
Phù hợp nhấtScrape một lần, học tậpTrang nặng JS, cần đăng nhậpQuy mô lớn / productionNgười không biết code, nghiên cứu nhanh, giám sát định kỳ

Nếu bạn muốn học nền tảng scraping bằng Python, hãy bắt đầu với Cách 1 hoặc 2. Nếu bạn cần độ ổn định ở quy mô sản xuất, chọn Cách 3. Nếu bạn muốn có kết quả chỉ sau hai cú click mà không phải viết code, nhảy thẳng đến Cách 4.

Trước khi bắt đầu

  • Độ khó: Cơ bản đến trung cấp (tùy phương pháp)
  • Thời gian cần thiết: ~15 phút với Thunderbit, ~45 phút với các cách dùng Python
  • Bạn cần chuẩn bị: Python 3.8+ (cho Cách 1–3), trình duyệt Chrome, (cho Cách 4), và URL trang Amazon Best Sellers mục tiêu

Cách 1: Scrape Amazon Best Sellers bằng requests + BeautifulSoup

Đây là cách nhẹ, thân thiện với người mới — không cần tự động hóa trình duyệt, chỉ dùng HTTP request và parse HTML. Và nó cũng dạy tôi nhiều nhất về cơ chế chống scrape của Amazon.

Bước 1: Thiết lập môi trường

Cài các gói cần thiết:

1pip install requests beautifulsoup4 pandas

Sau đó import thư viện:

1import requests
2from bs4 import BeautifulSoup
3import pandas as pd
4import random
5import time

Bước 2: Gửi request với header giống trình duyệt thật

Amazon chặn các request trông giống bot. Lớp phòng thủ cơ bản nhất là dùng header User-Agent mô phỏng trình duyệt thật. Dưới đây là đoạn mã với một danh sách User-Agent hiện tại, khá thực tế (nguồn từ , tháng 3/2026):

1USER_AGENTS = [
2    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36",
3    "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",
4    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:149.0) Gecko/20100101 Firefox/149.0",
5    "Mozilla/5.0 (Macintosh; Intel Mac OS X 15.7; rv:149.0) Gecko/20100101 Firefox/149.0",
6    "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",
7]
8headers = {"User-Agent": random.choice(USER_AGENTS)}
9url = "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/"
10response = requests.get(url, headers=headers)
11print(response.status_code)  # Should be 200

Nếu bạn thấy mã trạng thái 200 thì nghĩa là ổn. Nếu thấy 503 hoặc bị chuyển sang trang CAPTCHA, Amazon đã đánh dấu request của bạn.

Bước 3: Parse dữ liệu sản phẩm bằng BeautifulSoup

Kiểm tra HTML của trang Amazon bằng DevTools trong trình duyệt (chuột phải → Inspect). Các container sản phẩm dùng ID gridItemRoot. Bên trong mỗi container, bạn sẽ tìm thấy tên sản phẩm, giá, đánh giá và URL.

1soup = BeautifulSoup(response.text, "html.parser")
2products = []
3for item in soup.find_all("div", id="gridItemRoot"):
4    title_tag = item.find("div", class_="_cDEzb_p13n-sc-css-line-clamp-3_g3dy1")
5    price_tag = item.find("span", class_="_cDEzb_p13n-sc-price_3mJ9Z")
6    link_tag = item.find("a", class_="a-link-normal")
7    title = title_tag.get_text(strip=True) if title_tag else "N/A"
8    price = price_tag.get_text(strip=True) if price_tag else "N/A"
9    url = "https://www.amazon.com" + link_tag["href"] if link_tag else "N/A"
10    products.append({"Title": title, "Price": price, "URL": url})

Cảnh báo: Các tên class có tiền tố _cDEzb_ là hash của CSS module mà Amazon tạo lại định kỳ. ID gridItemRoot và class a-link-normal ổn định hơn, nhưng bạn vẫn nên kiểm tra selector bằng DevTools trước khi chạy scraper.

Bước 4: Xuất ra CSV

1df = pd.DataFrame(products)
2df.to_csv("amazon_best_sellers.csv", index=False)
3print(f"Scraped {len(products)} products")

Kết quả thực tế — và những gì hay lỗi

Trong lần thử của tôi, cách này chỉ trả về khoảng 30 sản phẩm thay vì 50. Đó không phải lỗi code — mà là do lazy loading của Amazon. Chỉ khoảng 30 sản phẩm được render ngay khi trang tải ban đầu; số còn lại xuất hiện sau khi cuộn trang, và việc đó cần JavaScript mà requests không xử lý được.

Các giới hạn khác:

  • IP có thể bị chặn rất nhanh nếu không xoay proxy (tôi bị chặn sau khoảng 15 request liên tiếp)
  • CSS selector sẽ gãy khi Amazon cập nhật bố cục trang — và họ làm việc này khá thường xuyên
  • Không có sẵn xử lý phân trang

Để học scraping bằng Python thì cách này rất tốt. Nhưng nếu dùng cho production thì khá mong manh.

Cách 2: Scrape Amazon Best Sellers bằng Selenium

Selenium giải quyết vấn đề lazy loading bằng cách chạy một trình duyệt thật — nặng hơn để cài đặt, nhưng nó lấy được đủ 50 sản phẩm mỗi trang.

Bước 1: Cài Selenium

1pip install selenium pandas

Tin vui: từ Selenium 4.6 trở lên, bạn không còn cần webdriver-manager. Selenium Manager sẽ tự tải driver.

1from selenium import webdriver
2from selenium.webdriver.chrome.options import Options
3from selenium.webdriver.common.by import By
4from selenium.webdriver.common.keys import Keys
5import time
6import pandas as pd
7options = Options()
8options.add_argument("--headless=new")
9options.add_argument("--window-size=1920,1080")
10options.add_argument("--disable-blink-features=AutomationControlled")
11driver = webdriver.Chrome(options=options)

Cờ --headless=new (được giới thiệu từ Chrome 109+) dùng cùng pipeline render với Chrome có giao diện, khiến Amazon khó phát hiện hơn.

Bước 2: Cuộn qua phần lazy loading

Đây là bước khiến Selenium đáng công cài đặt. Amazon Best Sellers chỉ tải khoảng 30 sản phẩm ban đầu — phần còn lại xuất hiện sau khi cuộn.

1def scroll_page(driver, scrolls=5, delay=2):
2    for _ in range(scrolls):
3        driver.find_element(By.TAG_NAME, "body").send_keys(Keys.PAGE_DOWN)
4        time.sleep(delay)
5driver.get("https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/")
6time.sleep(3)
7scroll_page(driver)

Sau khi cuộn, đủ 50 sản phẩm sẽ được render trong DOM. Tôi thấy 5 lần Page Down với độ trễ 2 giây là đủ, nhưng bạn có thể cần chỉnh tùy tốc độ mạng.

Bước 3: Trích xuất dữ liệu sản phẩm

1items = driver.find_elements(By.ID, "gridItemRoot")
2products = []
3for item in items:
4    try:
5        title = item.find_element(By.CSS_SELECTOR, "div._cDEzb_p13n-sc-css-line-clamp-3_g3dy1").text
6    except:
7        title = "N/A"
8    try:
9        price = item.find_element(By.CSS_SELECTOR, "span._cDEzb_p13n-sc-price_3mJ9Z").text
10    except:
11        price = "N/A"
12    try:
13        url = item.find_element(By.CSS_SELECTOR, "a.a-link-normal").get_attribute("href")
14    except:
15        url = "N/A"
16    products.append({"Title": title, "Price": price, "URL": url})

Việc bọc từng bước trích xuất bằng try/except rất quan trọng — một số sản phẩm có thể hết hàng hoặc thiếu trường dữ liệu, và bạn không muốn một phần tử lỗi làm hỏng toàn bộ lần scrape.

Bước 4: Xử lý phân trang

Amazon chia 100 Best Sellers thành 2 trang với cấu trúc URL khác nhau:

1urls = [
2    "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/",
3    "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/ref=zg_bs_pg_2_electronics?_encoding=UTF8&pg=2"
4]
5all_products = []
6for url in urls:
7    driver.get(url)
8    time.sleep(3)
9    scroll_page(driver)
10    # ... extract products as above ...
11    all_products.extend(products)
12driver.quit()

Kết quả thực tế

Trong lần thử của tôi, Selenium lấy được đủ 50 sản phẩm mỗi trang — rõ ràng tốt hơn requests + BS4. Điểm trừ: mỗi trang mất khoảng 45 giây (tính cả thời gian cuộn), và tôi vẫn bị đánh dấu sau khi chạy quá nhiều lần mà không xoay proxy. Selenium vẫn có thể bị Amazon phát hiện ngay cả khi bật các cờ chống phát hiện — nếu làm ở quy mô nghiêm túc, bạn sẽ cần thêm biện pháp khác (xem phần Playbook chống bị chặn bên dưới).

Các điểm đau khác:

  • Thỉnh thoảng vẫn xảy ra lệch phiên bản WebDriver, dù Selenium Manager đã giảm rất nhiều
  • CSS selector phải cập nhật mỗi khi Amazon đổi DOM
  • Tốn RAM — mỗi phiên trình duyệt ngốn khoảng 200–400MB

Cách 3: Scrape Amazon Best Sellers bằng Scraping API

Scraping API là kiểu “để người khác lo phần khó”. Các dịch vụ như Scrape.do, Oxylabs và ScrapingBee lo việc xoay proxy, render JavaScript và xử lý chống bot — bạn chỉ cần gửi URL và nhận lại HTML hoặc JSON.

Cách hoạt động

Bạn gửi URL mục tiêu tới endpoint của API. API sẽ render trang bằng trình duyệt thật trên hạ tầng của họ, xoay proxy, xử lý CAPTCHA và trả về HTML sạch. Sau đó bạn parse HTML trả về bằng BeautifulSoup như bình thường.

Bước 1: Gửi request qua API

Dưới đây là ví dụ dùng Scrape.do (giá khởi điểm từ $29/tháng cho 150.000 credits, 1 credit = 1 request bất kể có render hay không):

1import requests
2from bs4 import BeautifulSoup
3api_token = "YOUR_API_TOKEN"
4target_url = "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/"
5api_url = f"https://api.scrape.do?token={api_token}&url={target_url}&render=true&geoCode=us"
6response = requests.get(api_url)
7soup = BeautifulSoup(response.text, "html.parser")

Từ đây, việc parse giống hệt Cách 1 — cùng selector, cùng logic trích xuất.

Kiểm tra nhanh về giá

Đây là mức phí mà các API lớn tính cho mỗi 1.000 request Amazon ở mức giá tốt nhất hiện có:

Nhà cung cấpChi phí mỗi 1.000 requestGhi chú
Scrape.doKhoảng $0,19Giá cố định, không nhân hệ số credit
OxylabsKhoảng $1,80Nhân hệ số 5x khi render JS
ScrapingBeeKhoảng $4,90Nhân hệ số 5–25x cho tính năng cao cấp
Bright Data$5,00+Dữ liệu đầy đủ nhất (686 trường/sản phẩm) nhưng chậm nhất (~66 giây/request)

Ưu và nhược điểm

Ưu điểm: Độ tin cậy cao ( trên Amazon với các nhà cung cấp hàng đầu), không phải bảo trì driver, tự xử lý chống bot, mở rộng tốt.

Nhược điểm: Trả phí theo request (chi phí tăng nhanh khi làm ở quy mô lớn), vẫn phải tự viết code parse, và vẫn có thể vỡ nếu Amazon đổi CSS selector. Với 100.000 trang/tháng, chênh lệch chi phí tổng thể là rất lớn: xây in-house tốn khoảng — tiết kiệm 71%.

Điểm hòa vốn thường rơi vào khoảng 500K–1M request/tháng. Thấp hơn mức đó thì lợi ích tiết kiệm thời gian của API thường vượt xa chi phí.

Cách 4: Scrape Amazon Best Sellers bằng Thunderbit (không cần Python)

Nói rõ trước: tôi làm việc tại Thunderbit, nên hãy đọc phần này với bối cảnh đó trong đầu. Dù vậy, tôi thực sự đã thử cả 4 cách liên tiếp, và sự khác biệt về tốc độ ra dữ liệu là rất rõ.

là một AI web scraper chạy dưới dạng Chrome extension. Ý tưởng cốt lõi: thay vì viết CSS selector hay code Python, AI sẽ đọc trang và tự hiểu cần trích xuất dữ liệu gì. Riêng với Amazon Best Sellers, Thunderbit có sẵn template dựng trước chỉ cần một cú click.

Bước 1: Cài Thunderbit Chrome Extension

Vào và bấm “Add to Chrome.” Đăng ký tài khoản miễn phí — gói miễn phí đủ credit để bạn thử.

Bước 2: Mở trang Amazon Best Sellers

Mở bất kỳ trang danh mục Amazon Best Sellers nào trong Chrome. Ví dụ: https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/

Bước 3: Bấm “AI Suggest Fields”

Mở thanh bên của Thunderbit và bấm “AI Suggest Fields.” AI sẽ phân tích cấu trúc trang và gợi ý các cột: Tên sản phẩm, Giá, Đánh giá, URL ảnh, Nhà bán, URL sản phẩm, và Thứ hạng. Trong thử nghiệm của tôi, nó xác định đúng toàn bộ trường liên quan chỉ trong khoảng 3 giây.

amazon-thunderbit-product-data.webp

Bạn có thể đổi tên, xóa hoặc thêm cột. Thậm chí còn có thể thêm prompt AI tùy chỉnh cho từng trường — ví dụ: “phân loại thành Electronics/Apparel/Home” để thêm thẻ danh mục cho từng sản phẩm.

Bước 4: Bấm “Scrape”

Nhấn nút “Scrape”. Thunderbit sẽ điền một bảng có cấu trúc đầy đủ dữ liệu sản phẩm trên trang. Ở chế độ cloud, nó có thể xử lý cùng lúc tới 50 trang song song, tự động lo lazy loading và phân trang.

Bước 5: Xuất dữ liệu miễn phí

Bấm “Export” và chọn nơi xuất: Excel, Google Sheets, Airtable hoặc Notion. Tất cả tính năng xuất dữ liệu đều miễn phí ở mọi gói — không có phí ẩn.

product-data-export.webp

Toàn bộ quy trình của tôi mất khoảng 90 giây tính từ lúc mở trang đến khi có một bảng tính hoàn chỉnh. So sánh nhé: Cách 1 mất khoảng 20 phút (gồm cả gỡ lỗi lazy loading), Cách 2 mất khoảng 35 phút (gồm cả cài Selenium), và Cách 3 mất khoảng 15 phút (gồm cả tạo tài khoản API).

Vì sao Thunderbit xử lý Amazon tốt

Vì AI đọc lại trang từ đầu mỗi lần, nó tự thích nghi với thay đổi bố cục mà không cần cập nhật CSS selector. Điều này giải quyết trực tiếp lời than phiền phổ biến nhất trong các diễn đàn scraping: “Một web scraper cơ bản là không đủ, bạn phải thêm quá nhiều ‘catch’ cho thay đổi phần tử.” Khi Amazon đổi DOM (và họ làm việc này thường xuyên), bạn không phải sửa gì cả.

Chế độ cloud scraping xử lý xoay proxy, render và chống bot một cách “vô hình” với người dùng. Với ai muốn một giải pháp kiểu “chạy là được”, điều này loại bỏ hoàn toàn nỗi đau chống bị chặn.

Playbook chống bị chặn: Làm sao để tránh Amazon khóa truy cập

Cơ chế phát hiện bot của Amazon rất gắt. Trong quá trình thử nghiệm, IP của tôi đã bị chặn tạm thời, và người dùng trên các diễn đàn cũng báo cáo điều tương tự: “lỗi khắp nơi, Amazon thậm chí bắt đầu chuyển tôi về trang chủ.” Nếu bạn đi theo hướng Python (Cách 1–3), phần này cực kỳ quan trọng.

Dưới đây là chiến lược nhiều lớp, sắp xếp từ cơ bản đến nâng cao:

1. Xoay vòng User-Agent

Gửi cùng một User-Agent liên tục là tín hiệu đỏ. Hãy dùng danh sách 5+ chuỗi trong ví dụ ở Cách 1, và chọn ngẫu nhiên một chuỗi cho mỗi request:

1headers = {"User-Agent": random.choice(USER_AGENTS)}

2. Thêm độ trễ ngẫu nhiên giữa các request

Delay cố định rất dễ bị phát hiện (theo mẫu). Delay ngẫu nhiên an toàn hơn:

1time.sleep(random.uniform(2, 5))

Tôi thấy khoảng 2–5 giây giữa các request giúp tôi tránh bị chú ý với các batch nhỏ (dưới 50 request). Với các lần chạy lớn hơn, hãy tăng lên 3–7 giây.

3. Dùng proxy rotation

Đây là phần quan trọng nhất. cho thấy proxy residential trung bình đạt ~94% tỷ lệ thành công trên Amazon, so với ~59% của proxy datacenter — chênh lệch 35 điểm phần trăm. Hệ thống phát hiện của Amazon bao gồm TLS fingerprinting, phân tích hành vi và giới hạn tốc độ theo IP, nên các IP datacenter thông thường sẽ bị đánh dấu chỉ sau vài giây.

Proxy residential đắt hơn ($2–$12/GB tùy nhà cung cấp) nhưng đáng tin cậy hơn rất nhiều. Ví dụ:

1proxies = {
2    "http": "http://user:pass@residential-proxy.example.com:8080",
3    "https": "http://user:pass@residential-proxy.example.com:8080"
4}
5response = requests.get(url, headers=headers, proxies=proxies)

4. Gia cố browser fingerprint (Selenium)

1options.add_argument('--disable-blink-features=AutomationControlled')
2options.add_experimental_option("excludeSwitches", ["enable-automation"])
3options.add_experimental_option('useAutomationExtension', False)
4# Sau khi khởi tạo driver, xóa cờ navigator.webdriver
5driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {
6    'source': "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"
7})

Giữ cookie xuyên suốt các request sẽ khiến scraper trông giống một phiên người dùng thật hơn:

1session = requests.Session()
2# Truy cập homepage trước để có cookie giống người dùng thật
3session.get("https://www.amazon.com", headers=headers)
4time.sleep(2)
5# Sau đó mới scrape trang mục tiêu
6response = session.get(target_url, headers=headers)

6. Khi nào nên bỏ qua rắc rối này hoàn toàn

Nếu bạn không muốn tự quản lý tất cả những thứ trên, cloud scraping của Thunderbit sẽ lo xoay proxy, render và chống bot một cách tự động. Scraping API cũng xử lý hầu hết các vấn đề này ngay từ đầu. Theo kinh nghiệm của tôi, thời gian debug vấn đề chống bị chặn thường còn dài hơn thời gian viết chính code scrape — vì vậy cách “chỉ cần chạy được” thực sự có ROI.

Làm giàu dữ liệu từ trang con: scrape trang chi tiết sản phẩm để có dữ liệu sâu hơn

Trang Best Sellers chỉ hiển thị thông tin cơ bản — tên, giá, đánh giá, thứ hạng. Nhưng giá trị thực sự cho nghiên cứu FBA nằm ở các trang chi tiết sản phẩm. Đây là những gì bạn bỏ lỡ nếu chỉ scrape trang danh sách:

Trường dữ liệuTrang danh sáchTrang chi tiết sản phẩm
Tên sản phẩm
Giá
Đánh giá
BSR Rank✅ (kèm hạng theo danh mục con)
Thương hiệu
ASIN
Ngày phát hành đầu tiên
Kích thước/Trọng lượng
Số lượng người bán
Tính năng gạch đầu dòng
Chủ sở hữu Buy Box

Trường “Date First Available” đặc biệt hữu ích — nó cho biết sản phẩm đã ở trên thị trường bao lâu, đây là một tín hiệu quan trọng trong phân tích cạnh tranh. Và biết số lượng người bán cùng chủ Buy Box sẽ giúp bạn đánh giá một ngách có đáng để tham gia hay không (nếu chính Amazon giữ hơn 30% thị phần Buy Box thì cạnh tranh là cực kỳ khó).

Cách làm bằng Python: lặp qua từng URL sản phẩm

Sau khi thu thập URL sản phẩm từ trang danh sách, hãy lặp qua từng URL với độ trễ:

1for product in products:
2    time.sleep(random.uniform(3, 6))
3    detail_response = session.get(product["URL"], headers={"User-Agent": random.choice(USER_AGENTS)})
4    detail_soup = BeautifulSoup(detail_response.text, "html.parser")
5    # Trích xuất brand
6    brand_tag = detail_soup.find("a", id="bylineInfo")
7    product["Brand"] = brand_tag.get_text(strip=True) if brand_tag else "N/A"
8    # Trích xuất ASIN từ source trang hoặc URL
9    # Trích xuất Date First Available từ bảng thông tin sản phẩm
10    # ... các trường bổ sung khác ...

Cảnh báo trước: chạm vào 100 trang sản phẩm riêng lẻ sẽ làm tăng đáng kể nguy cơ bị chặn. Hãy tính thêm proxy rotation và delay dài hơn.

Cách làm với Thunderbit: scrape trang con chỉ bằng một cú click

Sau khi scrape trang danh sách thành bảng, hãy bấm “Scrape Subpages” trong Thunderbit. AI sẽ truy cập từng URL sản phẩm và tự động làm giàu bảng với các cột bổ sung — thương hiệu, ASIN, thông số kỹ thuật, tính năng — hoàn toàn tự động. Không cần thêm code, selector hay cài đặt gì nữa. Cách này đặc biệt hữu ích cho các đội e-commerce cần bức tranh đầy đủ để ra quyết định nguồn hàng nhưng không muốn tự viết và bảo trì parser cho trang chi tiết.

Tự động hóa scrape định kỳ: theo dõi Best Sellers theo thời gian

Scrape một lần thì hữu ích, nhưng giám sát liên tục mới là nơi lợi thế cạnh tranh thực sự xuất hiện. Theo dõi sản phẩm nào tăng giảm, phát hiện xu hướng sớm, và quan sát biến động giá trong vài tuần hoặc vài tháng — đó là thứ phân biệt nghiên cứu “cho vui” với quyết định dựa trên dữ liệu.

Cách làm bằng Python: lên lịch với Cron

Trên Linux/Mac, bạn có thể lên lịch script Python bằng cron. Đây là dòng crontab cho lần scrape mỗi ngày lúc 8 giờ sáng:

10 8 * * * /usr/bin/python3 /home/user/amazon_scraper.py >> /home/user/logs/scrape.log 2>&1

Với lịch scrape hàng tuần vào thứ Hai lúc 9 giờ sáng:

10 9 * * 1 /usr/bin/python3 /home/user/amazon_scraper.py >> /home/user/logs/scrape.log 2>&1

Trên Windows, bạn dùng Task Scheduler để làm điều tương tự. Nếu muốn chạy liên tục mà không cần giữ laptop bật, bạn có thể deploy lên VPS hoặc AWS Lambda — nhưng như vậy sẽ làm tăng độ phức tạp hạ tầng.

Hãy thêm logging và cảnh báo lỗi để phát hiện job thất bại. Không gì tệ hơn việc phát hiện scraper của bạn đã hỏng âm thầm từ hai tuần trước.

Cách làm với Thunderbit: Scheduled Scraper bằng ngôn ngữ tự nhiên

Scheduled Scraper của Thunderbit cho phép bạn mô tả lịch bằng ngôn ngữ tự nhiên — gõ “every Monday at 9am” hoặc “every day at 8am” là AI sẽ hiểu lịch chạy. Các lần scrape diễn ra trên cloud server của Thunderbit (không cần trình duyệt hay máy tính của bạn phải chạy), và dữ liệu tự động xuất ra Google Sheets hoặc Airtable. Điều này tạo ra một dashboard giám sát trực tiếp mà không cần quản lý server — rất phù hợp với đội vận hành muốn theo dõi liên tục mà không phải gánh DevOps.

Những cân nhắc pháp lý và đạo đức khi scrape Amazon

Tôi không phải luật sư, và đây không phải tư vấn pháp lý. Nhưng nếu bỏ qua bối cảnh pháp lý trong một bài hướng dẫn scraping thì sẽ là thiếu trách nhiệm — người dùng trên diễn đàn đã nêu rõ lo ngại về ToS, và điều đó có lý do.

robots.txt của Amazon: Tính đến năm 2026, robots.txt của Amazon có hơn 80 đường dẫn Disallow cụ thể, nhưng /gp/bestsellers/ KHÔNG bị chặn rõ ràng đối với user agent thông thường. Tuy nhiên, hơn 35 user agent dành riêng cho AI (ClaudeBot, GPTBot, Scrapy, v.v.) bị áp dụng Disallow: / trên toàn bộ. Việc không bị chặn cụ thể không có nghĩa là Amazon cho phép scraping.

Điều khoản dịch vụ của Amazon: của Amazon (cập nhật tháng 5/2025) cấm rõ ràng việc “sử dụng bất kỳ quy trình tự động hoặc công nghệ nào để truy cập, lấy, sao chép hoặc giám sát bất kỳ phần nào của website Amazon” nếu không có sự cho phép bằng văn bản. Đây không phải chuyện lý thuyết — Amazon đã vào tháng 11/2025 vì truy cập tự động trái phép và đã thắng lệnh cấm sơ bộ.

Tiền lệ hiQ v. LinkedIn: Trong (Tòa phúc thẩm Khu vực 9, 2022), tòa kết luận rằng việc scrape dữ liệu công khai có thể không vi phạm Đạo luật Gian lận và Lạm dụng Máy tính (CFAA). Nhưng hiQ cuối cùng vẫn dàn xếp và đồng ý ngừng scrape — thắng CFAA không đồng nghĩa được miễn trừ khỏi các khiếu nại vi phạm hợp đồng.

Nguyên tắc thực tế:

  • Chỉ scrape dữ liệu công khai (giá, BSR, tiêu đề sản phẩm — không phải PII)
  • Tôn trọng rate limit và đừng làm quá tải server
  • Chỉ dùng dữ liệu cho mục đích tình báo cạnh tranh hợp pháp
  • Hãy hỏi tư vấn pháp lý của riêng bạn trước khi scrape ở quy mô lớn
  • Lưu ý rằng hiện đã có luật bảo mật toàn diện

Cloud scraping của Thunderbit dùng mẫu request giống trình duyệt tiêu chuẩn, nhưng bạn vẫn nên kiểm tra tuân thủ với cố vấn pháp lý của riêng mình.

Nên chọn phương pháp nào? Hướng dẫn quyết định nhanh

Tóm tắt ngắn gọn:

  • “Tôi đang học Python và muốn có một dự án cuối tuần.” → Cách 1 (requests + BeautifulSoup). Bạn sẽ học rất nhiều về HTTP request, parse HTML và cơ chế chống bot của Amazon.
  • “Tôi cần scrape các trang nặng JavaScript hoặc phiên đã đăng nhập.” → Cách 2 (Selenium). Nặng hơn nhưng xử lý nội dung động tốt.
  • “Tôi đang chạy scrape production ở quy mô lớn.” → Cách 3 (Scraping API). Hãy để người khác quản lý proxy và render. thường nghiêng về API khi dưới 500K request/tháng.
  • “Tôi không phải lập trình viên và muốn có dữ liệu trong 2 phút.” → Cách 4 (). Không cần code, không cần selector, không cần bảo trì.
  • “Tôi cần theo dõi liên tục mà không muốn quản lý server.” → Thunderbit Scheduled Scraper. Thiết lập một lần là xong.

Kết luận và điểm rút ra chính

Sau một cuối tuần thử nghiệm, đây là những gì thực sự đọng lại:

requests + BeautifulSoup rất tốt để học, nhưng giới hạn lazy loading (chỉ khoảng 30 trên 50 sản phẩm) và selector CSS dễ gãy khiến nó không thực tế cho production.

Selenium giải quyết được lazy loading và lấy đủ 50 sản phẩm mỗi trang, nhưng chậm, ngốn bộ nhớ và vẫn có thể bị hệ thống bot của Amazon phát hiện.

Scraping API mang lại độ tin cậy tốt nhất cho scraping quy mô lớn — trên Amazon — nhưng chi phí tăng theo số request và bạn vẫn phải tự viết phần parse.

Thunderbit cho tốc độ ra dữ liệu nhanh nhất, bỏ xa các cách còn lại. AI xử lý thay đổi bố cục, lazy loading, phân trang và cơ chế chống bot mà không cần cấu hình. Với người không rành kỹ thuật hoặc đội cần dữ liệu định kỳ mà không muốn gánh DevOps, đây là lựa chọn thực tế nhất.

Bài học lớn nhất? Cơ chế chống bot của Amazon và việc họ thường xuyên thay đổi bố cục khiến các giải pháp ít phải bảo trì tiết kiệm thời gian nhất về lâu dài. Mỗi giờ bạn dành để debug selector hỏng và xoay proxy là một giờ bạn không dành cho phân tích thực sự.

Muốn thử cách không cần code? đủ credit để bạn scrape vài danh mục Best Sellers và tự xem kết quả. Nếu thích đi theo hướng Python, các ví dụ code ở trên sẽ giúp bạn bắt đầu. Dù chọn cách nào, bạn sẽ có dữ liệu Amazon Best Seller trong bảng tính thay vì chỉ nhìn chằm chằm vào một tab trình duyệt.

Để tìm hiểu thêm về các cách web scraping, hãy xem các hướng dẫn của chúng tôi về , , và . Bạn cũng có thể xem video hướng dẫn từng bước trên .

Tìm hiểu thêm

Mục lục

Thử Thunderbit

Trích xuất lead và dữ liệu khác chỉ trong 2 cú nhấp. Powered by AI.

Nhận Thunderbit Miễn phí
Trích xuất dữ liệu bằng AI
Dễ dàng chuyển dữ liệu sang Google Sheets, Airtable hoặc Notion
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week