สุดสัปดาห์ที่ผ่านมา ผมใช้กาแฟไปทั้งหม้อเพื่อทดลองดึงข้อมูลหน้า Amazon Best Sellers อยู่ 4 วิธี ผลลัพธ์มีทั้งแบบที่เวิร์กสุด ๆ แบบที่เกือบโดนบล็อก IP และแบบที่คลิกครั้งเดียวก็ได้ข้อมูลเลย นี่คือทุกอย่างที่ผมได้เรียนรู้มา
Amazon คือแพลตฟอร์มขนาดมหึมา — มี สินค้าลงขายกว่า 600 ล้านรายการ, บัญชีลูกค้าใช้งานอยู่กว่า 310 ล้านบัญชี และระบบ Best Sellers Rank (BSR) ที่อัปเดตทุกชั่วโมง ถ้าคุณทำวิจัยสินค้า FBA วิเคราะห์ราคาคู่แข่ง หรือแค่ต้องการจับเทรนด์ก่อนคู่แข่ง ข้อมูล Best Seller คือขุมทรัพย์ชั้นดี
แต่การเอาข้อมูลนั้นออกจาก Amazon แล้วส่งเข้าไปในสเปรดชีตนี่สิ คือจุดที่เริ่มสนุก ผมลองทั้ง requests + BeautifulSoup, Selenium, scraping API และ Thunderbit ซึ่งเป็น AI web scraper แบบไม่ต้องเขียนโค้ดของเราเอง เพื่อดูว่าวิธีไหนให้ผลลัพธ์ได้จริง และวิธีไหนจะพาคุณไปเจอหน้า CAPTCHA
Amazon Best Sellers คืออะไร และทำไมคุณควรสนใจ?
Amazon Best Sellers Rank (BSR) คือกระดานจัดอันดับแบบเรียลไทม์ของ Amazon ที่จัดสินค้าตามยอดขายในแต่ละหมวดหมู่ ลองมองว่าเป็นการแข่งขันความนิยมที่อัปเดตทุกชั่วโมง โดยอ้างอิงทั้งยอดขายล่าสุดและยอดขายในอดีต Amazon อธิบายไว้แบบนี้:
"การคำนวณ Amazon Best Sellers อิงจากยอดขายบน Amazon และอัปเดตทุกชั่วโมงเพื่อสะท้อนยอดขายล่าสุดและยอดขายในอดีตของสินค้าทุกรายการที่ขายบน Amazon" — Amazon Seller Central
หน้า Best Sellers จะแสดงสินค้า 100 อันดับแรกในแต่ละหมวด โดยแบ่งเป็น 2 หน้า หน้าละ 50 รายการ หน้า 1 คืออันดับ #1–50 และหน้า 2 คืออันดับ #51–100 Amazon ยืนยันแล้วว่าจำนวนการเข้าชมหน้าและรีวิวลูกค้าไม่ได้ส่งผลต่อ BSR — ตัวเลขนี้มาจากยอดขายล้วน ๆ
แล้วใครต้องใช้ข้อมูลนี้? คนขาย e-commerce ที่กำลังคัดสินค้าเข้า FBA ทีมขายที่ทำ competitive intelligence ทีม operation ที่ติดตามเทรนด์ราคา และนักวิจัยตลาดที่ดูการเติบโตของหมวดสินค้า จากประสบการณ์ของผม ใครก็ตามที่ขายบน Amazon หรือแข่งกับ Amazon สุดท้ายแล้วมักต้องมีข้อมูลนี้อยู่ในสเปรดชีตเสมอ
ทำไมต้องใช้ Python ดึง Amazon Best Sellers?
การรีเสิร์ชสินค้าด้วยมือกินเวลามาก งานวิจัยของ McKinsey พบว่าพนักงานใช้เวลาถึง 9.3 ชั่วโมงต่อสัปดาห์ไปกับการค้นหาและรวบรวมข้อมูลอย่างเดียว สำหรับทีม e-commerce นั่นแปลว่าใช้เวลาหลายชั่วโมงไล่คลิกหน้า Amazon คัดลอกชื่อสินค้าและราคา แล้ววางลงสเปรดชีต ก่อนจะต้องทำซ้ำใหม่ในสัปดาห์ถัดไป
มาดูตัวอย่างการใช้งานที่ทำให้การดึงข้อมูล Best Sellers คุ้มค่ากัน:
| กรณีใช้งาน | สิ่งที่ได้ | ใครได้ประโยชน์ |
|---|---|---|
| วิจัยสินค้า FBA | หาโปรดักต์ที่ดีมานด์สูงแต่คู่แข่งยังไม่แน่น จาก BSR และจำนวนรีวิว | ผู้ขาย Amazon, dropshipper |
| วิเคราะห์ราคาคู่แข่ง | ติดตามการเปลี่ยนแปลงราคาของสินค้าท็อปในหมวดของคุณ | ทีม e-commerce, นักวิเคราะห์ราคา |
| ติดตามเทรนด์ตลาด | มองหา หมวดที่กำลังมา และการเปลี่ยนแปลงตามฤดูกาล | Product manager, นักวิจัยตลาด |
| หาลีด | สร้างรายชื่อแบรนด์ขายดีและไลน์สินค้า | ทีมขาย, ทีม outreach B2B |
| วิเคราะห์คู่แข่ง | เปรียบเทียบสินค้าของคุณกับผู้นำในหมวด | Brand manager, ทีมกลยุทธ์ |
ผลตอบแทนชัดเจนมาก: แบบสำรวจของ Salesforce จากผู้เชี่ยวชาญด้าน commerce 2,700 คน พบว่าเครื่องมือ AI ช่วยประหยัดเวลาให้คนทำงาน e-commerce ได้เฉลี่ย 6.4 ชั่วโมงต่อสัปดาห์ และผู้ขายที่ใช้ระบบติดตามราคาอัตโนมัติมีโอกาสรักษา Buy Box ได้ถึง 67% ของเวลา เทียบกับ 42% สำหรับคนที่ติดตามด้วยมือ — เท่ากับยอดขายเพิ่มขึ้น 37% จากการตอบสนองต่อราคาได้เร็วกว่า
4 วิธีดึง Amazon Best Sellers ด้วย Python: เปรียบเทียบแบบเร็ว ๆ
ก่อนจะลงมือทำทีละขั้น ตอนนี้คือภาพเปรียบเทียบแบบ side-by-side ที่ผมอยากมีตั้งแต่แรกตอนเริ่มเทสต์ ตารางนี้จะช่วยให้คุณเลือกวิธีที่เหมาะกับสถานการณ์ของคุณ:
| เกณฑ์ | requests + BS4 | Selenium | Scraping API (เช่น Scrape.do) | Thunderbit (ไม่ต้องเขียนโค้ด) |
|---|---|---|---|---|
| ความยากในการตั้งค่า | ปานกลาง | สูง (driver, browser) | ต่ำ (API key) | ต่ำมาก (Chrome extension) |
| รองรับ Lazy Loading | ไม่รองรับ | รองรับ (จำลองการ scroll) | รองรับ (HTML ที่ render แล้ว) | รองรับ (AI จัดการ rendering) |
| ทนต่อระบบกันบอท | ต่ำ (โดนบล็อก IP ง่าย) | ปานกลาง (ตรวจจับได้) | สูง (proxy หมุนอัตโนมัติ) | สูง (cloud + browser modes) |
| ภาระในการดูแล | สูง (selector พังบ่อย) | สูง (driver update + selector) | ต่ำ | ต่ำมาก (AI ปรับตาม layout ใหม่) |
| ค่าใช้จ่าย | ฟรี | ฟรี | มีค่าใช้จ่าย (คิดตาม request) | ฟรีแพ็กเกจ + แพ็กเกจเสียเงิน |
| เหมาะที่สุดสำหรับ | งานดึงข้อมูลครั้งคราว, เรียนรู้ | หน้า JS หนัก ๆ, ต้องล็อกอิน | งานระดับสเกล / production | คนไม่เขียนโค้ด, รีเสิร์ชเร็ว, เฝ้าติดตามซ้ำ ๆ |
ถ้าคุณอยากเรียนพื้นฐาน Python scraping ให้เริ่มจากวิธีที่ 1 หรือ 2 ถ้าต้องการความเสถียรระดับ production ให้เลือกวิธีที่ 3 ถ้าอยากได้ผลลัพธ์แบบคลิกครั้งเดียวโดยไม่ต้องเขียนโค้ด ให้ข้ามไปวิธีที่ 4 ได้เลย
ก่อนเริ่ม
- ระดับความยาก: มือใหม่ถึงระดับกลาง (ขึ้นอยู่กับวิธี)
- เวลาโดยประมาณ: ~15 นาทีสำหรับ Thunderbit, ~45 นาทีสำหรับวิธี Python
- สิ่งที่ต้องมี: Python 3.8+ (สำหรับวิธี 1–3), เบราว์เซอร์ Chrome, Thunderbit Chrome Extension (สำหรับวิธี 4) และ URL ของหน้า Amazon Best Sellers ที่ต้องการ
วิธีที่ 1: ดึง Amazon Best Sellers ด้วย requests + BeautifulSoup
วิธีนี้เป็นแบบเบา ๆ เหมาะกับมือใหม่ — ไม่ต้องใช้ browser automation แค่ยิง HTTP request แล้ว parse HTML เท่านั้น และมันยังสอนผมเรื่องระบบป้องกันการ scraping ของ Amazon ได้เยอะที่สุดด้วย
ขั้นตอนที่ 1: เตรียมสภาพแวดล้อม
ติดตั้งแพ็กเกจที่ต้องใช้:
pip install requests beautifulsoup4 pandas
จากนั้นตั้งค่า imports:
import requests
from bs4 import BeautifulSoup
import pandas as pd
import random
import time
ขั้นตอนที่ 2: ส่ง request พร้อม headers ที่ดูสมจริง
Amazon จะบล็อก request ที่ดูเหมือนบอท วิธีป้องกันเบื้องต้นที่สุดคือใส่ User-Agent header ให้เหมือนเบราว์เซอร์จริง ด้านล่างคือ snippet ที่มีชุด User-Agent ปัจจุบันและดูสมจริง (อ้างอิงจาก Geekflare, มีนาคม 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) # ควรได้ 200
ถ้าได้ status code 200 แปลว่าโอเค ถ้าได้ 503 หรือถูกพาไปหน้า CAPTCHA แปลว่า Amazon ตรวจจับ request ของคุณแล้ว
ขั้นตอนที่ 3: ใช้ BeautifulSoup ดึงข้อมูลสินค้า
เปิด DevTools ของเบราว์เซอร์แล้วตรวจ HTML ของหน้า Amazon (คลิกขวา → Inspect) คอนเทนเนอร์ของสินค้าใช้ ID gridItemRoot ด้านในจะมีชื่อสินค้า ราคา เรตติ้ง และ 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})
คำเตือน: class ที่ขึ้นต้นด้วย
_cDEzb_เป็น CSS module hash ที่ Amazon สร้างใหม่เป็นระยะ ๆ ส่วน IDgridItemRootและ classa-link-normalค่อนข้างเสถียรกว่า แต่ควรตรวจ selector ด้วย DevTools ทุกครั้งก่อนรัน scraper
ขั้นตอนที่ 4: ส่งออกเป็น CSV
df = pd.DataFrame(products)
df.to_csv("amazon_best_sellers.csv", index=False)
print(f"Scraped {len(products)} products")
สิ่งที่ควรคาดหวัง — และสิ่งที่มักพัง
จากการทดสอบของผม วิธีนี้ดึงได้ประมาณ 30 รายการแทนที่จะเป็น 50 รายการ นั่นไม่ใช่บั๊กของโค้ด แต่เป็นผลจาก lazy loading ของ Amazon เพราะหน้าแรกจะแสดงสินค้าเพียงประมาณ 30 รายการ ส่วนที่เหลือจะโหลดหลังจาก scroll ซึ่ง requests ทำไม่ได้เพราะไม่รัน JavaScript
ข้อจำกัดอื่น ๆ:
- โดนบล็อก IP ได้เร็วถ้าไม่หมุน proxy (ผมโดนบล็อกหลังยิงถี่ ๆ ประมาณ 15 ครั้ง)
- CSS selector พังเมื่อ Amazon ปรับ layout และพวกเขาทำแบบนี้บ่อย
- ไม่มีการจัดการ pagination แบบสำเร็จรูป
ถ้าใช้เพื่อเรียนรู้ Python scraping วิธีนี้ดีมาก แต่ถ้าใช้ในงานจริงจะค่อนข้างเปราะ
วิธีที่ 2: ดึง Amazon Best Sellers ด้วย Selenium
Selenium แก้ปัญหา lazy loading ได้ด้วยการเปิดเบราว์เซอร์จริง — ตั้งค่ายากกว่าเล็กน้อย แต่ดึงสินค้าได้ครบ 50 รายการต่อหน้า
ขั้นตอนที่ 1: ติดตั้ง Selenium
pip install selenium pandas
ข่าวดีคือ ตั้งแต่ Selenium 4.6 เป็นต้นมา คุณไม่จำเป็นต้องใช้ webdriver-manager แล้ว เพราะ Selenium Manager จะจัดการดาวน์โหลด 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)
แฟล็ก --headless=new ที่เพิ่มเข้ามาใน Chrome 109+ ใช้ pipeline การ render แบบเดียวกับ Chrome ที่มีหน้าต่างจริง ทำให้ Amazon ตรวจจับได้ยากขึ้น
ขั้นตอนที่ 2: เลื่อนหน้าจนพ้น Lazy Loading
นี่คือขั้นตอนที่ทำให้ Selenium คุ้มค่ากับความยุ่งยากในการตั้งค่า เพราะ Amazon Best Sellers โหลดสินค้าแค่ประมาณ 30 รายการในตอนแรก ส่วนที่เหลือจะมาเมื่อ scroll
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)
หลังจาก scroll แล้ว สินค้าทั้ง 50 รายการควรถูก render อยู่ใน DOM ผมพบว่า scroll ลง 5 ครั้ง โดยหน่วงครั้งละ 2 วินาที เพียงพอแล้ว แต่คุณอาจต้องปรับตามความเร็วเน็ตของตัวเอง
ขั้นตอนที่ 3: ดึงข้อมูลสินค้า
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})
การครอบด้วย try/except ในแต่ละ field สำคัญมาก เพราะบางสินค้าอาจไม่มี stock หรือข้อมูลบางช่องหายไป ถ้าไม่จัดการไว้ item เดียวที่มีปัญหาอาจทำให้ทั้งสคริปต์ล้มได้
ขั้นตอนที่ 4: จัดการ Pagination
Amazon แบ่ง Best Sellers 100 อันดับออกเป็น 2 หน้าด้วยโครงสร้าง URL ต่างกัน:
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)
# ... ดึงสินค้าเหมือนตัวอย่างด้านบน ...
all_products.extend(products)
driver.quit()
ผลลัพธ์ที่ควรคาดหวัง
จากการทดสอบของผม Selenium ดึงสินค้าได้ครบ 50 รายการต่อหน้า — ชนะ requests + BS4 แบบชัดเจน แต่ข้อเสียคือใช้เวลาประมาณ 45 วินาทีต่อหน้า (รวมเวลารอ scroll) และผมยังโดนจับได้อยู่ดีหลังจากรันถี่เกินไปโดยไม่หมุน proxy Selenium เองก็ยังถูก Amazon ตรวจจับได้ แม้จะใส่ flag ป้องกันการตรวจจับแล้วก็ตาม — ถ้าจะทำงานระดับหนักจริง คุณต้องมีมาตรการเพิ่ม (ดู Anti-Ban Playbook ด้านล่าง)
ปัญหาอื่น ๆ ที่เจอ:
- เวอร์ชัน WebDriver ยังอาจไม่ตรงกันเป็นครั้งคราว แม้ว่า Selenium Manager จะช่วยลดปัญหานี้ลงมากแล้ว
- CSS selector ต้องอัปเดตทุกครั้งที่ Amazon เปลี่ยน DOM
- ใช้หน่วยความจำเยอะ — เบราว์เซอร์หนึ่ง instance กิน RAM ประมาณ 200–400MB
วิธีที่ 3: ดึง Amazon Best Sellers ด้วย Scraping API
Scraping API คือวิธีแบบ “ปล่อยให้คนอื่นจัดการส่วนยากแทน” บริการอย่าง Scrape.do, Oxylabs และ ScrapingBee จะดูแลการหมุน proxy, การ render JavaScript และระบบกันบอทให้ คุณแค่ส่ง URL แล้วรับ HTML หรือ JSON กลับมา
วิธีการทำงาน
คุณส่ง URL เป้าหมายไปยัง API endpoint จากนั้น API จะ render หน้าเว็บด้วยเบราว์เซอร์จริงบนโครงสร้างพื้นฐานของเขา หมุน proxy จัดการ CAPTCHA และส่ง HTML ที่สะอาดกลับมา จากนั้นคุณก็ parse HTML ที่ได้ด้วย BeautifulSoup เหมือนเดิม
ขั้นตอนที่ 1: ส่ง request ผ่าน API
ตัวอย่างนี้ใช้ Scrape.do (ราคาเริ่มต้นที่ $29/เดือน สำหรับ 150,000 credits โดย 1 credit = 1 request ไม่ว่า render หรือไม่):
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")
จากจุดนี้ การ parse ก็เหมือนวิธีที่ 1 ทุกอย่าง — selector เดิม ตรรกะการดึงข้อมูลเดิม
เช็กราคากันแบบตรงไปตรงมา
นี่คือราคาคร่าว ๆ ที่แพลตฟอร์มหลักคิดต่อ Amazon 1,000 requests ตามเรทที่ดีที่สุด:
| ผู้ให้บริการ | ค่าใช้จ่ายต่อ 1,000 Requests | หมายเหตุ |
|---|---|---|
| Scrape.do | ~$0.19 | ราคาแบบ flat rate ไม่มีตัวคูณเครดิต |
| Oxylabs | ~$1.80 | ตัวคูณ 5x สำหรับ JavaScript rendering |
| ScrapingBee | ~$4.90 | ตัวคูณ 5–25x สำหรับฟีเจอร์พรีเมียม |
| Bright Data | ~$5.00+ | ข้อมูลครบที่สุด (686 fields/สินค้า) แต่ช้าที่สุด (~66 วินาที/request) |
ข้อดีและข้อเสีย
ข้อดี: เชื่อถือได้สูง (success rate ราว 99% บน Amazon สำหรับผู้ให้บริการชั้นนำ), ไม่ต้องดูแล driver, จัดการระบบกันบอทให้อัตโนมัติ, ขยายสเกลได้ดี
ข้อเสีย: ต้องจ่ายตามจำนวน request (ถ้าใช้เยอะค่าใช้จ่ายสะสมเร็ว), คุณยังต้องเขียนโค้ด parse เอง, และยังเสี่ยงกับการเปลี่ยน CSS selector อยู่ดี สำหรับ 100,000 pages/เดือน ต้นทุนรวมต่างกันมหาศาล: การสร้างระบบเองมีต้นทุนราว $1.98M ใน 3 ปี เทียบกับ $332K เมื่อใช้ API provider — ประหยัดได้ 71%
จุดคุ้มทุนมักอยู่ที่ประมาณ 500K–1M requests/เดือน ต่ำกว่านั้น การประหยัดเวลาโดยใช้ API มักคุ้มกว่าค่าใช้จ่ายมาก
วิธีที่ 4: ดึง Amazon Best Sellers ด้วย Thunderbit (ไม่ต้องใช้ Python)
ขอพูดตรง ๆ ก่อนว่า ผมทำงานที่ Thunderbit ดังนั้นควรอ่านส่วนนี้โดยคำนึงถึงบริบทนั้นด้วย แต่ผมก็ทดสอบทั้ง 4 วิธีต่อเนื่องกันจริง ๆ และความต่างเรื่องเวลาไปจนถึงได้ข้อมูลนั้นชัดเจนมาก
Thunderbit คือ AI web scraper ที่ทำงานเป็น Chrome extension แนวคิดหลักคือ แทนที่จะต้องเขียน CSS selector หรือโค้ด Python ให้ AI อ่านหน้าเว็บแล้วเดาออกว่าควรดึงข้อมูลอะไร สำหรับ Amazon Best Sellers โดยเฉพาะ Thunderbit มีเทมเพลตสำเร็จรูปที่คลิกครั้งเดียวแล้วใช้งานได้เลย
ขั้นตอนที่ 1: ติดตั้ง Thunderbit Chrome Extension
ไปที่ Chrome Web Store แล้วกด "Add to Chrome" สมัครบัญชีฟรีได้เลย — แพ็กเกจฟรีมีเครดิตพอให้ทดลองใช้งาน
ขั้นตอนที่ 2: เปิดหน้า Amazon Best Sellers
เปิดหน้า Amazon Best Sellers ของหมวดใดก็ได้บน Chrome เช่น:
https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/
ขั้นตอนที่ 3: กด "One Click Extract"
เปิด sidebar ของ Thunderbit แล้วคลิก "One Click Extract" AI จะวิเคราะห์โครงสร้างหน้าเว็บและกำหนดคอลัมน์ให้ เช่น Product Name, Price, Rating, Image URL, Vendor, Product URL และ Rank จากการทดสอบของผม มันระบุฟิลด์ที่เกี่ยวข้องทั้งหมดได้ถูกต้องภายในประมาณ 3 วินาที

คุณสามารถเปลี่ยนชื่อคอลัมน์ ลบคอลัมน์ หรือเพิ่มคอลัมน์ใหม่ได้ด้วย และยังใส่ AI prompt แบบกำหนดเองต่อฟิลด์ได้ เช่น "categorize as Electronics/Apparel/Home" เพื่อเพิ่มแท็กหมวดหมู่ให้สินค้าทุกรายการ
ขั้นตอนที่ 4: กด "Scrape"
กดปุ่ม "Scrape" แล้ว Thunderbit จะเติมข้อมูลแบบมีโครงสร้างลงในตาราง In cloud mode มันประมวลผลได้สูงสุด 50 หน้าแบบขนาน พร้อมจัดการ lazy loading และ pagination ให้อัตโนมัติ
ขั้นตอนที่ 5: ส่งออกฟรี
กด "Export" แล้วเลือกปลายทาง เช่น Excel, Google Sheets, Airtable หรือ Notion การ export ฟรีทุกแพ็กเกจ ไม่มีค่าใช้จ่ายแอบแฝง

ทั้งกระบวนการใช้เวลาประมาณ 90 วินาทีตั้งแต่เปิดหน้าเว็บจนได้สเปรดชีตครบชุด ถ้าเทียบกัน Method 1 ใช้เวลาประมาณ 20 นาที (รวมเวลาคอยแก้ปัญหา lazy loading), Method 2 ใช้ประมาณ 35 นาที (รวมการตั้งค่า Selenium), และ Method 3 ใช้ประมาณ 15 นาที (รวมการสมัครใช้งาน API)
ทำไม Thunderbit ถึงจัดการ Amazon ได้ดี
เพราะ AI จะอ่านหน้าเว็บใหม่ทุกครั้ง จึงปรับตัวกับการเปลี่ยน layout ได้อัตโนมัติ — ไม่ต้องคอยดูแล CSS selector ปัญหานี้ตรงกับสิ่งที่คนในฟอรั่ม scraping บ่นกันบ่อยที่สุด: "web scraper พื้นฐานไม่พอหรอก ต้องเพิ่มตัวดักเยอะมากเพื่อรับมือ element ที่เปลี่ยน" พอ Amazon เปลี่ยน DOM (ซึ่งเกิดขึ้นบ่อย) คุณไม่ต้องแก้อะไรเลย
โหมด cloud scraping จะจัดการการหมุน proxy, rendering และระบบกันบอทให้แบบไม่ต้องตั้งค่า สำหรับคนที่อยากได้โซลูชันแบบ "ใช้งานได้เลย" สิ่งนี้ช่วยตัดปัญหา anti-ban ไปทั้งหมด
ไม่ต้องคอยดูแล Selector อีกต่อไป เวลา Amazon เปลี่ยน markup, BeautifulSoup selector ของคุณมักพัง แต่ AI ของ Thunderbit จะอ่านหน้าเว็บใหม่ทุกครั้งและหาฟิลด์ให้อีกครั้งโดยอัตโนมัติ Get Started Free
Anti-Ban Playbook: วิธีหลีกเลี่ยงการโดน Amazon บล็อก
ระบบตรวจจับบอทของ Amazon ค่อนข้างดุ ผมเองโดนบล็อก IP ชั่วคราวระหว่างทดสอบ และผู้ใช้ในฟอรั่มก็เจอแบบเดียวกัน: "errors everywhere, amazon even started redirecting me to the homepage." ถ้าคุณจะใช้ทาง Python (วิธี 1–3) ส่วนนี้สำคัญมาก
ต่อไปนี้คือกลยุทธ์แบบเป็นชั้น เรียงจากพื้นฐานไปขั้นสูง:
1. สลับ User-Agent
การส่ง User-Agent เดิมซ้ำ ๆ เป็นสัญญาณน่าสงสัย ใช้ชุด 5+ string จากตัวอย่างโค้ดใน Method 1 แล้วสุ่มเลือกทุกครั้งที่ส่ง request:
headers = {"User-Agent": random.choice(USER_AGENTS)}
2. ใส่เวลาหน่วงแบบสุ่มระหว่าง request
การหน่วงแบบตายตัวตรวจจับได้ง่ายเพราะเป็นแพตเทิร์น ควรสุ่มจะปลอดภัยกว่า:
time.sleep(random.uniform(2, 5))
จากที่ทดสอบ 2–5 วินาทีระหว่าง request ช่วยให้รอดสายตาได้สำหรับงานชุดเล็ก ๆ (ต่ำกว่า 50 requests) ถ้าเป็นงานใหญ่กว่านั้นให้ขยับเป็น 3–7 วินาที
3. ใช้ Proxy Rotation
อันนี้คือหัวใจหลัก ผลทดสอบของ Proxyway ชี้ว่า residential proxies มี success rate เฉลี่ยบน Amazon ราว ~94% เทียบกับ ~59% สำหรับ datacenter proxies — ต่างกัน 35 จุดเปอร์เซ็นต์ ระบบตรวจจับของ Amazon ใช้ทั้ง TLS fingerprinting, behavioral analysis และการจำกัด rate ต่อ IP ดังนั้น IP จาก datacenter ทั่วไปมักโดนจับได้ในไม่กี่วินาที
Residential proxy แพงกว่า ($2–$12 ต่อ GB แล้วแต่ผู้ให้บริการ) แต่เสถียรกว่ามาก ตัวอย่างโค้ด:
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. ทำให้ Browser Fingerprint แข็งแรงขึ้น (Selenium)
options.add_argument('--disable-blink-features=AutomationControlled')
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
# หลังจาก init driver แล้ว เอา flag navigator.webdriver ออก
driver.execute_cdp_command('Page.addScriptToEvaluateOnNewDocument', {
'source': "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"
})
5. จัดการ session และ cookies
การเก็บ cookies ไว้ข้าม request จะทำให้ scraper ดูเหมือน session ของผู้ใช้จริงมากขึ้น:
session = requests.Session()
# เข้า homepage ก่อนเพื่อรับ cookies ที่ดูสมจริง
session.get("https://www.amazon.com", headers=headers)
time.sleep(2)
# แล้วค่อยดึงหน้าที่ต้องการ
response = session.get(target_url, headers=headers)
6. เมื่อไม่อยากปวดหัวกับเรื่องพวกนี้
ถ้าคุณไม่อยากจัดการสิ่งเหล่านี้เลย Thunderbit cloud scraping จะจัดการ proxy rotation, rendering และระบบกันบอทให้แบบโปร่งใส Scraping API ก็ช่วยดูแลเรื่องเหล่านี้ได้เกือบทั้งหมดโดยอัตโนมัติ จากประสบการณ์ของผม เวลาที่เสียไปกับการแก้ anti-ban มักมากกว่าเวลาที่ใช้เขียนโค้ด scrape จริง ๆ ดังนั้นแนวทางแบบ "ใช้งานได้เลย" จึงคุ้มค่าจริง
การดึงข้อมูลเสริมจากหน้ารายละเอียดสินค้า: เพิ่มความลึกของข้อมูล
หน้ารายการ Best Sellers มีแค่ข้อมูลพื้นฐาน — ชื่อสินค้า ราคา เรตติ้ง และอันดับ แต่ข้อมูลที่มีค่าจริงสำหรับงานวิจัย FBA อยู่บนหน้ารายละเอียดสินค้าแต่ละรายการ ถ้าดึงแค่หน้า listing คุณจะพลาดข้อมูลเหล่านี้:
| ฟิลด์ | หน้ารายการสินค้า | หน้ารายละเอียดสินค้า |
|---|---|---|
| ชื่อสินค้า | ✅ | ✅ |
| ราคา | ✅ | ✅ |
| เรตติ้ง | ✅ | ✅ |
| อันดับ BSR | ✅ | ✅ (พร้อมอันดับย่อยในหมวดย่อย) |
| แบรนด์ | ❌ | ✅ |
| ASIN | ❌ | ✅ |
| วันที่วางขายครั้งแรก | ❌ | ✅ |
| ขนาด/น้ำหนัก | ❌ | ✅ |
| จำนวนผู้ขาย | ❌ | ✅ |
| คุณสมบัติแบบ bullet | ❌ | ✅ |
| เจ้าของ Buy Box | ❌ | ✅ |
ฟิลด์ "Date First Available" มีประโยชน์มาก เพราะบอกได้ว่าสินค้าถูกวางขายมานานแค่ไหน ซึ่งเป็นสัญญาณสำคัญในการวิเคราะห์คู่แข่ง และการรู้จำนวนผู้ขายกับเจ้าของ Buy Box จะช่วยประเมินได้ว่าน่านเข้าสู่ตลาดนั้นหรือไม่ (ถ้า Amazon เองถือ Buy Box มากกว่า 30% การแข่งขันจะยากมาก)
แนวทางด้วย Python: วนลูปผ่าน URL ของสินค้า
หลังจากเก็บ URL ของสินค้าในหน้ารายการแล้ว ให้วนลูปทีละรายการพร้อมหน่วงเวลา:
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")
# ดึงแบรนด์
brand_tag = detail_soup.find("a", id="bylineInfo")
product["Brand"] = brand_tag.get_text(strip=True) if brand_tag else "N/A"
# ดึง ASIN จาก source ของหน้า หรือจาก URL
# ดึง Date First Available จากตารางรายละเอียดสินค้า
# ... ฟิลด์อื่น ๆ เพิ่มเติม ...
ขอเตือนไว้ก่อนว่า การยิงหน้า product แบบทีละ 100 หน้าเพิ่มความเสี่ยงโดนบล็อกอย่างมาก ควรเผื่อ proxy rotation และหน่วงเวลานานขึ้น
แนวทางด้วย Thunderbit: ดึงข้อมูลจาก Subpage แบบคลิกเดียว
หลังจากดึงข้อมูลจากหน้ารายการลงตารางแล้ว ให้คลิก "Scrape Subpages" ใน Thunderbit AI จะเข้าไปยัง URL ของสินค้าแต่ละรายการและเติมคอลัมน์เพิ่มให้อัตโนมัติ เช่น brand, ASIN, specifications, features โดยไม่ต้องเขียนโค้ด ไม่ต้องตั้ง selector และไม่ต้องดูแลอะไรต่อ ฟีเจอร์นี้เหมาะมากสำหรับทีม e-commerce ที่ต้องการภาพรวมครบถ้วนเพื่อใช้ตัดสินใจ sourcing แต่ไม่อยากสร้างและดูแล parser ของหน้ารายละเอียดสินค้าเอง
การทำให้การดึงข้อมูลเป็นงานอัตโนมัติ: เฝ้าติดตาม Best Sellers ตามเวลา
การ scrape แค่ครั้งเดียวก็มีประโยชน์ แต่การเฝ้าดูต่อเนื่องต่างหากคือจุดที่สร้างความได้เปรียบจริง การติดตามว่าสินค้าไหนขึ้นหรือลง การมองเทรนด์ตั้งแต่เนิ่น ๆ และการติดตามการเปลี่ยนราคาหลายสัปดาห์หรือหลายเดือน — นี่คือสิ่งที่แยกระหว่างการรีเสิร์ชทั่วไปกับการตัดสินใจด้วยข้อมูล
แนวทางด้วย Python: ตั้งเวลาผ่าน Cron
บน Linux/Mac คุณสามารถตั้งเวลารันสคริปต์ Python ด้วย cron ได้ นี่คือตัวอย่าง crontab สำหรับ scrape ทุกวันตอน 8 โมงเช้า:
0 8 * * * /usr/bin/python3 /home/user/amazon_scraper.py >> /home/user/logs/scrape.log 2>&1
ถ้าต้องการรันทุกวันจันทร์ 9 โมงเช้า:
0 9 * * 1 /usr/bin/python3 /home/user/amazon_scraper.py >> /home/user/logs/scrape.log 2>&1
บน Windows ให้ใช้ Task Scheduler เพื่อทำแบบเดียวกัน ถ้าต้องการให้รันได้ตลอดโดยไม่ต้องเปิดโน้ตบุ๊กทิ้งไว้ คุณอาจ deploy ไปที่ VPS หรือ AWS Lambda แต่ก็จะเพิ่มความซับซ้อนด้าน infrastructure เข้าไป
อย่าลืมเพิ่ม logging และการแจ้งเตือนเมื่อเกิด error เพราะไม่มีอะไรแย่ไปกว่าการเพิ่งรู้ว่า scraper พังเงียบ ๆ ไปตั้งสองสัปดาห์แล้ว
แนวทางด้วย Thunderbit: Scheduled Scraper แบบพูดภาษาคน
Scheduled Scraper ของ Thunderbit ให้คุณบอกช่วงเวลาเป็นภาษาธรรมชาติได้เลย — พิมพ์ว่า "every Monday at 9am" หรือ "every day at 8am" แล้ว AI จะตีความตารางให้ งาน scrape จะรันบน cloud ของ Thunderbit เอง (ไม่ต้องเปิดเบราว์เซอร์หรือคอมพิวเตอร์ทิ้งไว้) และ export ข้อมูลไปยัง Google Sheets หรือ Airtable แบบอัตโนมัติ เหมาะมากสำหรับทีม operation ที่อยากเห็นข้อมูลอัปเดตต่อเนื่องโดยไม่ต้องรับภาระ DevOps
ข้อควรพิจารณาด้านกฎหมายและจริยธรรมเมื่อ scrape Amazon
ผมไม่ใช่ทนาย และนี่ไม่ใช่คำแนะนำทางกฎหมาย แต่การมองข้ามประเด็นกฎหมายในบทความสอน scraping คงไม่เหมาะ เพราะผู้ใช้ในฟอรั่มมักยกข้อกังวลเรื่อง ToS ขึ้นมาจริง ๆ
robots.txt ของ Amazon: ณ ปี 2026 robots.txt ของ Amazon มี path ที่ Disallow มากกว่า 80 รายการ แต่ /gp/bestsellers/ ไม่ได้ถูกบล็อกโดยตรงสำหรับ user agent ทั่วไป อย่างไรก็ตาม user agent ที่เกี่ยวกับ AI มากกว่า 35 ตัว เช่น ClaudeBot, GPTBot, Scrapy ฯลฯ จะถูกสั่ง Disallow: / แบบครอบทั้งไซต์ การไม่ได้ถูก disallow โดยเฉพาะไม่ได้หมายความว่า Amazon สนับสนุนให้ scrape
ข้อกำหนดการใช้งานของ Amazon: Conditions of Use ของ Amazon (อัปเดตเมื่อพฤษภาคม 2025) ระบุชัดว่าห้าม "ใช้กระบวนการอัตโนมัติหรือเทคโนโลยีใด ๆ เพื่อเข้าถึง เก็บ คัดลอก หรือเฝ้าดูส่วนใด ๆ ของเว็บไซต์ Amazon" โดยไม่ได้รับอนุญาตเป็นลายลักษณ์อักษร เรื่องนี้ไม่ใช่แค่ทฤษฎี — Amazon ฟ้อง Perplexity AI ในเดือนพฤศจิกายน 2025 เรื่องการเข้าถึงแบบอัตโนมัติที่ไม่ได้รับอนุญาต และชนะคำสั่งคุ้มครองชั่วคราว
บรรทัดฐาน hiQ v. LinkedIn: ในคดี hiQ Labs v. LinkedIn (ศาลอุทธรณ์ภาคเก้า, 2022) ศาลวินิจฉัยว่าการ scrape ข้อมูลสาธารณะอาจไม่เข้าข่ายละเมิด Computer Fraud and Abuse Act แต่สุดท้าย hiQ ก็ยอมความและตกลงหยุด scraping — การชนะในประเด็น CFAA ไม่ได้ปกป้องคุณจากข้อกล่าวหาผิดสัญญา
แนวทางปฏิบัติที่ควรทำ:
- ดึงเฉพาะข้อมูลที่เปิดเผยต่อสาธารณะ (ราคา, BSR, ชื่อสินค้า — ไม่ใช่ข้อมูลส่วนบุคคล)
- เคารพ rate limit และอย่าโหลดเซิร์ฟเวอร์หนักเกินไป
- ใช้ข้อมูลเพื่อ competitive intelligence ที่ถูกต้องตามวัตถุประสงค์
- ปรึกษาทีมกฎหมายของคุณก่อน scrape ในระดับใหญ่
- ระวังว่า 20+ รัฐในสหรัฐฯ มี laws ด้าน privacy ที่ครอบคลุมแล้ว
Cloud scraping ของ Thunderbit ใช้รูปแบบ request ที่คล้ายเบราว์เซอร์ทั่วไป แต่คุณควรตรวจสอบให้แน่ใจเรื่อง compliance กับที่ปรึกษากฎหมายของคุณเองเสมอ
งานนี้ไม่ต้องใช้ Python ก็ได้ ถ้าเป้าหมายคือได้สเปรดชีต ไม่ใช่ pipeline แค่คลิกครั้งเดียวก็ไปถึง Excel, Google Sheets, Airtable หรือ Notion ได้เลย Get Started Free
ควรใช้วิธีไหน? คู่มือเลือกแบบเร็ว
สรุปสั้น ๆ:
- "ผมกำลังเรียน Python และอยากทำเป็นโปรเจกต์ช่วงสุดสัปดาห์" → วิธีที่ 1 (requests + BeautifulSoup) คุณจะได้เรียนรู้เรื่อง HTTP requests, HTML parsing และระบบกันบอทของ Amazon เยอะมาก
- "ต้องดึงหน้าเว็บที่หนักด้วย JavaScript หรือ session ที่ล็อกอิน" → วิธีที่ 2 (Selenium) หนักกว่า แต่รับมือกับ dynamic content ได้
- "ผมรันงาน scrape ระดับ production และต้องการสเกล" → วิธีที่ 3 (Scraping API) ปล่อยให้คนอื่นดูแล proxy และ rendering ให้ ต้นทุนรวมระยะยาว จะคุ้มกว่าถ้าต่ำกว่า 500K requests/เดือน
- "ผมไม่ใช่นักพัฒนา และอยากได้ข้อมูลภายใน 2 นาที" → วิธีที่ 4 (Thunderbit) ไม่ต้องเขียนโค้ด ไม่ต้องดู selector ไม่ต้องดูแลอะไร
- "ผมต้องการ monitor ต่อเนื่องโดยไม่ต้องจัดการ server" → Thunderbit Scheduled Scraper ตั้งครั้งเดียวแล้วปล่อยไว้ได้เลย
ลอง Thunderbit สำหรับ Amazon Best Sellers Get Started Free
สรุปและประเด็นสำคัญ
หลังจากลองทั้งสุดสัปดาห์ นี่คือสิ่งที่ชัดเจนที่สุด:
requests + BeautifulSoup เหมาะมากสำหรับการเรียนรู้ แต่ข้อจำกัดเรื่อง lazy loading (ดึงได้แค่ประมาณ 30 จาก 50 รายการ) และ CSS selector ที่พังง่าย ทำให้ไม่ค่อยเหมาะกับงานจริง
Selenium แก้ปัญหา lazy loading และดึงได้ครบ 50 รายการต่อหน้า แต่ช้า กินหน่วยความจำ และยังโดนระบบกันบอทของ Amazon ตรวจจับได้
Scraping API ให้ความเสถียรดีที่สุดสำหรับงาน production — success rate ราว 99% บน Amazon — แต่ค่าใช้จ่ายสะสมได้เร็ว และคุณยังต้องเขียนโค้ด parse เอง
Thunderbit ให้เวลาไปถึงข้อมูลเร็วที่สุดแบบทิ้งห่างชัดเจน AI จัดการ layout changes, lazy loading, pagination และระบบกันบอทให้โดยไม่ต้องตั้งค่าใด ๆ สำหรับคนที่ไม่ใช่สายเทคนิค หรือทีมที่ต้องการข้อมูลซ้ำ ๆ โดยไม่อยากรับภาระ DevOps นี่คือทางเลือกที่ใช้งานได้จริงที่สุด
บทเรียนใหญ่ที่สุดคืออะไร? ระบบกันบอทของ Amazon และการเปลี่ยน layout บ่อย ๆ ทำให้โซลูชันที่ไม่ต้องบำรุงรักษาช่วยประหยัดเวลามากที่สุดในระยะยาว ทุกชั่วโมงที่คุณเสียไปกับ selector ที่พังและ proxy rotation คือชั่วโมงที่ไม่ได้เอาไปวิเคราะห์ข้อมูลจริง
ถ้าอยากลองแนวทางไม่ต้องเขียนโค้ด แพ็กเกจฟรีของ Thunderbit มีเครดิตพอให้คุณ scrape หมวด Best Sellers หลายหมวดแล้วดูผลลัพธ์เองได้เลย ถ้าชอบทาง Python โค้ดตัวอย่างด้านบนก็พร้อมให้เริ่มต้นได้ทันที ไม่ว่าจะทางไหน สุดท้ายคุณก็จะได้ข้อมูล Amazon Best Sellers อยู่ในสเปรดชีต แทนที่จะจ้องหน้าแท็บเบราว์เซอร์อยู่
ถ้าอยากอ่านเพิ่มเติมเกี่ยวกับแนวทาง web scraping ลองดูคู่มือของเราเรื่อง การ scrape สินค้าและรีวิว Amazon, การดึงข้อมูลจากเว็บไซต์ลง Excel และ AI web scraper ที่ดีที่สุด หรือจะดูวิดีโอสอนทีละขั้นตอนได้ที่ Thunderbit YouTube channel
อ่านเพิ่มเติม


