Cuối tuần vừa rồi, tôi đã nấu hết một ấm cà phê chỉ để thử cào trang Amazon Best Sellers theo bốn cách khác nhau. Hai cách cho kết quả rất ổn, một cách suýt làm IP của tôi bị chặn, và một cách thì chỉ cần đúng một cú nhấp chuột. Dưới đây là tất cả những gì tôi rút ra được.
Amazon là một “quái vật” đúng nghĩa trong thế giới thương mại điện tử — 600 triệu sản phẩm được niêm yết, hơn 310 triệu tài khoản khách hàng đang hoạt động, và hệ thống Best Sellers Rank (BSR) được cập nhật mỗi giờ. Nếu bạn đang nghiên cứu sản phẩm cho FBA, phân tích giá đối thủ, hoặc đơn giản là muốn bắt trend trước khi đối thủ kịp nhận ra, thì dữ liệu Best Sellers chính là một “mỏ vàng”.
Nhưng làm sao để lấy dữ liệu đó từ Amazon ra bảng tính? Đó mới là phần thú vị. Tôi đã thử requests + BeautifulSoup, Selenium, một scraping API, và Thunderbit (ai web scraper không cần code của chính chúng tôi) để xem cách nào thực sự hiệu quả — và cách nào sẽ khiến bạn ngồi nhìn mãi một trang CAPTCHA.
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 thứ tự sản phẩm theo doanh số trong từng danh mục. Bạn có thể hiểu nó như 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ử. Chính Amazon mô tả như sau:
“Cách tính Amazon Best Sellers dựa trên doanh số Amazon và được cập nhật hàng giờ để phản ánh dữ liệu bán hàng gần đây và lịch sử của mọi mặt hàng được bán trên Amazon.” — Amazon Seller Central
Trang Best Sellers hiển thị 100 sản phẩm đứng đầu mỗi danh mục, chia thành 2 trang, mỗi trang 50 sản phẩm. Trang 1 là hạng #1–50, trang 2 là hạng #51–100. Amazon cũng xác nhận rằng lượt xem trang và đánh giá khách hàng KHÔNG ảnh hưởng đến BSR — yếu tố này hoàn toàn 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, team sales xây dựng tình báo cạnh tranh, team vận hành theo dõi xu hướng giá, và nhà nghiên cứu thị trường muốn nắm tốc độ tăng trưởng của từng danh mục. Theo kinh nghiệm của tôi, hễ ai bán hàng trên Amazon hoặc cạnh tranh với Amazon thì sớm muộn gì cũng cần dữ liệu này trong một file Excel.
Vì sao nên cào Amazon Best Sellers bằng Python?
Nghiên cứu sản phẩm thủ công rất tốn thời gian. Một nghiên cứu của McKinsey cho thấy nhân viên mất đến 9,3 giờ mỗi tuần chỉ để tìm kiếm và thu thập thông tin. Với các team e-commerce, điều đó có nghĩa là hàng giờ đồng hồ phải bấm qua từng trang Amazon, copy tên sản phẩm, giá bán rồi dán vào bảng tính — và tuần sau lại lặp lại từ đầu.
Dưới đây là vài tình huống khiến việc cào Best Sellers rất đáng làm:
| Trường hợp sử dụng | Bạn nhận được gì | Ai hưởng lợi |
|---|---|---|
| Nghiên cứu sản phẩm FBA | Xác định sản phẩm có nhu cầu cao, cạnh tranh thấp dựa trên BSR và số lượng review | Người bán Amazon, dropshipper |
| Theo dõi giá đối thủ | Theo dõi biến động giá của các sản phẩm hàng đầu trong danh mục | Team e-commerce, chuyên viên phân tích giá |
| Theo dõi xu hướng thị trường | Phát hiện danh mục đang tăng trưởng và các thay đổi theo mùa | Product manager, nhà nghiên cứu thị trường |
| Tạo lead | Xây 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ủ | So sánh sản phẩm của bạn với các sản phẩm dẫn đầu danh mục | Brand manager, team chiến lược |
Hiệu quả đầu tư là có thật: một khảo sát của Salesforce với 2.700 chuyên gia thương mại cho thấy công cụ AI giúp tiết kiệm trung bình 6,4 giờ mỗi tuần cho dân e-commerce. Và những người dùng công cụ theo dõi giá tự động giữ Buy Box 67% thời gian, so với 42% ở nhóm theo dõi thủ công — tức tăng doanh số 37% nhờ phản ứng nhanh hơn với thay đổi giá.
4 cách cào Amazon Best Sellers bằng Python: So sánh nhanh
Trước khi đi vào từng hướng dẫn từng bước, đây là bảng so sánh mà tôi ước gì đã có trước khi bắt đầu thử nghiệm. Nó sẽ giúp bạn chọn đúng phương pháp cho nhu cầu của mình:
| Tiêu chí | requests + BS4 | Selenium | Scraping API (ví dụ: Scrape.do) | Thunderbit (No-Code) |
|---|---|---|---|---|
| Độ khó thiết lập | Trung bình | Cao (driver, trình duyệt) | Thấp (API key) | Rất thấp (tiện ích Chrome) |
| Xử lý lazy loading | Không | Có (mô phỏng cuộn trang) | Có (HTML đã render) | Có (AI xử lý phần render) |
| Khả năng chống bot | Thấp (dễ bị chặn IP) | Trung bình (có thể bị phát hiện) | Cao (xoay vòng proxy) | Cao (chế độ cloud + browser) |
| Công sức bảo trì | Cao (selector dễ hỏng) | Cao (cập nhật driver + selector) | Thấp | Rất thấp (AI tự thích ứng khi giao diện đổi) |
| 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ất | Cào một lần, học tập | Trang nặng JS, cần đăng nhập | Quy mô lớn / production | Người không biết code, nghiên cứu nhanh, theo dõi đị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ô production, chọn Cách 3. Còn nếu bạn muốn có kết quả chỉ bằng một cú nhấp mà không phải viết code, hãy đi thẳng tới Cách 4.
Trước khi bắt đầu
- Độ khó: Từ mới bắt đầu đến trung cấp (tùy phương pháp)
- Thời gian cần thiết: Khoảng 15 phút với Thunderbit, khoảng 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, Thunderbit Chrome Extension (cho Cách 4), và một URL danh mục Amazon Best Sellers mục tiêu
Cách 1: Cào Amazon Best Sellers bằng requests + BeautifulSoup
Đây là cách nhẹ, thân thiện với người mới — không tự động hóa trình duyệt, chỉ gửi HTTP request và phân tích HTML. Nó cũng dạy tôi nhiều nhất về cơ chế chống scraping của Amazon.
Bước 1: Thiết lập môi trường
Cài các gói cần thiết:
pip install requests beautifulsoup4 pandas
Sau đó import các thư viện:
import requests
from bs4 import BeautifulSoup
import pandas as pd
import random
import time
Bước 2: Gửi request với header trông giống người dùng thật
Amazon chặn các request nhìn giống bot. Cách 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à một đoạn mã với danh sách User-Agent hiện đại, khá sát thực tế (nguồn từ Geekflare, tháng 3/2026):
USER_AGENTS = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36",
"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",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:149.0) Gecko/20100101 Firefox/149.0",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 15.7; rv:149.0) Gecko/20100101 Firefox/149.0",
"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",
]
headers = {"User-Agent": random.choice(USER_AGENTS)}
url = "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/"
response = requests.get(url, headers=headers)
print(response.status_code) # Nên là 200
Nếu bạn thấy mã 200 thì ổn. Nếu là 503 hoặc bị chuyển sang trang CAPTCHA, Amazon đã đánh dấu request của bạn.
Bước 3: Phân tích dữ liệu sản phẩm bằng BeautifulSoup
Hãy kiểm tra HTML của trang Amazon bằng DevTools của 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ẽ thấy tên sản phẩm, giá, đánh giá và URL.
soup = BeautifulSoup(response.text, "html.parser")
products = []
for item in soup.find_all("div", id="gridItemRoot"):
title_tag = item.find("div", class_="_cDEzb_p13n-sc-css-line-clamp-3_g3dy1")
price_tag = item.find("span", class_="_cDEzb_p13n-sc-price_3mJ9Z")
link_tag = item.find("a", class_="a-link-normal")
title = title_tag.get_text(strip=True) if title_tag else "N/A"
price = price_tag.get_text(strip=True) if price_tag else "N/A"
url = "https://www.amazon.com" + link_tag["href"] if link_tag else "N/A"
products.append({"Title": title, "Price": price, "URL": url})
Cảnh báo: Các class bắt đầu bằng
_cDEzb_là hash CSS module mà Amazon sẽ tạo lại theo chu kỳ. IDgridItemRootvà classa-link-normalổn định hơn, nhưng bạn vẫn nên kiểm tra lại selector bằng DevTools trước khi chạy scraper.
Bước 4: Xuất ra CSV
df = pd.DataFrame(products)
df.to_csv("amazon_best_sellers.csv", index=False)
print(f"Đã cào được {len(products)} sản phẩm")
Kết quả thực tế — và những gì có thể hỏng
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 lần đầu; phần còn lại chỉ xuất hiện sau khi cuộn trang, và requests thì không thể xử lý JavaScript.
Các giới hạn khác:
- IP bị chặn rất nhanh nếu không xoay vòng proxy (tôi bị chặn sau khoảng 15 request liên tiếp)
- CSS selector sẽ hỏng khi Amazon thay đổi bố cục trang — mà họ làm chuyện này khá thường xuyên
- Không hỗ trợ xử lý phân trang sẵn
Nếu mục tiêu là học scraping bằng Python thì cách này rất tốt. Nhưng để dùng cho production thì khá mong manh.
Cách 2: Cào 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 khi cài đặt, nhưng đổi lại nó lấy được đủ 50 sản phẩm mỗi trang.
Bước 1: Cài Selenium
pip install selenium pandas
Tin vui là từ Selenium 4.6+, bạn không còn cần webdriver-manager nữa. Selenium Manager sẽ tự tải driver.
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
import pandas as pd
options = Options()
options.add_argument("--headless=new")
options.add_argument("--window-size=1920,1080")
options.add_argument("--disable-blink-features=AutomationControlled")
driver = webdriver.Chrome(options=options)
Cờ --headless=new (giới thiệu từ Chrome 109+) dùng cùng pipeline render như Chrome bình thường, giúp 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 giá. Amazon Best Sellers chỉ tải ban đầu khoảng 30 sản phẩm — phần còn lại sẽ xuất hiện sau khi cuộn.
def scroll_page(driver, scrolls=5, delay=2):
for _ in range(scrolls):
driver.find_element(By.TAG_NAME, "body").send_keys(Keys.PAGE_DOWN)
time.sleep(delay)
driver.get("https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/")
time.sleep(3)
scroll_page(driver)
Sau khi cuộn, toàn bộ 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 điều chỉnh theo tốc độ mạng.
Bước 3: Trích xuất dữ liệu sản phẩm
items = driver.find_elements(By.ID, "gridItemRoot")
products = []
for item in items:
try:
title = item.find_element(By.CSS_SELECTOR, "div._cDEzb_p13n-sc-css-line-clamp-3_g3dy1").text
except:
title = "N/A"
try:
price = item.find_element(By.CSS_SELECTOR, "span._cDEzb_p13n-sc-price_3mJ9Z").text
except:
price = "N/A"
try:
url = item.find_element(By.CSS_SELECTOR, "a.a-link-normal").get_attribute("href")
except:
url = "N/A"
products.append({"Title": title, "Price": price, "URL": url})
Bọc từng bước trích xuất bằng try/except là 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 cả quá trình bị dừng.
Bước 4: Xử lý phân trang
Amazon chia 100 sản phẩm Best Sellers thành 2 trang với cấu trúc URL khác nhau:
urls = [
"https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/",
"https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/ref=zg_bs_pg_2_electronics?_encoding=UTF8&pg=2"
]
all_products = []
for url in urls:
driver.get(url)
time.sleep(3)
scroll_page(driver)
# ... trích xuất sản phẩm như trên ...
all_products.extend(products)
driver.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ừ là mỗi trang mất khoảng 45 giây (bao gồm thời gian cuộn), và tôi vẫn bị gắn cờ sau khi chạy quá nhiều lần mà không xoay proxy. Selenium cũng có thể bị Amazon phát hiện ngay cả khi đã bật các cờ chống phát hiện — nếu muốn chạy ở quy mô lớn, bạn sẽ cần thêm các biện pháp khác (xem phần Anti-Ban Playbook bên dưới).
Các điểm đau đầu khác:
- Đôi khi vẫn xảy ra lệch phiên bản WebDriver, dù Selenium Manager đã làm chuyện này hiếm hơn trước
- CSS selector phải cập nhật mỗi khi Amazon thay đổi DOM
- Tốn RAM khá nhiều — mỗi instance trình duyệt ngốn khoảng 200–400MB
Cách 3: Cào Amazon Best Sellers bằng Scraping API
Scraping API là cách tiếp cận kiểu “để người khác xử lý phần khó”. Các dịch vụ như Scrape.do, Oxylabs, và ScrapingBee sẽ lo xoay proxy, render JavaScript và 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 đến endpoint của API. API sẽ render trang bằng một trình duyệt thật trên hạ tầng của họ, xoay proxy, xử lý CAPTCHA, rồi trả về HTML sạch. Sau đó bạn chỉ cần phân tích HTML bằng BeautifulSoup như bình thường.
Bước 1: Gửi request qua API
Ví dụ dưới đây dùng Scrape.do (giá bắt đầu từ 29 USD/tháng cho 150.000 credits, 1 credit = 1 request bất kể render hay không):
import requests
from bs4 import BeautifulSoup
api_token = "YOUR_API_TOKEN"
target_url = "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/"
api_url = f"https://api.scrape.do?token={api_token}&url={target_url}&render=true&geoCode=us"
response = requests.get(api_url)
soup = BeautifulSoup(response.text, "html.parser")
Từ đây, cách phân tích hoàn toàn giống Cách 1 — cùng selector, cùng logic trích xuất.
Kiểm tra thực tế về giá
Đây là mức giá của các API lớn tính trên 1.000 request Amazon ở mức giá tốt nhất hiện có:
| Nhà cung cấp | Chi phí trên 1.000 request | Ghi chú |
|---|---|---|
| Scrape.do | Khoảng $0.19 | Giá cố định, không nhân hệ số credit |
| Oxylabs | Khoảng $1.80 | Hệ số 5x cho render JS |
| ScrapingBee | Khoảng $4.90 | Hệ số 5–25x cho tính năng cao cấp |
| Bright Data | Từ $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: Độ ổn định cao (tỷ lệ thành công khoảng 99% trên Amazon ở các nhà cung cấp hàng đầu), không phải bảo trì driver, tự động xử lý anti-bot, mở rộng quy mô tốt.
Nhược điểm: Trả phí theo request (chi phí tăng nhanh khi scale lớn), vẫn phải viết code phân tích dữ liệu, và vẫn có thể bị ảnh hưởng khi CSS selector thay đổi. Với 100.000 trang/tháng, chênh lệch chi phí tổng cực kỳ lớn: tự xây in-house tốn khoảng $1,98 triệu trong 3 năm so với $332K khi dùng nhà cung cấp API — tiết kiệm 71%.
Điểm hòa vốn thường nằm trong khoảng 500K–1M request/tháng. Dưới mức đó, lợi ích tiết kiệm thời gian của API thường vượt xa chi phí.
Cách 4: Cào Amazon Best Sellers bằng Thunderbit (không cần Python)
Nói rõ luôn: tôi làm việc tại Thunderbit, nên bạn hãy đọc phần này với bối cảnh đó. Dù vậy, tôi thực sự đã test cả bốn cách liên tiếp, và chênh lệch về tốc độ có dữ liệu là rất rõ ràng.
Thunderbit là một ai web scraper chạy dưới dạng tiện ích Chrome. Ý tưởng cốt lõi: thay vì viết CSS selector hay code Python, AI sẽ đọc trang và tự hiểu dữ liệu nào cần lấy. Riêng với Amazon Best Sellers, Thunderbit đã có sẵn template dùng một cú nhấp là chạy.
Bước 1: Cài Thunderbit Chrome Extension
Vào Chrome Web Store và nhấn “Add to Chrome.” Đăng ký tài khoản miễn phí — gói free có đủ 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: Nhấn “One Click Extract”
Mở thanh bên của Thunderbit và nhấn “One Click Extract.” AI sẽ phân tích cấu trúc trang và tự xác định các cột: Product Name, Price, Rating, Image URL, Vendor, Product URL, và Rank. Trong lần test của tôi, nó nhận đúng toàn bộ các trường liên quan chỉ trong khoảng 3 giây.

Bạn có thể đổi tên, xóa bớt hoặc thêm cột. Thậm chí 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” để gắn nhãn danh mục cho mỗi sản phẩm.
Bước 4: Nhấn “Scrape”
Bấm nút “Scrape”. Thunderbit sẽ điền một bảng có cấu trúc đầy đủ dữ liệu sản phẩm từ trang. Ở chế độ cloud, nó có thể xử lý song song tối đa 50 trang cùng lúc, tự động xử lý lazy loading và phân trang.
Bước 5: Xuất dữ liệu miễn phí
Nhấn “Export” và chọn nơi bạn muốn xuất: Excel, Google Sheets, Airtable hoặc Notion. Việc export đều miễn phí trên mọi gói — không có phí ẩn.

Toàn bộ quá trình của tôi chỉ mất khoảng 90 giây, từ lúc mở trang đến khi có một bảng tính hoàn chỉnh. Để so sánh, Cách 1 mất khoảng 20 phút (bao gồm cả việc gỡ lỗi lazy loading), Cách 2 mất khoảng 35 phút (bao gồm cả thiết lập Selenium), và Cách 3 mất khoảng 15 phút (bao gồm cả bước tạo tài khoản API).
Vì sao Thunderbit xử lý Amazon rất tốt
Vì AI đọc trang lại từ đầu mỗi lần, nó tự thích ứng với thay đổi bố cục mà không cần bảo trì CSS selector. Điều này giải quyết trực tiếp phàn nàn phổ biến nhất trên các diễn đàn scraping: “web scraper cơ bản là không đủ, phải thêm quá nhiều ‘catch’ cho các thay đổi phần tử.” Khi Amazon đổi DOM (điều này xảy ra thường xuyên), bạn không phải cập nhật gì cả.
Chế độ cloud scraping tự động lo xoay proxy, render, và các biện pháp chống bot một cách minh bạch. Với người dùng muốn một giải pháp “cứ dùng là chạy”, cách này giúp loại bỏ hoàn toàn nỗi lo anti-ban.
Không cần bảo trì selector nữa Khi Amazon thay đổi cấu trúc HTML, selector BeautifulSoup của bạn sẽ hỏng. AI của Thunderbit sẽ đọc lại trang mỗi lần chạy và tự xác định lại các trường dữ liệu. Get Started Free
Anti-Ban Playbook: Làm sao tránh bị Amazon chặn
Hệ thống phát hiện bot của Amazon rất gắt. Trong lúc test, 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 phản ánh tương tự: “lỗi khắp nơi, Amazon còn 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 là cực kỳ quan trọng.
Dưới đây là chiến lược theo từng lớp, xếp từ cơ bản đến nâng cao:
1. Xoay vòng User-Agent
Gửi đi gửi lại cùng một User-Agent là tín hiệu đáng ngờ. Hãy dùng danh sách 5+ chuỗi từ ví dụ ở Cách 1, và chọn ngẫu nhiên một chuỗi cho mỗi request:
headers = {"User-Agent": random.choice(USER_AGENTS)}
2. Thêm độ trễ ngẫu nhiên giữa các request
Độ trễ cố định rất dễ bị nhận ra (vì có mẫu lặp). Ngẫu nhiên sẽ an toàn hơn:
time.sleep(random.uniform(2, 5))
Tôi thấy rằng khoảng cách 2–5 giây giữa các request giúp tôi “ẩn mình” khá tốt với những lô nhỏ (dưới 50 request). Với các chạy lớn hơn, hãy tăng lên 3–7 giây.
3. Dùng proxy xoay vòng
Đây là phần quan trọng nhất. Benchmark của Proxyway cho thấy proxy residential có tỷ lệ thành công trung bình khoảng 94% trên Amazon, trong khi proxy datacenter chỉ khoảng 59% — 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 theo từng IP, nên IP datacenter thường bị gắn cờ chỉ trong 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ụ code:
proxies = {
"http": "http://user:pass@residential-proxy.example.com:8080",
"https": "http://user:pass@residential-proxy.example.com:8080"
}
response = requests.get(url, headers=headers, proxies=proxies)
4. Tăng cường fingerprint trình duyệt (Selenium)
options.add_argument('--disable-blink-features=AutomationControlled')
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
# Sau khi khởi tạo driver, xóa cờ navigator.webdriver
driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {
'source': "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"
})
5. Quản lý session và cookie
Giữ cookie giữa các request sẽ khiến scraper của bạn trông giống một phiên người dùng thật hơn:
session = requests.Session()
# Truy cập trang chủ trước để có cookie giống người thật
session.get("https://www.amazon.com", headers=headers)
time.sleep(2)
# Sau đó mới cào trang mục tiêu
response = session.get(target_url, headers=headers)
6. Khi nào nên bỏ qua luôn cho đỡ mệt
Với những ai không muốn tự quản lý mấy thứ trên, cloud scraping của Thunderbit sẽ lo proxy rotation, render và chống bot một cách minh bạch. Scraping API cũng xử lý phần lớn các vấn đề này ngay từ đầu. Theo kinh nghiệm của tôi, thời gian gỡ lỗi anti-ban thường còn nhiều hơn thời gian viết code cào dữ liệu thật — nên hướng “cứ chạy là được” có ROI rất thật.
Mở rộng bằng subpage: Cào trang chi tiết sản phẩm để có dữ liệu sâu hơn
Trang Best Sellers chỉ cho bạn thông tin cơ bản — tiêu đề, giá, đánh giá, thứ hạng. Nhưng giá trị thật cho nghiên cứu FBA lại nằm ở từng trang chi tiết sản phẩm riêng lẻ. Nếu bạn chỉ cào trang danh sách, bạn sẽ bỏ lỡ những dữ liệu sau:
| Trường dữ liệu | Trang danh sách | Trang chi tiết sản phẩm |
|---|---|---|
| Tên sản phẩm | ✅ | ✅ |
| Giá | ✅ | ✅ |
| Đánh giá | ✅ | ✅ |
| Hạng BSR | ✅ | ✅ (kèm xếp hạng theo danh mục con) |
| Thương hiệu | ❌ | ✅ |
| ASIN | ❌ | ✅ |
| Ngày phát hành lần đầu | ❌ | ✅ |
| Kích thước/Trọng lượng | ❌ | ✅ |
| Số lượng người bán | ❌ | ✅ |
| Tính năng dạng bullet | ❌ | ✅ |
| Chủ sở hữu Buy Box | ❌ | ✅ |
Trường “Ngày phát hành lần đầu” đặc biệt hữu ích — nó cho biết sản phẩm đã có mặt trên thị trường bao lâu, đây là tín hiệu quan trọng khi phân tích cạnh tranh. Và số lượng người bán cùng chủ sở hữu Buy Box giúp bạn đánh giá liệu một ngách sản phẩm 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 cực kỳ khó).
Cách làm bằng Python: lặp qua URL sản phẩm
Sau khi lấy được URL sản phẩm từ trang danh sách, hãy lặp qua từng URL với độ trễ:
for product in products:
time.sleep(random.uniform(3, 6))
detail_response = session.get(product["URL"], headers={"User-Agent": random.choice(USER_AGENTS)})
detail_soup = BeautifulSoup(detail_response.text, "html.parser")
# Trích xuất thương hiệu
brand_tag = detail_soup.find("a", id="bylineInfo")
product["Brand"] = brand_tag.get_text(strip=True) if brand_tag else "N/A"
# Trích xuất ASIN từ mã nguồn trang hoặc URL
# Trích xuất Ngày phát hành lần đầu từ bảng thông tin sản phẩm
# ... 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 mạnh nguy cơ bị chặn. Hãy tính trước cho proxy rotation và thời gian chờ dài hơn.
Cách làm với Thunderbit: Scrape subpage chỉ với một cú nhấp
Sau khi cào trang danh sách thành một bảng, hãy nhấn “Scrape Subpages” trong Thunderbit. AI sẽ ghé từng URL sản phẩm và bổ sung thêm các cột — 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 thiết lập gì nữa. Cách này đặc biệt hữu ích cho các team 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 các lần cào định kỳ: Theo dõi Best Sellers theo thời gian
Cào một lần thì hữu ích, nhưng theo dõi liên tục mới là nơi tạo ra lợi thế cạnh tranh thật sự. Theo dõi sản phẩm nào tăng hay giảm, phát hiện xu hướng sớm, và quan sát biến động giá trong nhiều tuần hoặc nhiều tháng — đó là thứ phân biệt nghiên cứu “cho có” 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 cho script Python bằng cron. Đây là crontab cho một lần cào mỗi ngày lúc 8 giờ sáng:
0 8 * * * /usr/bin/python3 /home/user/amazon_scraper.py >> /home/user/logs/scrape.log 2>&1
Với lịch mỗi tuần vào thứ Hai lúc 9 giờ sáng:
0 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 lại 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 các lần chạy thất bại. Không gì tệ hơn việc phát hiện ra 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õ “mỗi thứ Hai lúc 9 giờ sáng” hoặc “mỗi ngày lúc 8 giờ sáng” và AI sẽ hiểu lịch đó. Các lần scrape chạy 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 hoạt động), và dữ liệu tự động xuất sang 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 phải quản lý server — rất hợp cho các team vận hành muốn theo dõi thường xuyên nhưng không muốn gánh phần DevOps.
Lưu ý pháp lý và đạo đức khi cào Amazon
Tôi không phải luật sư, và đây không phải lời khuyê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ẽ không trách nhiệm — người dùng trên diễn đàn thường xuyên nêu lo ngại về Điều khoản sử dụng, và điều đó có lý do chính đáng.
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 tiêu chuẩn. Tuy nhiên, hơn 35 user-agent dành riêng cho AI (ClaudeBot, GPTBot, Scrapy, v.v.) lại nhận lệnh Disallow: / hoàn toàn. Việc không bị chặn cụ thể không có nghĩa là Amazon đồng ý cho scraping.
Điều khoản dịch vụ của Amazon: Conditions of Use 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, thu thập, 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 đã kiện Perplexity AI 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 vụ hiQ Labs v. LinkedIn (Tòa Phúc thẩm Liên bang Khu vực 9, 2022), tòa án cho rằng việc cào dữ liệu công khai có lẽ không vi phạm Computer Fraud and Abuse Act. Nhưng cuối cùng hiQ vẫn phải dàn xếp và đồng ý dừng scraping — thắng kiện CFAA không đồng nghĩa với việc an toàn trước các cáo buộc vi phạm hợp đồng.
Nguyên tắc thực tế:
- Chỉ cào dữ liệu công khai (giá, BSR, tên sản phẩm — không phải PII)
- Tôn trọng rate limit và đừng gây quá tải máy chủ
- Dùng dữ liệu cho mục đích tình báo cạnh tranh hợp pháp
- Tham khảo ý kiến luật sư của bạn trước khi cào ở quy mô lớn
- Lưu ý rằng hơn 20 tiểu bang ở Mỹ hiện đã có luật bảo mật toàn diện
Cloud scraping của Thunderbit dùng các mẫu request giống trình duyệt tiêu chuẩn, nhưng bạn vẫn nên kiểm tra kỹ với luật sư riêng để bảo đảm tuân thủ.
Bài này không cần Python Nếu mục tiêu là có một bảng tính chứ không phải xây pipeline, một cú nhấp là đủ. Xuất thẳng sang Excel, Google Sheets, Airtable hoặc Notion. Get Started Free
Nên dùng phương pháp nào? Hướng dẫn chọn nhanh
Tóm lại:
- “Tôi đang học Python và muốn làm một dự án cuối tuần.” → Cách 1 (requests + BeautifulSoup). Bạn sẽ học được rất nhiều về HTTP request, phân tích HTML và cơ chế chống bot của Amazon.
- “Tôi cần cào trang nặng JavaScript hoặc phiên đăng nhập.” → Cách 2 (Selenium). Nặng hơn nhưng xử lý được nội dung động.
- “Tôi đang chạy scraping production ở quy mô lớn.” → Cách 3 (Scraping API). Hãy để bên khác lo proxy và render. Tổng chi phí sở hữu thường có lợi cho API khi dưới 500K request/tháng.
- “Tôi không phải developer và muốn có dữ liệu trong 2 phút.” → Cách 4 (Thunderbit). Không cần code, không cần selector, không cần bảo trì.
- “Tôi cần giám sát liên tục mà không muốn quản lý server.” → Thunderbit Scheduled Scraper. Thiết lập một lần rồi để đó.
Thử Thunderbit cho Amazon Best Sellers Get Started Free
Kết luận và bài học chính
Sau cả một cuối tuần test, đây là những điều thực sự đọng lại:
requests + BeautifulSoup rất tốt để học, nhưng giới hạn lazy loading (chỉ lấy được khoảng 30 trong 50 sản phẩm) và selector CSS dễ hỏng khiến nó không thực tế cho production.
Selenium giải quyết được vấn đề 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 là lựa chọn đáng tin cậy nhất cho scraping quy mô production — tỷ lệ thành công khoảng 99% trên Amazon — nhưng chi phí sẽ tăng dần và bạn vẫn phải viết code phân tích dữ liệu.
Thunderbit cho thời gian có dữ liệu nhanh nhất, bỏ xa các cách khác. AI xử lý thay đổi giao diện, 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 chuyên kỹ thuật hoặc team cần dữ liệu định kỳ mà không muốn gánh DevOps, đây là lựa chọn thực dụng nhất.
Bài học lớn nhất? Vì Amazon có cơ chế chống bot mạnh và thay đổi giao diện thường xuyên, những giải pháp ít phải bảo trì sẽ tiết kiệm thời gian nhất về lâu dài. Mỗi giờ bạn dành để debug selector bị hỏng và xoay proxy là một giờ bạn không dùng để phân tích thật sự.
Muốn thử cách không cần code? Gói miễn phí của Thunderbit cho bạn đủ credit để cào vài danh mục Best Sellers và tự xem kết quả. Nếu thích 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 cũng sẽ có dữ liệu Amazon Best Seller trong bảng tính thay vì chỉ ngồi nhìn một tab trình duyệt.
Nếu muốn 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ề cào sản phẩm và review Amazon, trích xuất dữ liệu từ website sang Excel, và các AI web scraper tốt nhất. Bạn cũng có thể xem các video hướng dẫn từng bước trên kênh YouTube của Thunderbit.
Tìm hiểu thêm


