ฉันทดสอบ 4 วิธีในการดึงข้อมูล Amazon Best Sellers ด้วย Python และ...

อัปเดตล่าสุดเมื่อ April 17, 2026

สุดสัปดาห์ที่ผ่านมา ผม/ฉันหมดกาแฟไปทั้งหม้อกับการลองดึงข้อมูลหน้า Amazon Best Sellers อยู่ 4 วิธี สองวิธีเวิร์กมาก หนึ่งวิธีเกือบทำให้ IP ของผม/ฉันโดนบล็อก และอีกวิธีใช้เวลาแค่คลิกเดียว นี่คือทุกอย่างที่ผม/ฉันได้เรียนรู้

Amazon คือมาร์เก็ตเพลสขนาดยักษ์ — , และมีระบบ Best Sellers Rank (BSR) ที่อัปเดตทุกชั่วโมง ถ้าคุณทำรีเสิร์ชสินค้าสำหรับ FBA, วิเคราะห์ราคาคู่แข่ง หรืออยากจับเทรนด์ให้ทันก่อนคนอื่น ข้อมูล Best Sellers นี่แหละคือขุมทอง

แต่พอจะดึงข้อมูลนั้นออกจาก Amazon แล้วเอาเข้าไปในสเปรดชีตล่ะ? ตรงนี้แหละที่เรื่องเริ่มสนุก ผม/ฉันทดสอบทั้ง requests + BeautifulSoup, Selenium, scraping API และ (AI web scraper แบบ no-code ของเราเอง) เพื่อดูว่าวิธีไหนใช้ได้จริง และวิธีไหนจะพาคุณไปเจอหน้า CAPTCHA แทน

Amazon Best Sellers คืออะไร และทำไมถึงควรสนใจ?

Amazon Best Sellers Rank (BSR) คือกระดานจัดอันดับแบบเรียลไทม์ของ Amazon ที่เรียงสินค้าตามยอดขายภายในแต่ละหมวดหมู่ ให้นึกเหมือนการแข่งความนิยมที่อัปเดตทุกชั่วโมง โดยอิงจากยอดขายทั้งล่าสุดและในอดีต Amazon อธิบายไว้แบบนี้:

"การคำนวณ Amazon Best Sellers อ้างอิงจากยอดขายบน Amazon และอัปเดตทุกชั่วโมงเพื่อสะท้อนยอดขายล่าสุดและในอดีตของสินค้าทุกรายการที่ขายบน Amazon" —

หน้า Best Sellers จะแสดงสินค้ายอดนิยม 100 อันดับแรกต่อหมวด โดยแบ่งเป็น 2 หน้า หน้าแรก 50 อันดับ และหน้าที่สองอีก 50 อันดับ Amazon ยืนยันแล้วว่า จำนวนการเข้าชมหน้าเว็บและรีวิวลูกค้าไม่ส่งผลต่อ BSR — อันดับนี้วัดจากยอดขายล้วน ๆ

แล้วใครต้องใช้ข้อมูลนี้? ผู้ขายอีคอมเมิร์ซที่มองหาสินค้าเพื่อทำ FBA, ทีมขายที่ทำ competitive intelligence, ทีมปฏิบัติการที่ติดตามเทรนด์ราคา และนักวิจัยตลาดที่จับการเติบโตของหมวดสินค้า จากประสบการณ์ของผม/ฉัน ใครก็ตามที่ขายบน Amazon หรือแข่งขันกับ Amazon สุดท้ายก็ต้องมีข้อมูลนี้อยู่ในสเปรดชีตแน่ ๆ

ทำไมถึงควรดึง Amazon Best Sellers ด้วย Python?

การรีเสิร์ชสินค้าด้วยมือกินเวลามาก พบว่าพนักงานใช้เวลาถึง 9.3 ชั่วโมงต่อสัปดาห์ไปกับการค้นหาและรวบรวมข้อมูล สำหรับทีมอีคอมเมิร์ซ นั่นแปลว่าเสียเวลาไปกับการกดดูหน้า Amazon คัดลอกชื่อสินค้าและราคา แล้วเอาไปวางในสเปรดชีต — จากนั้นก็ต้องทำซ้ำอีกรอบในสัปดาห์ถัดไป

ลองดูตัวอย่าง use case ที่ทำให้การดึง Best Sellers คุ้มค่ากันหน่อย:

กรณีใช้งานสิ่งที่ได้ใครได้ประโยชน์
รีเสิร์ชสินค้า FBAระบุสินค้าที่มีความต้องการสูงแต่คู่แข่งไม่มาก จาก BSR และจำนวนรีวิวผู้ขาย Amazon, dropshipper
วิเคราะห์ราคาคู่แข่งติดตามการเปลี่ยนแปลงราคาของสินค้าท็อปในหมวดของคุณทีมอีคอมเมิร์ซ, นักวิเคราะห์ราคา
ติดตามเทรนด์ตลาดมองเห็นหมวดสินค้าที่กำลังมาแรงและการเปลี่ยนแปลงตามฤดูกาลผู้จัดการสินค้า, นักวิจัยตลาด
สร้างลีดรวบรวมรายชื่อแบรนด์ที่ขายดีและไลน์สินค้าของแบรนด์เหล่านั้นทีมขาย, งาน outreach B2B
วิเคราะห์คู่แข่งเปรียบเทียบสินค้าเรากับผู้นำในหมวดผู้จัดการแบรนด์, ทีมกลยุทธ์

ผลตอบแทนคุ้มจริง: ผลสำรวจจาก กับผู้เชี่ยวชาญด้านคอมเมิร์ซ 2,700 คน พบว่าเครื่องมือ AI ช่วยประหยัดเวลาให้คนทำงานอีคอมเมิร์ซได้เฉลี่ย และผู้ขายที่ใช้ระบบติดตามราคาอัตโนมัติจะชนะ Buy Box ได้ เทียบกับ 42% ของคนที่ติดตามแบบ manual — เท่ากับยอดขายเพิ่มขึ้น 37% จากการตอบสนองต่อการเปลี่ยนราคาได้เร็วกว่า

4 วิธีดึง Amazon Best Sellers ด้วย Python: เปรียบเทียบแบบเร็ว ๆ

ก่อนจะลงรายละเอียดทีละขั้น ตอนนี้ขอเทียบให้เห็นภาพก่อน แบบที่ผม/ฉันอยากมีตั้งแต่ตอนเริ่มทดสอบ ตารางนี้จะช่วยให้เลือกวิธีที่เหมาะกับสถานการณ์ของคุณได้ง่ายขึ้น:

เกณฑ์requests + BS4SeleniumScraping API (เช่น Scrape.do)Thunderbit (No-Code)
ความยากในการตั้งค่าปานกลางสูง (driver, browser)ต่ำ (API key)ต่ำมาก (Chrome extension)
รองรับ Lazy Loadingไม่รองรับรองรับ (จำลองการเลื่อนหน้า)รองรับ (HTML ที่เรนเดอร์แล้ว)รองรับ (AI จัดการการเรนเดอร์)
ต้านบอทได้ดีแค่ไหนต่ำ (เสี่ยง IP ถูกบล็อก)ปานกลาง (ตรวจจับได้)สูง (proxy หมุนอัตโนมัติ)สูง (cloud + browser modes)
ภาระดูแลรักษาสูง (selector พังบ่อย)สูง (อัปเดต driver + selector)ต่ำต่ำมาก (AI ปรับตามการเปลี่ยนแปลงของหน้า)
ค่าใช้จ่ายฟรีฟรีมีค่าใช้จ่าย (ตามจำนวน request)มี free tier + แพ็กเกจเสียเงิน
เหมาะที่สุดสำหรับงานดึงครั้งเดียว, การเรียนรู้หน้า JS หนัก, ต้องล็อกอินงานสเกลใหญ่ / productionคนไม่เขียนโค้ด, รีเสิร์ชเร็ว, เฝ้าระวังเป็นประจำ

ถ้าอยากเรียนพื้นฐานการดึงข้อมูลด้วย Python เริ่มที่วิธี 1 หรือ 2 ได้เลย ถ้าต้องการความเสถียรระดับ production ให้เลือกวิธี 3 ถ้าอยากได้ผลลัพธ์ในสองคลิกแบบไม่ต้องเขียนโค้ด ก็ข้ามไปวิธี 4 ได้ทันที

ก่อนเริ่ม

  • ระดับความยาก: มือใหม่ถึงระดับกลาง (ขึ้นอยู่กับวิธี)
  • เวลาที่ต้องใช้: ~15 นาทีสำหรับ Thunderbit, ~45 นาทีสำหรับวิธี Python
  • สิ่งที่ต้องมี: Python 3.8+ (สำหรับวิธี 1–3), Chrome browser, (สำหรับวิธี 4) และ URL ของหมวด Amazon Best Sellers ที่ต้องการ

วิธีที่ 1: ดึง Amazon Best Sellers ด้วย requests + BeautifulSoup

นี่คือวิธีเบา ๆ ที่เหมาะกับมือใหม่ — ไม่ต้องใช้ browser automation แค่ส่ง HTTP request แล้ว parse HTML เท่านั้น แต่ก็เป็นวิธีที่ทำให้ผม/ฉันเข้าใจระบบป้องกันการ scraping ของ Amazon ได้มากที่สุดด้วย

ขั้นตอนที่ 1: เตรียมสภาพแวดล้อม

ติดตั้งแพ็กเกจที่ต้องใช้:

1pip install requests beautifulsoup4 pandas

จากนั้นตั้งค่า imports:

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

ขั้นตอนที่ 2: ส่ง request ด้วย headers ที่ดูสมจริง

Amazon บล็อก request ที่ดูเหมือนบอท การป้องกันพื้นฐานที่สุดคือใช้ User-Agent header ที่เลียนแบบ browser จริง นี่คือตัวอย่างชุด User-Agent ที่ค่อนข้างใหม่และสมจริง (อ้างอิงจาก , มีนาคม 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)  # ควรเป็น 200

ถ้าได้สถานะ 200 แปลว่าผ่าน แต่ถ้าได้ 503 หรือถูกส่งไปหน้า CAPTCHA แสดงว่า Amazon จับได้แล้ว

ขั้นตอนที่ 3: Parse ข้อมูลสินค้าด้วย BeautifulSoup

เปิด DevTools ใน browser ของคุณเพื่อดู HTML ของหน้า Amazon (คลิกขวา → Inspect) คอนเทนเนอร์ของสินค้าใช้ ID gridItemRoot ภายในแต่ละคอนเทนเนอร์จะมีชื่อสินค้า ราคา คะแนน และ 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})

คำเตือน: ชื่อ class ที่ขึ้นต้นด้วย _cDEzb_ เป็น CSS module hash ที่ Amazon สร้างใหม่เป็นระยะ ๆ ส่วน ID gridItemRoot และ class a-link-normal ค่อนข้างนิ่งกว่า แต่ควรตรวจสอบ selector ใน DevTools ทุกครั้งก่อนรัน scraper

ขั้นตอนที่ 4: Export เป็น CSV

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

สิ่งที่คาดหวังได้ — และปัญหาที่มักเกิด

จากการทดสอบของผม/ฉัน วิธีนี้ดึงสินค้าได้ประมาณ 30 รายการแทนที่จะเป็น 50 ไม่ใช่บั๊กของโค้ดนะ แต่มันคือ lazy loading ของ Amazon เอง เพราะตอนโหลดหน้าแรกจะเรนเดอร์แค่ราว 30 รายการ ที่เหลือต้องเลื่อนหน้าจึงจะโหลดเพิ่ม ซึ่ง requests ทำไม่ได้เพราะมันไม่รัน JavaScript

ข้อจำกัดอื่น ๆ:

  • IP ถูกบล็อกได้เร็วมากถ้าไม่หมุน proxy (ผม/ฉันโดนบล็อกหลังยิงประมาณ 15 request แบบรัว ๆ)
  • CSS selector พังได้ทุกครั้งที่ Amazon เปลี่ยน layout ของหน้า ซึ่งเกิดขึ้นบ่อย
  • ไม่มีระบบจัดการ pagination ให้ในตัว

ถ้าคุณอยากเรียนการ scraping ด้วย Python วิธีนี้เหมาะมาก แต่ถ้าจะใช้ในงานจริง มันค่อนข้างเปราะบาง

วิธีที่ 2: ดึง Amazon Best Sellers ด้วย Selenium

Selenium แก้ปัญหา lazy loading ได้ด้วยการเปิด browser จริง — ตั้งค่ายุ่งกว่า แต่ดึงสินค้าได้ครบ 50 รายการต่อหน้า

ขั้นตอนที่ 1: ติดตั้ง Selenium

1pip install selenium pandas

ข่าวดีคือ ตั้งแต่ Selenium 4.6 เป็นต้นไป คุณไม่ต้องใช้ webdriver-manager แล้ว เพราะ Selenium Manager จะจัดการดาวน์โหลด 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)

แฟลก --headless=new (เริ่มใช้ใน Chrome 109+) ใช้ rendering pipeline เดียวกับ Chrome แบบเปิดหน้าจอ ทำให้ Amazon ตรวจจับได้ยากขึ้น

ขั้นตอนที่ 2: เลื่อนหน้าผ่าน Lazy Loading

นี่คือขั้นตอนที่ทำให้ Selenium คุ้มค่ากับความยุ่งยากตอนตั้งค่า Amazon Best Sellers จะโหลดแค่ประมาณ 30 รายการในตอนแรก — ที่เหลือต้องเลื่อนหน้าถึงจะโผล่ขึ้นมา

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)

หลังจากเลื่อนหน้าแล้ว สินค้าทั้ง 50 รายการควรจะถูกเรนเดอร์อยู่ใน DOM ผม/ฉันพบว่าเลื่อน 5 ครั้งพร้อมหน่วง 2 วินาทีก็เพียงพอ แต่คุณอาจต้องปรับตามความเร็วเน็ตของคุณ

ขั้นตอนที่ 3: ดึงข้อมูลสินค้า

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})

การครอบแต่ละส่วนด้วย try/except สำคัญมาก เพราะบางสินค้ามีของหมดหรือข้อมูลไม่ครบ และคุณคงไม่อยากให้ element ที่ผิดพลาดตัวเดียวทำให้การ scrape ทั้งหมดล่ม

ขั้นตอนที่ 4: จัดการ Pagination

Amazon แบ่ง Best Sellers 100 อันดับออกเป็น 2 หน้า โดยใช้โครงสร้าง URL ต่างกัน:

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()

สิ่งที่คาดหวังได้

จากการทดสอบ Selenium ดึงสินค้าได้ครบ 50 รายการต่อหน้า — ชนะ requests + BS4 แบบชัดเจน แต่ข้อเสียคือใช้เวลาประมาณ 45 วินาทีต่อหน้า (รวมเวลาหน่วงระหว่างเลื่อน) และผม/ฉันก็ยังโดน flag อยู่ดีถ้ารันถี่เกินไปโดยไม่มี proxy rotation ถึงจะใส่แฟลกกันตรวจจับแล้ว Selenium ก็ยังถูก Amazon ตรวจเจอได้ ถ้าจะทำงานสเกลใหญ่จริง ๆ ต้องมีมาตรการเพิ่ม (ดู Anti-Ban Playbook ด้านล่าง)

จุดที่น่าปวดหัวอื่น ๆ:

  • WebDriver version mismatch ยังเกิดขึ้นได้เป็นครั้งคราว แม้ว่า Selenium Manager จะช่วยลดปัญหานี้ลงมากแล้ว
  • CSS selector ต้องอัปเดตทุกครั้งที่ Amazon เปลี่ยน DOM
  • ใช้ RAM เยอะ — browser instance แต่ละครั้งกินประมาณ 200–400MB

วิธีที่ 3: ดึง Amazon Best Sellers ด้วย Scraping API

Scraping API คือแนวทางแบบ “ให้คนอื่นจัดการเรื่องยากแทน” เช่น Scrape.do, Oxylabs และ ScrapingBee จะช่วยดูแลเรื่อง proxy rotation, การเรนเดอร์ JavaScript และมาตรการต้านบอทให้หมด — คุณแค่ส่ง URL ไป แล้วรับ HTML หรือ JSON กลับมา

ทำงานอย่างไร

คุณส่ง URL เป้าหมายไปที่ API endpoint จากนั้น API จะเรนเดอร์หน้าด้วย browser จริงบน infrastructure ของเขาเอง หมุน proxy ให้ จัดการ CAPTCHA ให้ และส่ง HTML ที่สะอาดกลับมา จากนั้นคุณก็ parse HTML ที่ได้ด้วย BeautifulSoup เหมือนเดิม

ขั้นตอนที่ 1: ส่ง request ผ่าน API

ตัวอย่างนี้ใช้ Scrape.do (ราคาเริ่มต้น $29/เดือน สำหรับ 150,000 เครดิต โดย 1 เครดิต = 1 request ไม่ว่าต้องเรนเดอร์หรือไม่):

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")

จากตรงนี้ การ parse ก็เหมือนวิธี 1 ทุกอย่าง — selector เดิม ลอจิกการดึงข้อมูลเดิม

เช็กความจริงเรื่องราคา

นี่คือราคาประมาณของ API หลัก ๆ ต่อ 1,000 requests สำหรับ Amazon ในเรทที่คุ้มที่สุด:

ผู้ให้บริการต้นทุนต่อ 1,000 Requestsหมายเหตุ
Scrape.doประมาณ $0.19ราคาแบบ flat rate ไม่มีตัวคูณเครดิต
Oxylabsประมาณ $1.80ตัวคูณ 5x สำหรับ JS rendering
ScrapingBeeประมาณ $4.90ตัวคูณ 5–25x สำหรับฟีเจอร์พรีเมียม
Bright Data$5.00+ข้อมูลครบที่สุด (686 ฟิลด์/สินค้า) แต่ช้าที่สุด (~66 วินาที/request)

ข้อดีและข้อเสีย

ข้อดี: เสถียรสูง ( บน Amazon สำหรับผู้ให้บริการระดับท็อป), ไม่ต้องดูแล driver, จัดการ anti-bot ให้อัตโนมัติ และสเกลได้ดี

ข้อเสีย: ต้องจ่ายราย request ซึ่งต้นทุนจะพุ่งเมื่อใช้งานหนัก, ยังต้องเขียนโค้ด parse เอง และยังเสี่ยงต่อการเปลี่ยนแปลง CSS selector อยู่ดี สำหรับ 100,000 pages/เดือน ต้นทุนรวมต่างกันชัดมาก: ทำเองในบริษัทอาจมีต้นทุนราว — ประหยัดไป 71%

จุดคุ้มทุนมักอยู่ที่ประมาณ 500K–1M requests/เดือน ต่ำกว่านั้น การประหยัดเวลาด้วย API มักคุ้มกว่าค่าใช้จ่ายมาก

วิธีที่ 4: ดึง Amazon Best Sellers ด้วย Thunderbit (ไม่ต้องใช้ Python)

ขอพูดตรง ๆ เลย: ผม/ฉันทำงานที่ Thunderbit ดังนั้นมุมมองในส่วนนี้ก็มีบริบทนั้นอยู่ แต่ผม/ฉันทดลองทั้ง 4 วิธีแบบต่อเนื่องจริง ๆ และความต่างด้านเวลาในการได้ข้อมูลนั้นชัดมาก

คือ AI web scraper ที่ทำงานเป็น Chrome extension แนวคิดหลักคือ แทนที่จะเขียน CSS selector หรือโค้ด Python ให้ AI อ่านหน้าเว็บแล้วหาว่าควรดึงข้อมูลอะไร สำหรับ Amazon Best Sellers โดยเฉพาะ Thunderbit มี template สำเร็จรูปที่ใช้งานได้ในคลิกเดียว

ขั้นตอนที่ 1: ติดตั้ง Thunderbit Chrome Extension

ไปที่ แล้วคลิก "Add to Chrome" สมัครบัญชีฟรี — แพ็กเกจฟรีมีเครดิตพอให้คุณทดลองได้

ขั้นตอนที่ 2: เปิดหน้า Amazon Best Sellers

เปิดหน้า Amazon Best Sellers หมวดใดก็ได้ใน Chrome เช่น: https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/

ขั้นตอนที่ 3: คลิก "AI Suggest Fields"

เปิด sidebar ของ Thunderbit แล้วคลิก "AI Suggest Fields" AI จะวิเคราะห์โครงสร้างหน้าและเสนอคอลัมน์ เช่น Product Name, Price, Rating, Image URL, Vendor, Product URL และ Rank จากการทดสอบของผม/ฉัน มันระบุฟิลด์สำคัญได้ครบภายในประมาณ 3 วินาที

amazon-thunderbit-product-data.webp

คุณสามารถเปลี่ยนชื่อ ลบ หรือเพิ่มคอลัมน์ได้ รวมถึงใส่ prompt เฉพาะแต่ละฟิลด์ได้ด้วย เช่น "categorize as Electronics/Apparel/Home" เพื่อเพิ่มแท็กหมวดหมู่ให้แต่ละสินค้า

ขั้นตอนที่ 4: คลิก "Scrape"

กดปุ่ม "Scrape" แล้ว Thunderbit จะเติมตารางข้อมูลสินค้าแบบมีโครงสร้างจากหน้าเว็บให้ทันที ใน cloud mode ระบบสามารถประมวลผลได้สูงสุด 50 หน้าในเวลาเดียวกัน พร้อมจัดการ lazy loading และ pagination ให้อัตโนมัติ

ขั้นตอนที่ 5: Export ฟรี

คลิก "Export" แล้วเลือกปลายทางของคุณ: Excel, Google Sheets, Airtable หรือ Notion การ export ฟรีทุกแพ็กเกจ ไม่มีค่าใช้จ่ายแอบแฝง

product-data-export.webp

ทั้งกระบวนการใช้เวลาประมาณ 90 วินาที ตั้งแต่เปิดหน้าเว็บจนได้สเปรดชีตครบถ้วน หากเทียบกัน วิธี 1 ใช้เวลาประมาณ 20 นาที (รวมเวลามั่วแก้ปัญหา lazy loading), วิธี 2 ใช้เวลาประมาณ 35 นาที (รวมตั้งค่า Selenium) และวิธี 3 ใช้เวลาประมาณ 15 นาที (รวมสมัครบัญชี API)

ทำไม Thunderbit ถึงรับมือกับ Amazon ได้ดี

เพราะ AI อ่านหน้าเว็บใหม่ทุกครั้ง มันจึงปรับตัวตามการเปลี่ยน layout ได้อัตโนมัติ — ไม่ต้องคอยดูแล CSS selector ตรงนี้ช่วยแก้ปัญหาที่คนทำ scraping เจอบ่อยที่สุดโดยตรง: "web scraper พื้นฐานไม่พอ ต้องเพิ่ม catch สำหรับ element ที่เปลี่ยนตลอด" เวลา Amazon เปลี่ยน DOM ซึ่งเกิดขึ้นบ่อย คุณไม่ต้องแก้อะไรเลย

โหมด cloud scraping จัดการ proxy rotation, rendering และมาตรการต้านบอทให้แบบโปร่งใส สำหรับคนที่อยากได้โซลูชันแบบ “ใช้แล้วจบ” วิธีนี้ช่วยลบความปวดหัวเรื่องแบนได้เกือบหมด

คู่มือกันโดนบล็อก: หลีกเลี่ยงการถูก Amazon แบนอย่างไร

ระบบตรวจจับบอทของ Amazon ค่อนข้างดุ ผม/ฉันโดนบล็อก IP ชั่วคราวระหว่างทดสอบ และผู้ใช้ในฟอรัมก็เจอเหมือนกัน: "error เต็มไปหมด Amazon ถึงขั้นส่งกลับหน้า home" ถ้าคุณจะใช้เส้นทาง Python (วิธี 1–3) ส่วนนี้สำคัญมาก

นี่คือกลยุทธ์แบบเป็นชั้น ๆ เรียงจากพื้นฐานไปขั้นสูง:

1. หมุน User-Agent

การส่ง User-Agent เดิมซ้ำ ๆ เป็นสัญญาณเสี่ยง ใช้ชุด 5+ strings จากตัวอย่างโค้ดในวิธี 1 แล้วสุ่มเลือกทุกครั้งที่ส่ง request:

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

2. ใส่ช่วงเวลาหน่วงแบบสุ่มระหว่าง request

การหน่วงแบบตายตัวตรวจจับได้ง่าย ควรสุ่มดีกว่า:

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

ผม/ฉันพบว่าการเว้น 2–5 วินาทีต่อ request ช่วยให้ไม่ถูกจับได้ง่ายสำหรับงานชุดเล็ก (ต่ำกว่า 50 request) ถ้างานใหญ่กว่านั้น ควรเพิ่มเป็น 3–7 วินาที

3. ใช้ Proxy Rotation

นี่คือหัวใจสำคัญ แสดงว่า residential proxy มีอัตราสำเร็จเฉลี่ยบน Amazon ราว 94% เทียบกับ datacenter proxy ที่ประมาณ 59% — ต่างกันถึง 35 จุดเปอร์เซ็นต์ ระบบตรวจจับของ Amazon มีทั้ง TLS fingerprinting, behavioral analysis และการจำกัดจำนวน request ต่อ IP ทำให้ IP จาก datacenter มักถูกจับได้ภายในไม่กี่วินาที

Residential proxy แพงกว่า ($2–$12 ต่อ GB แล้วแต่ผู้ให้บริการ) แต่เชื่อถือได้มากกว่าอย่างเห็นได้ชัด ตัวอย่างโค้ด:

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. ทำให้ browser fingerprint แข็งแรงขึ้น (Selenium)

1options.add_argument('--disable-blink-features=AutomationControlled')
2options.add_experimental_option("excludeSwitches", ["enable-automation"])
3options.add_experimental_option('useAutomationExtension', False)
4# หลัง init driver ให้ลบ flag navigator.webdriver
5driver.execute_cdp_command('Page.addScriptToEvaluateOnNewDocument', {
6    'source': "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"
7})

5. จัดการ session และคุกกี้

การเก็บคุกกี้ข้าม request ทำให้ scraper ของคุณดูเหมือน session ของผู้ใช้จริงมากขึ้น:

1session = requests.Session()
2# เข้า homepage ก่อนเพื่อให้ได้คุกกี้ที่ดูสมจริง
3session.get("https://www.amazon.com", headers=headers)
4time.sleep(2)
5# แล้วค่อย scrape หน้าเป้าหมาย
6response = session.get(target_url, headers=headers)

6. เมื่อไรควรข้ามความยุ่งยากทั้งหมดไปเลย

สำหรับคนที่ไม่อยากจัดการเรื่องพวกนี้ Thunderbit cloud scraping จะดูแล proxy rotation, rendering และมาตรการต้านบอทให้อัตโนมัติ ส่วน scraping API ก็จัดการเรื่องส่วนใหญ่ได้ตั้งแต่ต้น จากประสบการณ์ของผม/ฉัน เวลาที่เสียไปกับการดีบักปัญหาโดนบล็อกมักมากกว่าเวลาที่ใช้เขียนโค้ด scraping จริง ๆ — เพราะฉะนั้นแนวทางแบบ "ใช้แล้วจบ" จึงมี ROI จริง

ขยายข้อมูลจากหน้ารายการ: ดึงรายละเอียดสินค้าจาก subpage เพื่อข้อมูลที่ครบขึ้น

หน้า Best Sellers แสดงแค่ข้อมูลพื้นฐาน — ชื่อสินค้า ราคา คะแนน และอันดับ แต่ข้อมูลที่มีค่าจริงสำหรับรีเสิร์ช FBA มักอยู่ในหน้า detail ของสินค้าแต่ละชิ้น ลองดูว่าคุณพลาดอะไรไปบ้างถ้า scrape แค่หน้ารายการ:

ฟิลด์หน้ารายการหน้ารายละเอียดสินค้า
ชื่อสินค้า
ราคา
คะแนน
อันดับ BSR✅ (พร้อมอันดับย่อยตาม sub-category)
แบรนด์
ASIN
วันที่วางขายครั้งแรก
ขนาด/น้ำหนัก
จำนวนผู้ขาย
ฟีเจอร์แบบ bullet points
เจ้าของ Buy Box

ฟิลด์ "Date First Available" มีประโยชน์มากเป็นพิเศษ — มันบอกว่าสินค้านั้นอยู่ในตลาดมานานแค่ไหน ซึ่งเป็นสัญญาณสำคัญสำหรับการวิเคราะห์คู่แข่ง และการรู้จำนวนผู้ขายกับเจ้าของ Buy Box ก็ช่วยประเมินได้ว่าควรเข้า niche นั้นหรือไม่ (ถ้า Amazon เองถือ Buy Box มากกว่า 30% การแข่งขันจะยากมาก)

แนวทางด้วย Python: วนลูปผ่าน URL ของสินค้า

หลังจากเก็บ URL ของสินค้าจากหน้ารายการแล้ว ให้ loop เข้าแต่ละหน้าพร้อมหน่วงเวลา:

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    # ดึงแบรนด์
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    # ดึง ASIN จาก source ของหน้า หรือจาก URL
9    # ดึง Date First Available จากตารางรายละเอียดสินค้า
10    # ... ฟิลด์เพิ่มเติม ...

ขอเตือนตรง ๆ ว่า การยิงไปยังหน้าสินค้า 100 หน้าแบบรายชิ้นจะเพิ่มความเสี่ยงโดนบล็อกอย่างมาก ควรเผื่อ proxy rotation และหน่วงเวลานานขึ้นไว้ด้วย

แนวทางของ Thunderbit: scrape subpage ได้ในคลิกเดียว

หลังจาก scrape หน้ารายการลงตารางแล้ว ให้คลิก "Scrape Subpages" ใน Thunderbit AI จะเข้าไปที่แต่ละ URL ของสินค้าแล้วเติมคอลัมน์เพิ่มเติม เช่น แบรนด์ ASIN สเปก และฟีเจอร์ต่าง ๆ ให้อัตโนมัติ ไม่ต้องเขียนโค้ดเพิ่ม ไม่ต้องตั้ง selector เพิ่ม และไม่ต้องเซ็ตอัปอะไรเพิ่ม เหมาะมากสำหรับทีมอีคอมเมิร์ซที่ต้องการภาพรวมครบถ้วนเพื่อประกอบการตัดสินใจ sourcing แต่ไม่อยากเขียนและดูแล parser สำหรับหน้ารายละเอียดเอง

ทำให้การ scrape เป็นงานประจำ: ติดตาม Best Sellers ตามเวลา

การ scrape ครั้งเดียวมีประโยชน์ก็จริง แต่การติดตามอย่างต่อเนื่องต่างหากคือข้อได้เปรียบเชิงการแข่งขันที่แท้จริง การดูว่าสินค้าไหนขึ้นหรือลง จับเทรนด์ตั้งแต่ต้น และติดตามการเปลี่ยนแปลงราคาเป็นสัปดาห์หรือเป็นเดือน — นี่แหละที่แยกการรีเสิร์ชทั่วไปออกจากการตัดสินใจที่ขับเคลื่อนด้วยข้อมูล

แนวทางด้วย Python: ตั้งเวลาผ่าน Cron

บน Linux/Mac คุณสามารถตั้งเวลารันสคริปต์ Python ด้วย cron ได้ นี่คือตัวอย่าง crontab สำหรับ scrape ทุกวันเวลา 8 โมงเช้า:

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

ถ้าต้องการ scrape ทุกวันจันทร์เวลา 9 โมงเช้า:

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

บน Windows ใช้ Task Scheduler เพื่อทำงานแบบเดียวกัน ถ้าต้องการตั้งเวลาแบบ always-on โดยไม่ต้องเปิดโน้ตบุ๊กทิ้งไว้ ให้ 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 server ของ Thunderbit (ไม่ต้องเปิด browser หรือคอมพิวเตอร์ทิ้งไว้) และส่งออกข้อมูลไป Google Sheets หรือ Airtable อัตโนมัติ วิธีนี้สร้าง dashboard ติดตามแบบสด ๆ ได้โดยแทบไม่ต้องจัดการเซิร์ฟเวอร์ เหมาะมากสำหรับทีม operations ที่อยากเห็นข้อมูลต่อเนื่องโดยไม่แบกภาระ DevOps

ข้อควรพิจารณาด้านกฎหมายและจริยธรรมเมื่อ scrape Amazon

ผม/ฉันไม่ใช่ทนาย และนี่ไม่ใช่คำแนะนำทางกฎหมาย แต่การมองข้ามประเด็นด้านกฎหมายในบทความสอน scraping ก็คงไม่รับผิดชอบ เพราะผู้ใช้ในฟอรัมพูดถึงข้อกังวลเรื่อง ToS ไว้ชัดเจน และก็มีเหตุผลรองรับ

robots.txt ของ Amazon: ณ ปี 2026 ไฟล์ robots.txt ของ Amazon มีเส้นทาง Disallow เฉพาะกว่า 80 รายการ แต่ /gp/bestsellers/ ไม่ได้ถูกบล็อกอย่างชัดเจนสำหรับ user agent มาตรฐาน อย่างไรก็ตาม user agent ที่เกี่ยวกับ AI กว่า 35 แบบ (เช่น ClaudeBot, GPTBot, Scrapy ฯลฯ) จะโดน Disallow: / แบบครอบทั้งหมด การที่ไม่มี disallow เฉพาะไม่ได้แปลว่า Amazon สนับสนุนให้ scrape

เงื่อนไขการใช้งานของ Amazon: ของ Amazon (อัปเดตพฤษภาคม 2025) ระบุชัดว่าห้าม "ใช้กระบวนการหรือเทคโนโลยีอัตโนมัติใด ๆ เพื่อเข้าถึง รับ คัดลอก หรือเฝ้าติดตามส่วนใดก็ตามของเว็บไซต์ Amazon" โดยไม่ได้รับอนุญาตเป็นลายลักษณ์อักษร เรื่องนี้ไม่ใช่แค่เชิงทฤษฎี — Amazon ในเดือนพฤศจิกายน 2025 เรื่องการเข้าถึงอัตโนมัติที่ไม่ได้รับอนุญาต และชนะคำสั่งห้ามชั่วคราว

บรรทัดฐานจาก hiQ v. LinkedIn: ในคดี (Ninth Circuit, 2022) ศาลวินิจฉัยว่าการ scrape ข้อมูลที่เปิดเผยต่อสาธารณะน่าจะไม่ละเมิด Computer Fraud and Abuse Act แต่ท้ายที่สุด hiQ ก็ยอมความและตกลงหยุดการ scraping — ชนะคดี CFAA ก็ไม่ได้ป้องกันความเสี่ยงจากการผิดสัญญาได้

แนวทางปฏิบัติ:

  • ดึงเฉพาะข้อมูลที่เปิดเผยต่อสาธารณะ (ราคา, BSR, ชื่อสินค้า — ไม่ใช่ PII)
  • เคารพ rate limit และอย่าใช้งานหนักจนกระทบเซิร์ฟเวอร์
  • ใช้ข้อมูลเพื่อ competitive intelligence ที่ถูกต้องตามกฎหมาย
  • ปรึกษาทีมกฎหมายของคุณก่อนจะ scrape ในสเกลใหญ่
  • ระวังว่าตอนนี้ มีกฎหมายคุ้มครองข้อมูลส่วนบุคคลแบบครอบคลุมแล้ว

Thunderbit cloud scraping ใช้รูปแบบ request ที่คล้าย browser มาตรฐาน แต่คุณควรตรวจสอบความสอดคล้องกับที่ปรึกษากฎหมายของตัวเองเสมอ

ควรใช้วิธีไหน? คู่มือเลือกแบบเร็ว ๆ

สรุปสั้น ๆ:

  • "ผม/ฉันกำลังเรียน Python และอยากทำโปรเจกต์สุดสัปดาห์" → วิธี 1 (requests + BeautifulSoup) คุณจะได้เรียนรู้เรื่อง HTTP requests, HTML parsing และระบบป้องกันบอทของ Amazon เยอะมาก
  • "ต้อง scrape หน้า JavaScript หนัก ๆ หรือ session ที่ต้องล็อกอิน" → วิธี 2 (Selenium) หนักกว่าแต่จัดการเนื้อหาแบบ dynamic ได้
  • "ผม/ฉันทำงาน scrape ระดับ production และต้องสเกล" → วิธี 3 (Scraping API) ให้คนอื่นดูแล proxy และ rendering แทน มักคุ้มกว่า API เมื่ออยู่ต่ำกว่า 500K requests/เดือน
  • "ผม/ฉันไม่ใช่นักพัฒนา และอยากได้ข้อมูลใน 2 นาที" → วิธี 4 () ไม่ต้องเขียนโค้ด ไม่ต้องตั้ง selector ไม่ต้องดูแลรักษา
  • "ผม/ฉันต้องการ monitoring ต่อเนื่องโดยไม่ต้องดูแลเซิร์ฟเวอร์" → Thunderbit Scheduled Scraper ตั้งค่าแล้วปล่อยได้เลย

สรุปและประเด็นสำคัญ

หลังจากทดสอบทั้งสุดสัปดาห์ สิ่งที่ได้จริง ๆ คือ:

requests + BeautifulSoup เหมาะสำหรับการเรียนรู้ แต่ข้อจำกัดเรื่อง lazy loading (ได้แค่ ~30 จาก 50 สินค้า) และ CSS selector ที่เปราะบาง ทำให้ไม่ค่อยเหมาะกับการใช้งานจริง

Selenium แก้ปัญหา lazy loading ได้และดึงสินค้าได้ครบ 50 รายการต่อหน้า แต่ช้า กิน RAM และยังถูกบอทของ Amazon ตรวจจับได้อยู่ดี

Scraping APIs ให้ความเสถียรดีที่สุดสำหรับงานระดับ production — บน Amazon — แต่ต้นทุนจะสะสม และคุณยังต้องเขียนโค้ด parsing เอง

Thunderbit ให้ความเร็วในการได้ข้อมูลสูงที่สุดแบบทิ้งห่างชัดเจน AI จัดการการเปลี่ยน layout, lazy loading, pagination และมาตรการต้านบอทได้โดยไม่ต้องตั้งค่าอะไรเลย สำหรับคนไม่สายเทคนิคหรือทีมที่ต้องการข้อมูลต่อเนื่องโดยไม่ต้องแบก DevOps มันคือทางเลือกที่ใช้งานได้จริงที่สุด

บทเรียนสำคัญที่สุดคืออะไร? ระบบกันบอทของ Amazon และการเปลี่ยน layout บ่อย ๆ ทำให้โซลูชันที่แทบไม่ต้องดูแลคือสิ่งที่ประหยัดเวลาที่สุดในระยะยาว ทุกชั่วโมงที่คุณเสียไปกับการดีบัก selector ที่พังและการหมุน proxy คือชั่วโมงที่ไม่ได้เอาไปวิเคราะห์ข้อมูลจริง

ถ้าอยากลองแนวทาง no-code? มีเครดิตพอให้คุณ scrape หมวด Best Sellers สองสามหมวดแล้วดูผลลัพธ์เอง ถ้าชอบฝั่ง Python โค้ดตัวอย่างด้านบนก็น่าจะพอให้เริ่มได้ ไม่ว่าทางไหน คุณก็จะได้ข้อมูล Amazon Best Seller ลงสเปรดชีต แทนที่จะนั่งจ้องแท็บ browser อย่างเดียว

ถ้าอยากอ่านเพิ่มเติมเกี่ยวกับแนวทาง web scraping ลองดูคู่มือของเราเรื่อง , , และ คุณยังสามารถดูวิดีโอสอนทีละขั้นตอนบน

เรียนรู้เพิ่มเติม

สารบัญ

ลองใช้ Thunderbit

ดึงลีดและข้อมูลอื่น ๆ ได้ใน 2 คลิก ขับเคลื่อนด้วย AI

รับ Thunderbit ใช้ฟรี
ดึงข้อมูลด้วย AI
ส่งข้อมูลไปยัง Google Sheets, Airtable หรือ Notion ได้อย่างง่ายดาย
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week