ถ้าคุณเคยลองทำตามบทสอนดึงข้อมูล Amazon แล้วเจอแต่กำแพงของ CAPTCHA, ข้อผิดพลาด 503 หรือผลลัพธ์ว่างเปล่า — ยินดีต้อนรับสู่โลกเดียวกันครับ/ค่ะ บทแนะนำ Python สำหรับ Amazon scraping จำนวนมากที่ยังลอยอยู่บนอินเทอร์เน็ตมักเขียนไว้ตั้งแต่ปี 2022 หรือ 2023 และใช้ตัวเลือก selector กับเทคนิคที่ Amazon ปรับแก้ไปนานแล้ว
ผม/ฉันใช้เวลาหลายปีในการสร้างเครื่องมือดึงข้อมูลที่ Thunderbit และสิ่งหนึ่งที่บอกได้จากสนามจริงคือ: Amazon เป็นหนึ่งในเว็บไซต์ที่ดึงข้อมูลได้ยากที่สุดแบบเชื่อถือได้ แพลตฟอร์มนี้เปลี่ยนโครงสร้าง HTML อยู่ตลอด ใช้ระบบป้องกันบอทหลายชั้น และยังแสดงเลย์เอาต์หน้าตาแตกต่างกันให้ผู้ใช้ต่างกลุ่มผ่านการทดสอบ A/B อีกด้วย ในคู่มือนี้ ผม/ฉันจะพาคุณสร้าง Python Amazon scraper ที่ใช้งานได้จริงในปี 2025 — พร้อม CSS selector ที่ตรวจสอบแล้ว กลยุทธ์ป้องกันการถูกบล็อกแบบหลายชั้น และแนวทางการตั้งเวลาและส่งออกข้อมูลที่บทสอนส่วนใหญ่มักข้ามไป และถ้าคุณแค่อยากได้ข้อมูลโดยไม่ต้องมานั่งสู้กับ Python ผม/ฉันจะโชว์ให้ดูด้วยว่า ทำงานเดียวกันนี้ได้ในประมาณสองคลิกอย่างไร
Amazon Product Scraping คืออะไร?
Amazon product scraping คือกระบวนการดึงข้อมูลที่เปิดเผยต่อสาธารณะออกมาแบบอัตโนมัติ — เช่น ชื่อสินค้า ราคา คะแนนรีวิว จำนวนรีวิว รูปภาพ ความพร้อมจำหน่าย และอื่น ๆ — จากหน้าสินค้าและหน้าผลการค้นหาของ Amazon แทนที่จะคัดลอกข้อมูลจากรายการนับร้อยด้วยมือ scraper จะเข้าไปยังแต่ละหน้า อ่าน HTML แล้วดึงข้อมูลที่คุณต้องการออกมาเป็นรูปแบบที่เป็นระบบ เช่น CSV, Excel หรือฐานข้อมูล
ให้คิดว่ามันเหมือนจ้างเด็กฝึกงานที่ขยันสุด ๆ ให้ไปเปิดดูหน้าสินค้าเป็นพันหน้าได้ในช่วงเวลาที่คุณกินกาแฟเช้าเสร็จพอดี แถมเด็กฝึกงานคนนี้ไม่สะกดผิดและไม่ต้องพักกลางวันด้วย
ทำไมต้องใช้ Python ดึงข้อมูลสินค้า Amazon?
Amazon มีสินค้าอยู่ราว ๆ ครอบคลุมกว่า 30 หมวดหมู่ โดยมีบัญชีผู้ขายประมาณ ตอนนี้ผู้ขายจากภายนอกคิดเป็น 69% ของ GMV ทั้งหมด การเฝ้าดูแค่เศษเสี้ยวของแค็ตตาล็อกนี้ด้วยมือแทบเป็นไปไม่ได้ นี่คือเหตุผลที่ทีมต่าง ๆ ใช้การ scrape Amazon:
| กรณีใช้งาน | ใครได้ประโยชน์ | ข้อมูลที่ดึงออกมา |
|---|---|---|
| ติดตามราคาและปรับราคา | ทีมอีคอมเมิร์ซ, ผู้ขายบนมาร์เก็ตเพลส | ราคา, ความพร้อมจำหน่าย, ข้อมูลผู้ขาย |
| วิเคราะห์คู่แข่ง | ผู้จัดการสินค้า, ทีมแบรนด์ | คุณสมบัติสินค้า, คะแนน, จำนวนรีวิว |
| วิจัยตลาด | นักวิเคราะห์, ทีมพัฒนาสินค้าใหม่ | เทรนด์หมวดหมู่, การกระจายราคา |
| หาลีดขาย | ทีมขาย | ชื่อผู้ขาย, ข้อมูลแบรนด์, ข้อมูลติดต่อ |
| Affiliate marketing | ครีเอเตอร์คอนเทนต์, เว็บดีล | ราคา, โปรโมชัน, รายละเอียดสินค้า |
| ติดตามสต็อก | ซัพพลายเชน, จัดซื้อ | สถานะสินค้า, ประมาณการจัดส่ง |
ขนาดของระบบราคาของ Amazon เองก็ทำให้การทำงานอัตโนมัติเป็นเรื่องจำเป็น: Amazon เปลี่ยนราคามากกว่า โดยราคาสินค้าโดยเฉลี่ยอัปเดตทุกประมาณ 10 นาที เทียบกับคู่แข่งอย่าง Best Buy และ Walmart ที่เปลี่ยนราคาประมาณ 50,000 ครั้งต่อเดือนเท่านั้น ทีมคนจริง ๆ ไม่มีทางตามทัน

Python ให้คุณควบคุมกระบวนการดึงข้อมูลได้ทั้งหมด — คุณเป็นคนเลือกว่าจะดึงอะไร จะจัดการ error อย่างไร และจะเก็บข้อมูลไว้ที่ไหน แต่ในอีกมุมหนึ่ง คุณก็ต้องรับผิดชอบเรื่องการดูแลรักษา การหลบการบล็อก และการตามให้ทันเมื่อ Amazon เปลี่ยน HTML บ่อย ๆ ด้วย
อะไรดึงได้จาก Amazon และอะไรที่ดึงไม่ได้
จากหน้าสินค้าที่เข้าถึงได้สาธารณะ โดยทั่วไปคุณสามารถดึงได้:
- ชื่อสินค้า (ชื่อ, แบรนด์)
- ราคา (ราคาปัจจุบัน, ราคาเดิม, ราคาดีล)
- คะแนนรีวิว (ค่าเฉลี่ยดาว)
- จำนวนรีวิว
- รูปภาพสินค้า (URL รูปหลัก)
- สถานะความพร้อมจำหน่าย / สต็อก
- ASIN (Amazon Standard Identification Number)
- รายละเอียดสินค้าและ bullet points
- ข้อมูลผู้ขาย
- ตัวเลือกสินค้า (ขนาด, สี ฯลฯ)
สิ่งที่ควรหลีกเลี่ยง:
- ข้อมูลที่อยู่หลังการล็อกอิน: หน้ารีวิวแบบขยาย, ข้อมูลบัญชีส่วนตัว, ประวัติคำสั่งซื้อ
- ข้อมูลส่วนบุคคล: ชื่อผู้ซื้อ, ที่อยู่, ข้อมูลการชำระเงิน
- เนื้อหาที่มีลิขสิทธิ์เพื่อนำไปเผยแพร่ต่อ: รายละเอียดสินค้าและรูปภาพใช้เพื่อวิเคราะห์ได้ แต่ไม่ควรนำไปเผยแพร่เป็นของตัวเอง
ไฟล์ ของ Amazon บล็อกบอทที่มีชื่อมากกว่า 50 ตัว (รวมถึง GPTBot, Scrapy และ ClaudeBot) และห้ามเข้าถึงเส้นทางอย่างบัญชีผู้ใช้ รถเข็น และ wishlists ส่วนหน้ารายละเอียดสินค้าไม่ได้ถูกห้ามแบบชัดเจน แต่ข้อกำหนดการใช้งานของ Amazon ก็ห้ามการเข้าถึงแบบอัตโนมัติอยู่ดี โดยศาลมักแยกความต่างระหว่างการละเมิด ToS (เรื่องแพ่ง) กับความผิดทางอาญาภายใต้ CFAA — เดี๋ยวท้ายคู่มือจะอธิบายเรื่องความถูกต้องตามกฎหมายเพิ่มเติม
เครื่องมือและไลบรารีที่ต้องใช้
นี่คือชุดเครื่องมือ Python สำหรับบทนี้:
| ไลบรารี | หน้าที่ | เหตุผลที่ใช้ |
|---|---|---|
requests | ส่ง HTTP requests | ใช้ง่าย รองรับแพร่หลาย |
beautifulsoup4 | แยกวิเคราะห์ HTML | ดึงข้อมูลด้วย CSS selector ได้สะดวก |
lxml | ตัวแยกวิเคราะห์ HTML ที่เร็ว | ใช้เป็น backend ให้ BeautifulSoup |
curl_cffi | ปลอมลายเซ็น TLS | สำคัญมากสำหรับหลบการตรวจจับของ Amazon |
pandas | จัดโครงสร้างและส่งออกข้อมูล | DataFrame, ส่งออก CSV/Excel |
ตัวเลือกเสริม (สำหรับเนื้อหาที่เรนเดอร์ด้วย JavaScript):
seleniumหรือplaywright— สำหรับทำงานผ่านเบราว์เซอร์แบบ headless
ตั้งค่าสภาพแวดล้อม Python ของคุณ
เปิดเทอร์มินัลแล้วรัน:
1mkdir amazon-scraper && cd amazon-scraper
2python -m venv venv
3source venv/bin/activate # บน Windows: venv\Scripts\activate
4pip install requests beautifulsoup4 lxml curl_cffi pandas
ตรวจสอบว่าติดตั้งครบแล้ว:
1import requests, bs4, curl_cffi, pandas
2print("All good!")
ถ้าเห็นข้อความ "All good!" โดยไม่มี error ก็พร้อมเริ่มได้เลย

ทำไมบทสอน Amazon scraping ส่วนใหญ่ถึงพัง และบทนี้ต่างอย่างไร
นี่คือส่วนที่คู่มือส่วนใหญ่มักไม่พูดถึง และเป็นเหตุผลว่าทำไมคุณถึงน่าจะกำลังอ่านบทความนี้อยู่
Amazon อัปเดตโครงสร้าง HTML, ชื่อคลาส และ ID ขององค์ประกอบอยู่บ่อยมาก ชุมชนสาย scraping รายงานว่า ต้องแก้ไขรายสัปดาห์เพราะ DOM เปลี่ยนและมีการเปลี่ยน fingerprinting ปัญหาที่โด่งดังที่สุดคือ selector #priceblock_ourprice ซึ่งปรากฏอยู่ในบทสอนนับร้อยจากช่วงปี 2018–2023 ID นี้ไม่มีอยู่บนหน้าสินค้า Amazon แล้ว
เปรียบเทียบแบบเร็ว ๆ ว่าอะไรพังไปแล้ว และอะไรใช้ได้ในปัจจุบัน:
| ข้อมูล | Selector ที่พัง (ก่อนปี 2024) | Selector ที่ใช้ได้ในปี 2025 |
|---|---|---|
| ราคา | #priceblock_ourprice | div#corePriceDisplay_desktop_feature_div span.a-price .a-offscreen |
| ชื่อสินค้า | #productTitle | span#productTitle (ยังใช้ได้) |
| คะแนนรีวิว | span.a-icon-alt (บางครั้ง context ผิด) | #acrPopover span.a-icon-alt |
| จำนวนรีวิว | #acrCustomerReviewCount | span#acrCustomerReviewText |
| สถานะสินค้า | #availability span | div#availability span.a-size-medium |
ตัวอย่างโค้ดทุกชิ้นในคู่มือนี้ถูกทดสอบกับหน้า Amazon จริงในปี 2025 แล้ว ผม/ฉันจะแสดง CSS selector ที่ใช้จริงพร้อมตัวอย่างผลลัพธ์ให้ดู — ไม่ใช่การก็อปจากปี 2022 มาปะหน้าใหม่
ก่อนเริ่ม
- ระดับความยาก: ระดับกลาง (สมมติว่าคุณมีพื้นฐาน Python)
- เวลาที่ต้องใช้: ประมาณ 30–45 นาทีสำหรับบทเต็ม; ประมาณ 10 นาทีสำหรับ scraper เบื้องต้น
- สิ่งที่ต้องมี: Python 3.9+, เบราว์เซอร์ Chrome (สำหรับตรวจสอบหน้า Amazon), เทอร์มินัล และถ้าต้องการเทียบกับแนวทางไม่ต้องเขียนโค้ดก็สามารถใช้ ได้
ขั้นที่ 1: ส่ง request แรกไปยัง Amazon
เปิดหน้า product ของ Amazon ในเบราว์เซอร์แล้วคัดลอก URL เราจะเริ่มด้วย requests.get() แบบง่าย ๆ:
1import requests
2url = "https://www.amazon.com/dp/B0DGNFM9YJ"
3response = requests.get(url)
4print(response.status_code)
5print(response.text[:500])
รันแล้วคุณมักจะได้ สถานะ 503 หรือหน้า HTML ที่ขึ้นข้อความประมาณว่า "To discuss automated access to Amazon data please contact…" นั่นคือ WAF (Web Application Firewall) ของ Amazon ตรวจจับสคริปต์ Python ของคุณได้ การใช้ requests.get() เปล่า ๆ โดยไม่มี header ที่เหมาะสมจะมีโอกาสสำเร็จแค่ราว เมื่อเจอกับ Amazon
คุณน่าจะเห็นอะไรประมาณนี้: 503 และหน้า block ใน HTML ซึ่งเป็นเรื่องปกติ — เราจะแก้ในขั้นต่อไป
ขั้นที่ 2: ตั้งค่า Custom Headers และปลอม TLS fingerprint
แค่เพิ่ม User-Agent ยังไม่พอแล้วในตอนนี้ Amazon เปรียบเทียบ HTTP headers ของคุณกับ TLS fingerprint ด้วย ถ้าคุณอ้างว่าเป็น Chrome 120 แต่ TLS handshake บอกว่าเป็นไลบรารี requests ของ Python คุณก็จะถูก
วิธีที่เชื่อถือได้ที่สุดในปี 2025 คือใช้ curl_cffi พร้อมการปลอมตัวเป็นเบราว์เซอร์:
1from curl_cffi import requests as cfreq
2headers = {
3 "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
4 "Accept-Language": "en-US,en;q=0.9",
5 "Accept-Encoding": "gzip, deflate, br",
6 "Referer": "https://www.google.com/",
7 "DNT": "1",
8 "Connection": "keep-alive",
9 "Upgrade-Insecure-Requests": "1",
10}
11url = "https://www.amazon.com/dp/B0DGNFM9YJ"
12response = cfreq.get(url, headers=headers, impersonate="chrome124")
13print(response.status_code)
14print(len(response.text))
เมื่อใช้ curl_cffi ปลอมเป็น Chrome 124 อัตราความสำเร็จจะพุ่งขึ้นเป็นประมาณ — ดีขึ้น 47 เท่าเมื่อเทียบกับ requests ล้วน ๆ ตอนนี้คุณควรเห็นสถานะ 200 และ HTML ที่ยาวขึ้นมาก (100,000+ ตัวอักษร)
ถ้ายังเจอ 503 อยู่ ลองเปลี่ยนค่า impersonate เป็นอย่างอื่น เช่น "chrome131" หรือหน่วงเวลาก่อนลองใหม่
ขั้นที่ 3: แยก HTML และดึงข้อมูลสินค้า
ตอนนี้เราได้ HTML ครบแล้ว มาดึงข้อมูลด้วย BeautifulSoup และ selector ที่ตรวจสอบแล้วสำหรับปี 2025:
1from bs4 import BeautifulSoup
2soup = BeautifulSoup(response.text, "lxml")
3# ชื่อสินค้า
4title_el = soup.select_one("span#productTitle")
5title = title_el.get_text(strip=True) if title_el else None
6# ราคา
7price_el = soup.select_one(
8 "div#corePriceDisplay_desktop_feature_div span.a-price .a-offscreen"
9)
10if not price_el:
11 price_el = soup.select_one("span.priceToPay .a-offscreen")
12if not price_el:
13 price_el = soup.select_one(".apexPriceToPay .a-offscreen")
14price = price_el.get_text(strip=True) if price_el else None
15# คะแนนรีวิว
16rating_el = soup.select_one("#acrPopover span.a-icon-alt")
17rating = rating_el.get_text(strip=True) if rating_el else None
18# จำนวนรีวิว
19reviews_el = soup.select_one("span#acrCustomerReviewText")
20reviews = reviews_el.get_text(strip=True) if reviews_el else None
21# ความพร้อมจำหน่าย
22avail_el = soup.select_one("div#availability span")
23availability = avail_el.get_text(strip=True) if avail_el else None
24# URL รูปภาพหลัก
25img_el = soup.select_one("#landingImage")
26image_url = img_el.get("src") if img_el else None
27print(f"Title: {title}")
28print(f"Price: {price}")
29print(f"Rating: {rating}")
30print(f"Reviews: {reviews}")
31print(f"Availability: {availability}")
32print(f"Image: {image_url}")
ผลลัพธ์ตัวอย่างที่คาดหวัง:
1Title: Apple AirPods Pro (2nd Generation) with USB-C
2Price: $189.99
3Rating: 4.7 out of 5 stars
4Reviews: 98,432 ratings
5Availability: In Stock
6Image: https://m.media-amazon.com/images/I/61SUj2...
จะสังเกตว่ามี selector สำรองหลายตัวสำหรับราคา เพราะ Amazon ใช้คอนเทนเนอร์ต่างกันตามประเภทสินค้า สถานะดีล และเวอร์ชัน A/B test การครอบแต่ละขั้นตอนด้วยการเช็กเงื่อนไขช่วยไม่ให้ scraper ของคุณล้มเมื่อ selector ใด selector หนึ่งไม่ตรง
ขั้นที่ 4: ดึงสินค้าหลายรายการจากหน้าผลการค้นหา
ถ้าจะสร้างชุดข้อมูลจริง คุณควรเริ่มจากหน้าผลการค้นหาของ Amazon เก็บ ASIN แล้วค่อย scrape ทีละหน้ารายละเอียดสินค้า
1import time
2import random
3def get_search_asins(keyword, max_pages=1):
4 """Collect ASINs from Amazon search results."""
5 asins = []
6 for page in range(1, max_pages + 1):
7 search_url = f"https://www.amazon.com/s?k={keyword}&page={page}"
8 resp = cfreq.get(search_url, headers=headers, impersonate="chrome124")
9 if resp.status_code != 200:
10 print(f"Search page {page} returned {resp.status_code}")
11 break
12 search_soup = BeautifulSoup(resp.text, "lxml")
13 results = search_soup.select('div[data-component-type="s-search-result"]')
14 for r in results:
15 asin = r.get("data-asin")
16 if asin:
17 asins.append(asin)
18 print(f"Page {page}: found {len(results)} products")
19 time.sleep(random.uniform(2, 5)) # หน่วงอย่างสุภาพ
20 return asins
21asins = get_search_asins("wireless+earbuds", max_pages=2)
22print(f"Collected {len(asins)} ASINs")
ASIN แต่ละตัวเชื่อมไปยัง URL สินค้าแบบชัดเจน: https://www.amazon.com/dp/{ASIN} วิธีนี้เชื่อถือได้กว่าการใช้ URL จากหน้าค้นหาตรง ๆ ซึ่งอาจมีพารามิเตอร์เฉพาะเซสชันปนอยู่
ขั้นที่ 5: จัดการ pagination และ scrape แบบเป็นระบบ
ตอนนี้เรามารวมการเก็บจากหน้าค้นหาและการ scrape หน้า detail เข้าด้วยกันเป็น pipeline แบบเต็ม:
1import pandas as pd
2def scrape_product(asin):
3 """Scrape a single Amazon product detail page."""
4 url = f"https://www.amazon.com/dp/{asin}"
5 try:
6 resp = cfreq.get(url, headers=headers, impersonate="chrome124")
7 if resp.status_code != 200:
8 return None
9 soup = BeautifulSoup(resp.text, "lxml")
10 title_el = soup.select_one("span#productTitle")
11 price_el = (
12 soup.select_one("div#corePriceDisplay_desktop_feature_div span.a-price .a-offscreen")
13 or soup.select_one("span.priceToPay .a-offscreen")
14 or soup.select_one(".apexPriceToPay .a-offscreen")
15 )
16 rating_el = soup.select_one("#acrPopover span.a-icon-alt")
17 reviews_el = soup.select_one("span#acrCustomerReviewText")
18 avail_el = soup.select_one("div#availability span")
19 img_el = soup.select_one("#landingImage")
20 return {
21 "asin": asin,
22 "title": title_el.get_text(strip=True) if title_el else None,
23 "price": price_el.get_text(strip=True) if price_el else None,
24 "rating": rating_el.get_text(strip=True) if rating_el else None,
25 "reviews": reviews_el.get_text(strip=True) if reviews_el else None,
26 "availability": avail_el.get_text(strip=True) if avail_el else None,
27 "image_url": img_el.get("src") if img_el else None,
28 "url": url,
29 }
30 except Exception as e:
31 print(f"Error scraping {asin}: {e}")
32 return None
33# scrape ASIN ที่เก็บมาไว้ทั้งหมด
34products = []
35for i, asin in enumerate(asins):
36 print(f"Scraping {i+1}/{len(asins)}: {asin}")
37 product = scrape_product(asin)
38 if product:
39 products.append(product)
40 time.sleep(random.uniform(2, 5)) # หน่วงแบบสุ่มระหว่าง request
41df = pd.DataFrame(products)
42print(f"\nScraped {len(df)} products successfully")
43print(df.head())
การหน่วงเวลาแบบสุ่ม 2–5 วินาทีสำคัญมาก ถ้ารันด้วยจังหวะเป๊ะ ๆ เช่นทุก 3 วินาทีเท่ากันหมด จะดูน่าสงสัยต่อระบบวิเคราะห์พฤติกรรมของ Amazon การสุ่มช่วงเวลาจะช่วยเลียนแบบพฤติกรรมการใช้งานของคนจริง
ขั้นที่ 6: บันทึกข้อมูล Amazon ที่ scrape เป็น CSV
1df.to_csv("amazon_products.csv", index=False, encoding="utf-8-sig")
2print("Saved to amazon_products.csv")
ตอนนี้คุณจะได้ CSV ที่สะอาดพร้อมคอลัมน์ ASIN, title, price, rating, reviews, availability, image URL และ product URL ซึ่งเป็นจุดที่บทสอนส่วนใหญ่มักหยุด แต่ถ้าคุณกำลังสร้าง workflow จริง ๆ CSV เป็นเพียงจุดเริ่มต้นเท่านั้น
เจาะลึกการป้องกันการถูกบล็อก: ทำให้ scraper วิ่งต่อเนื่องได้อย่างไร
การโดนบล็อกคือ ของคนที่พยายามดึงข้อมูลสินค้า Amazon ด้วย Python ระบบป้องกันหกชั้นของ Amazon ประกอบด้วยการวิเคราะห์ชื่อเสียง IP, TLS fingerprinting, การตรวจสภาพแวดล้อมเบราว์เซอร์, biometric พฤติกรรม, CAPTCHA และการตรวจจับความผิดปกติด้วย ML ด้านล่างคือกลยุทธ์แบบหลายชั้นเพื่อรับมือแต่ละอย่าง
หมุน User-Agent และ headers แบบครบชุด
User-Agent เดิม ๆ ตัวเดียวจะถูกจับได้เร็วมาก ให้สลับกับ list ของ string เบราว์เซอร์ปัจจุบัน:
1import random
2USER_AGENTS = [
3 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36",
4 "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36",
5 "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0",
6 "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0 Safari/605.1.15",
7]
8def get_headers():
9 return {
10 "User-Agent": random.choice(USER_AGENTS),
11 "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
12 "Accept-Language": "en-US,en;q=0.9",
13 "Accept-Encoding": "gzip, deflate, br",
14 "Referer": "https://www.google.com/",
15 "DNT": "1",
16 "Connection": "keep-alive",
17 }
รายละเอียดหนึ่งที่หลายคนพลาดคือ Accept-Language ต้องสอดคล้องกับตำแหน่งทางภูมิศาสตร์ที่ IP ของคุณบ่งชี้อยู่ ถ้าส่ง Accept-Language: en-US จาก IP ในเยอรมนี จะเป็นสัญญาณเตือนทันที
ใช้ curl_cffi เพื่อปลอม TLS fingerprint
เราอธิบายไปแล้วในขั้นที่ 2 แต่ควรย้ำอีกครั้ง: เทคนิคนี้ให้ผลลัพธ์ดีที่สุดเพียงอย่างเดียวเมื่อเทียบกับวิธีอื่น มาตรฐาน Python requests ทำได้ราว 2% กับ Amazon แต่เมื่อใช้ curl_cffi พร้อม impersonation จะขึ้นไปใกล้ 94% นั่นคือความต่างระหว่าง scraper ที่ใช้งานได้จริงกับ scraper ที่พัง
1from curl_cffi import requests as cfreq
2# สลับ target ของการ impersonate ด้วย
3BROWSERS = ["chrome120", "chrome124", "chrome131"]
4response = cfreq.get(
5 url,
6 headers=get_headers(),
7 impersonate=random.choice(BROWSERS),
8)
หมุน proxy
ถ้าจะ scrape มากกว่าสองสามหน้า คุณจะต้องใช้ proxy rotation Amazon ติดตาม IP address และจะบล็อก IP ใดก็ตามที่ส่ง request มากเกินไป
1PROXIES = [
2 "http://user:pass@proxy1.example.com:8080",
3 "http://user:pass@proxy2.example.com:8080",
4 "http://user:pass@proxy3.example.com:8080",
5]
6proxy = random.choice(PROXIES)
7response = cfreq.get(
8 url,
9 headers=get_headers(),
10 impersonate="chrome124",
11 proxies={"http": proxy, "https": proxy},
12)
Proxy แบบ residential มีประสิทธิภาพมากกว่า proxy แบบ datacenter (Amazon มักบล็อกช่วง IP ของ datacenter ล่วงหน้า) แต่ก็แพงกว่าด้วย สำหรับโปรเจกต์เล็ก ๆ คุณอาจเริ่มจาก แล้วค่อยขยายตามความต้องการ
จำกัดอัตราและใช้ exponential backoff
ไม่มีบทความคู่แข่งไหนที่ผม/ฉันเจออธิบายเรื่องนี้ แต่สำคัญมาก เมื่อโดน 503 หรือ CAPTCHA อย่ารีบ retry ทันที เพราะนั่นคือทางด่วนไปสู่การถูกแบนถาวร
1import time
2import random
3def fetch_with_backoff(url, max_retries=3):
4 """Fetch a URL with exponential backoff on failure."""
5 for attempt in range(max_retries):
6 response = cfreq.get(
7 url,
8 headers=get_headers(),
9 impersonate=random.choice(BROWSERS),
10 )
11 if response.status_code == 200:
12 return response
13 # exponential backoff พร้อม jitter
14 wait = min(2 ** attempt + random.uniform(0, 1), 30)
15 print(f"Attempt {attempt+1} failed ({response.status_code}). Waiting {wait:.1f}s...")
16 time.sleep(wait)
17 return None # หมดรอบ retry แล้ว
สูตร wait = min(2^attempt + jitter, max_delay) ทำให้ช่วงเวลารอเพิ่มขึ้นเรื่อย ๆ (2 วิ, 4 วิ, 8 วิ...) แต่ไม่เกินเพดานที่เหมาะสม และ jitter แบบสุ่มช่วยไม่ให้รูปแบบ retry ของคุณถูก fingerprint ได้ง่าย
ใช้ Selenium หรือ Playwright เป็นทางเลือกสำรองสำหรับเนื้อหาที่เรนเดอร์ด้วย JS
บางหน้าของ Amazon โดยเฉพาะหน้าที่มี widget ราคาแบบไดนามิกหรือ selector ตัวเลือกสินค้า จำเป็นต้องรัน JavaScript ให้ครบ เมื่อ curl_cffi ส่ง HTML มาไม่สมบูรณ์ คุณสามารถใช้เบราว์เซอร์แบบ headless เป็นทางเลือกสำรองได้:
1from playwright.sync_api import sync_playwright
2def scrape_with_browser(url):
3 with sync_playwright() as p:
4 browser = p.chromium.launch(headless=True)
5 page = browser.new_page()
6 page.goto(url, wait_until="domcontentloaded")
7 page.wait_for_timeout(3000) # รอให้ JS เรนเดอร์
8 html = page.content()
9 browser.close()
10 return html
วิธีนี้ช้ากว่า — ประมาณ 3–5 วินาทีต่อหน้า เทียบกับไม่ถึง 1 วินาทีเมื่อใช้ curl_cffi ใช้เฉพาะตอนจำเป็นเท่านั้น
จากประสบการณ์ของผม/ฉัน curl_cffi จัดการหน้า product ของ Amazon ได้มากกว่า 90% โดยไม่ต้องเปิด browser
สรุปการป้องกันการถูกบล็อก
| เทคนิค | ความยาก | ประสิทธิภาพ | บทสอนส่วนใหญ่อธิบายไหม? |
|---|---|---|---|
| User-Agent แบบกำหนดเอง | ง่าย | ต่ำ (Amazon ตรวจจับแพทเทิร์นได้) | ใช่ |
| หมุน header ทั้งชุด | ง่าย | ปานกลาง | ไม่ค่อยมี |
| TLS impersonation (curl_cffi) | ปานกลาง | สูง (~94% success) | แทบไม่มี |
| หมุน proxy | ปานกลาง | สูง | พูดถึงสั้น ๆ หรือไม่พูดเลย |
| จำกัดอัตรา + exponential backoff | ง่าย | ปานกลาง | ไม่ |
| ใช้ Selenium/Playwright เป็น fallback | ปานกลาง | สูง (สำหรับเนื้อหา JS) | พูดถึง แต่ไม่สาธิต |
เกินกว่า CSV: ส่งออกข้อมูล Amazon ไป Google Sheets, Airtable และอื่น ๆ
ทุกบทสอนที่ผม/ฉันตรวจดูหยุดแค่การส่งออก CSV แต่ workflow ของธุรกิจจริงต้องการข้อมูลใน Google Sheets, ฐานข้อมูล หรือเครื่องมืออย่าง Airtable และ Notion
ส่งออกไป Google Sheets ด้วย gspread
ก่อนอื่น ตั้งค่า Google service account ก่อน (ทำครั้งเดียว):
- ไปที่ → APIs & Services → Credentials
- สร้าง service account และดาวน์โหลดไฟล์ JSON key
- บันทึกไว้ที่
~/.config/gspread/service_account.json - แชร์สเปรดชีตเป้าหมายให้กับ
client_emailที่อยู่ในไฟล์ JSON
จากนั้น:
1import gspread
2from gspread_dataframe import set_with_dataframe
3gc = gspread.service_account()
4sh = gc.open("Amazon Scrape Data")
5worksheet = sh.sheet1
6set_with_dataframe(worksheet, df)
7print("Data exported to Google Sheets!")
โค้ดนี้จะเขียน DataFrame ทั้งก้อนลง Google Sheet โดยตรง — แบบสด แชร์ได้ และพร้อมเอาไปทำแดชบอร์ดต่อ
เก็บใน SQLite เพื่อวิเคราะห์ภายในเครื่อง
ถ้าชุดข้อมูลใหญ่ขึ้นหรืออยากเก็บประวัติ SQLite เหมาะมาก — ไม่ต้องตั้ง server มีแค่ไฟล์เดียวก็พอ:
1import sqlite3
2conn = sqlite3.connect("amazon_products.db")
3df.to_sql("products", conn, if_exists="append", index=False)
4print(f"Stored {len(df)} products in SQLite")
5# ค่อย query ทีหลัง:
6historical = pd.read_sql_query(
7 "SELECT * FROM products WHERE price IS NOT NULL ORDER BY rowid DESC LIMIT 100",
8 conn,
9)
ทางเลือกแบบไม่ต้องเขียนโค้ด
ถ้าคุณไม่อยากดูแลสคริปต์ export ใน Python เอง มีการ export ฟรีไปยัง Google Sheets, Airtable, Notion, Excel, CSV และ JSON — รวมถึงฟิลด์รูปภาพที่แสดงผลตรงใน Airtable และ Notion ด้วย ไม่ต้องตั้งค่า gspread, ไม่ต้องมี API credentials และไม่ต้องเขียนโค้ดเลย สำหรับทีมที่ต้องการส่งข้อมูลเข้าเครื่องมือเดิม ๆ ที่ใช้อยู่ นี่ช่วยประหยัดเวลาได้มาก
การตั้งเวลา Amazon scraping อัตโนมัติ — บทที่ขาดหายไป
การติดตามราคาและสต็อกต้องอาศัยการ scrape ซ้ำเป็นระยะ ไม่ใช่รันครั้งเดียวจบ แต่ผม/ฉันหาไม่เจอบทความคู่แข่งสักชิ้นที่พูดเรื่องการตั้งเวลาไว้เลย นี่คือวิธีทำให้ scraper Python ของคุณทำงานอัตโนมัติ
Cron Jobs (Linux/macOS)
เปิด crontab ของคุณ:
1crontab -e
เพิ่มบรรทัดนี้เพื่อให้ scraper รันทุกวันเวลา 6 โมงเช้า:
10 6 * * * cd /path/to/amazon-scraper && /path/to/venv/bin/python scraper.py >> ~/scraper.log 2>&1
หรือทุก 6 ชั่วโมง:
10 */6 * * * cd /path/to/amazon-scraper && /path/to/venv/bin/python scraper.py >> ~/scraper.log 2>&1
Windows Task Scheduler
สร้าง batch file ชื่อ run_scraper.bat:
1@echo off
2cd /d "C:\path\to\amazon-scraper"
3call venv\Scripts\activate
4python scraper.py
5deactivate
จากนั้นเปิด Task Scheduler → Create Basic Task → ตั้ง trigger (Daily, Hourly) → Action: "Start a program" → เลือก run_scraper.bat
GitHub Actions (Free Tier)
สำหรับการตั้งเวลาแบบ cloud โดยไม่ต้องมี infrastructure ของตัวเอง:
1name: Amazon Scraper
2on:
3 schedule:
4 - cron: "0 6 * * *" # ทุกวันเวลา 6 AM UTC
5 workflow_dispatch: # สั่งรันเองได้
6jobs:
7 scrape:
8 runs-on: ubuntu-latest
9 steps:
10 - uses: actions/checkout@v3
11 - name: Set up Python
12 uses: actions/setup-python@v4
13 with:
14 python-version: "3.11"
15 - name: Install dependencies
16 run: pip install -r requirements.txt
17 - name: Run scraper
18 run: python scraper.py
19 - name: Commit results
20 run: |
21 git config user.name 'GitHub Actions'
22 git config user.email 'actions@github.com'
23 git add data/
24 git diff --staged --quiet || git commit -m "Update scraped data"
25 git push
เก็บข้อมูล proxy credentials ไว้ใน GitHub Secrets แล้วคุณก็จะมี pipeline scraping อัตโนมัติฟรี ๆ
ทางเลือกแบบไม่ต้องเขียนโค้ด: Scheduled Scraper ของ Thunderbit
สำหรับทีมที่ไม่อยากจัดการ syntax ของ cron หรือ infrastructure บนคลาวด์ Thunderbit มี ในตัว คุณแค่บอกตารางเวลาเป็นภาษาอังกฤษธรรมดา (เช่น "every day at 8 AM" หรือ "every Monday") ใส่ Amazon URLs ของคุณ แล้วกด "Schedule" ได้เลย ไม่ต้องเปิด terminal ไม่ต้องเขียนไฟล์ YAML และไม่ต้องดูแล deployment pipeline เหมาะมากสำหรับทีมอีคอมเมิร์ซที่ต้องติดตามราคาและสต็อกต่อเนื่อง
Python DIY vs. Scraper API vs. No-Code: ควรเลือกแบบไหน?
นี่เป็นคำถามที่ผม/ฉันเห็นในฟอรั่มบ่อยมาก แต่บทความอันดับต้น ๆ กลับไม่ค่อยสรุปแบบเป็นระบบ ดังนั้นนี่คือมุมมองตรงไปตรงมาของผม/ฉัน:
| เกณฑ์ | Python + BS4/curl_cffi | Scraper API (ScraperAPI, Oxylabs) | No-Code (Thunderbit) |
|---|---|---|---|
| เวลาในการเริ่มต้น | 30–60 นาที | 10–20 นาที | ~2 นาที |
| ต้องเขียนโค้ดไหม | ใช่ (Python) | ใช่ (เรียก API) | ไม่ต้อง |
| มี anti-blocking ในตัว | ไม่ (ทำเอง) | มี | มี |
| รองรับ JS rendering | เฉพาะเมื่อใช้ Selenium/Playwright | แตกต่างตามผู้ให้บริการ | ใช่ (Browser หรือ Cloud mode) |
| การตั้งเวลา | ทำเอง (cron/cloud) | บางเจ้ามี | มีในตัว |
| ค่าใช้จ่าย | ฟรี (+ ค่า proxy) | $30–100+/เดือน | มีแผนฟรี |
| การดูแลรักษา | สูง (selector พังบ่อย) | ต่ำ | ไม่มี (AI ปรับตัว) |
| เหมาะสำหรับ | นักพัฒนาที่ต้องการคุมทุกอย่าง | งานสเกลใหญ่ที่ต้องการความเสถียร | คนที่ต้องการความเร็ว, ไม่ใช่นักพัฒนา, ผู้ใช้ธุรกิจ |
Python เหมาะถ้าคุณอยากเรียนรู้ ปรับแต่งทุกอย่างได้เอง และไม่ติดเรื่องการดูแลระยะยาว Scraper API ช่วยจัดการ anti-blocking ให้ แต่ก็ยังต้องเขียนโค้ดอยู่ดี ส่วน Thunderbit เป็นทางลัดที่เร็วที่สุดสำหรับทีมขาย ทีมอีคอมเมิร์ซ หรือใครก็ตามที่แค่อยากได้ข้อมูล — ไม่มี selector, ไม่มีโค้ด, และไม่ต้องมานั่งแก้เมื่อ Amazon เปลี่ยน HTML
Thunderbit ดึงข้อมูลสินค้า Amazon ใน 2 คลิกได้อย่างไร
แน่นอนว่าผม/ฉันมีอคติอยู่บ้าง — เพราะทีมของเราสร้างสิ่งนี้ขึ้นมา แต่ workflow มันง่ายจริง ๆ:
- ติดตั้ง
- ไปยังหน้าผลการค้นหาหรือหน้าสินค้าของ Amazon
- คลิก "AI Suggest Fields" (หรือใช้ template scraper ของ Amazon ที่มีให้ทันที)
- คลิก "Scrape"
AI ของ Thunderbit จะอ่านข้อความบนหน้า ระบุโครงสร้างข้อมูล และดึงทุกอย่างออกมาเป็นตารางที่สะอาด คุณส่งออกไป Excel, Google Sheets, Airtable หรือ Notion ได้ฟรี จุดคุ้มค่าจริง ๆ คือ เมื่อสัปดาห์หน้า Amazon เปลี่ยน HTML อีกครั้ง (ซึ่งจะเกิดแน่นอน) AI ของ Thunderbit จะปรับตัวให้อัตโนมัติ ไม่มีสคริปต์พัง ไม่มีต้องอัปเดต selector
ถ้าคุณต้องการเสริมรายการสินค้าให้มีข้อมูลจากหน้ารายละเอียดสินค้า Thunderbit มีฟีเจอร์ Subpage Scraping ที่จะตามลิงก์ไปยังหน้าสินค้าโดยอัตโนมัติ แล้วดึงฟิลด์เพิ่มเติม เช่น รูปภาพ รายละเอียด และตัวเลือกสินค้า — สิ่งที่ถ้าทำใน Python จะต้องเขียนโค้ดเพิ่มเยอะพอสมควร
เคล็ดลับให้ Python Amazon scraper ใช้งานได้ระยะยาว
ถ้าคุณเลือกทาง Python นี่คือวิธีลดภาระการดูแลรักษา:
- ตรวจ selector เป็นประจำ Amazon เปลี่ยนบ่อยมาก คั่นหน้านี้ไว้เลย — ผม/ฉันจะอัปเดตตาราง selector เมื่อมีการเปลี่ยนแปลง
- ติดตามอัตราความสำเร็จ เก็บสัดส่วนของ response 200 เทียบกับ 503/CAPTCHA ตั้ง alert ไว้แม้แค่ส่งอีเมลเมื่อ success rate ต่ำกว่า 80%
- เก็บ raw HTML ไว้ด้วย บันทึก HTML เต็ม ๆ คู่กับข้อมูลที่ parse แล้ว ถ้า selector เปลี่ยน คุณสามารถ parse ข้อมูลเดิมใหม่ได้โดยไม่ต้อง scrape ซ้ำ
- หมุน proxy และ User-Agent บ่อย ๆ fingerprint แบบคงที่จะถูกจับได้ภายในไม่กี่ชั่วโมงเมื่อสเกลเริ่มสูง
- ใช้ exponential backoff อย่า retry ทันทีหลังโดนบล็อก
- บรรจุเป็น Docker ครอบ scraper ของคุณด้วย Docker container เพื่อการ deploy และพกพาที่ง่ายขึ้น
- เพิ่มการตรวจสอบข้อมูล เช็กว่า price เป็นตัวเลข rating อยู่ระหว่าง 1–5 และ title ไม่ว่าง มีทีมหนึ่งรายงานว่า หลังจากเพิ่มชั้น validation
หรือถ้าทั้งหมดนี้ฟังดูเป็นงานเยอะกว่าที่คุณตั้งใจไว้ ลองพิจารณาว่าเครื่องมือ no-code อย่าง Thunderbit อาจเหมาะกับงานของคุณมากกว่า ไม่มีอะไรน่าอายในการเลือกเส้นทางที่เร็วกว่า — ผม/ฉันใช้เวลาหลายปีไล่แก้ scraper มาแล้ว และรู้ดีว่าบางครั้งโค้ดที่ดีที่สุดคือโค้ดที่คุณไม่ต้องเขียน
ข้อควรพิจารณาด้านกฎหมายและจริยธรรมเมื่อ scrape Amazon
เพราะประเด็นนี้ถูกถามทุกครั้งที่คุยเรื่อง Amazon scraping ขอสรุปภาพกฎหมายแบบสั้น ๆ:
- การ scrape ข้อมูลที่เปิดเผยต่อสาธารณะโดยทั่วไปถือว่าถูกกฎหมายในสหรัฐฯ คำตัดสินสำคัญ (2022) ระบุว่าการเข้าถึงข้อมูลสาธารณะไม่ถือว่าละเมิด CFAA ล่าสุด (2024) และ (2024) ก็ย้ำหลักการเดียวกันนี้
- ข้อกำหนดการใช้งานของ Amazon ห้ามการเข้าถึงแบบอัตโนมัติ เรื่องนี้เป็นประเด็นทางแพ่ง (ผิดสัญญา) ไม่ใช่คดีอาญา โดยศาลมักแยกสองอย่างนี้ออกจากกัน
- Amazon v. Perplexity (2025) เป็นคดีที่กำลังดำเนินอยู่เกี่ยวกับการ scrape หน้า Amazon โดย AI และมีการออกคำสั่งห้ามชั่วคราวในเดือนมีนาคม 2026 ซึ่งน่าติดตาม
- ยึดเฉพาะหน้าสาธารณะ อย่า scrape เนื้อหาที่ต้องล็อกอิน, ข้อมูลส่วนตัว หรือสิ่งใดก็ตามที่อยู่หลังการยืนยันตัวตน
- เคารพ rate limit อย่ายิง request ใส่เซิร์ฟเวอร์ของ Amazon รัวเกินไป การหน่วง 2–5 วินาทีระหว่าง request ถือว่าเหมาะสม
- ใช้ข้อมูลอย่างรับผิดชอบ scrape เพื่อการวิเคราะห์ ไม่ใช่เพื่อเผยแพร่เนื้อหาที่มีลิขสิทธิ์ซ้ำ
- ปรึกษาทนาย หากจะใช้เชิงพาณิชย์ในวงกว้าง โดยเฉพาะถ้าคุณอยู่ใน EU (GDPR มีผลกับข้อมูลส่วนบุคคล)
ถ้าต้องการอ่านเชิงลึกเพิ่มเติม ดูคู่มือของเราเกี่ยวกับ
สรุปท้ายบท
ตอนนี้คุณมี Python Amazon scraper ที่ใช้งานได้จริงพร้อม selector ที่ตรวจสอบแล้วสำหรับปี 2025 มีกลยุทธ์ป้องกันการถูกบล็อกแบบหลายชั้นที่มากกว่าแค่ "เพิ่ม User-Agent" มีตัวเลือกการตั้งเวลาที่ใช้ได้จริงสำหรับการมอนิเตอร์ต่อเนื่อง และมีวิธีส่งออกข้อมูลไปยัง Google Sheets, ฐานข้อมูล หรือเครื่องมือใดก็ตามที่ทีมของคุณใช้อยู่
สรุปสั้น ๆ:
- Python + curl_cffi + BeautifulSoup ให้คุณคุมทุกอย่างได้ และให้ success rate ราว 94% เมื่อใช้ TLS impersonation ร่วมกัน
- การกันบล็อกต้องมีหลายชั้น: หมุน header, TLS impersonation, หมุน proxy, จำกัดอัตรา และ exponential backoff
- การตั้งเวลา เปลี่ยนสคริปต์ครั้งเดียวให้กลายเป็น pipeline เฝ้าติดตามแบบต่อเนื่อง (cron, GitHub Actions หรือ scheduler ใน Thunderbit)
- ส่งออกมากกว่า CSV — Google Sheets, SQLite, Airtable, Notion — นี่แหละคือจุดที่เกิดคุณค่าทางธุรกิจจริง
- Thunderbit เป็นทางเลือกแบบ 2 คลิกสำหรับคนที่ไม่ใช่นักพัฒนา หรือใครก็ตามที่อยากใช้เวลาวิเคราะห์ข้อมูลมากกว่ามานั่งแก้ selector
ถ้าคุณอยากลองโค้ด ทุกอย่างในคู่มือนี้พร้อมคัดลอกแล้วรันได้เลย และถ้าคุณอยากข้ามการเขียนโค้ดไปทั้งหมด ก็ให้คุณลองแนวทางไม่ต้องเขียนโค้ดกับ Amazon ได้ทันที
สำหรับข้อมูลเพิ่มเติม ดูคู่มือของเราเรื่อง , , และ คุณยังสามารถดูวิดีโอสอนทีละขั้นได้ที่
ขอให้ scrape ได้ราบรื่น — และขอให้ selector ของคุณอยู่รอดไปจนถึงอัปเดตถัดไปของ Amazon
คำถามที่พบบ่อย
1. ทำไม Python Amazon scraper ของฉันถึงถูกบล็อกหลังจาก request ไปไม่กี่ครั้ง?
Amazon ใช้ระบบป้องกันหกชั้น: การวิเคราะห์ชื่อเสียง IP, TLS fingerprinting (JA3/JA4), การตรวจสภาพแวดล้อมเบราว์เซอร์, biometric พฤติกรรม, การท้าทาย CAPTCHA และการตรวจจับความผิดปกติด้วย ML สคริปต์ requests พื้นฐานที่มีแค่ User-Agent header ทำได้เพียงประมาณ เท่านั้น คุณต้องมี TLS impersonation (curl_cffi), การหมุน header แบบครบชุด, proxy rotation และ rate limiting พร้อม random jitter เพื่อให้เข้าถึงได้อย่างเสถียร
2. ไลบรารี Python ตัวไหนดีที่สุดสำหรับดึงข้อมูลสินค้า Amazon ในปี 2025?
curl_cffi สำหรับ HTTP requests ที่ปลอม TLS ได้ (ช่วยได้มากที่สุดในจุดเดียว), BeautifulSoup4 คู่กับ lxml สำหรับแยกวิเคราะห์ HTML, pandas สำหรับจัดโครงสร้างและส่งออกข้อมูล และ Selenium หรือ Playwright เป็นตัวสำรองเมื่อเนื้อหาเรนเดอร์ด้วย JavaScript Python ถูกใช้โดย ของนักพัฒนา scraping
3. การ scrape ข้อมูลสินค้า Amazon ถูกกฎหมายไหม?
การ scrape ข้อมูลสาธารณะโดยทั่วไปถูกกฎหมายในสหรัฐฯ โดยมีคำตัดสินอย่าง hiQ v. LinkedIn และ Meta v. Bright Data รองรับอยู่ ข้อกำหนดของ Amazon ห้ามการเข้าถึงแบบอัตโนมัติ แต่ศาลแยกความต่างระหว่างการละเมิด ToS (ทางแพ่ง) กับความผิดอาญาเสมอ หลีกเลี่ยงเนื้อหาที่ต้องล็อกอิน เคารพ rate limit และปรึกษานักกฎหมายหากใช้เชิงพาณิชย์ขนาดใหญ่
4. สามารถ scrape Amazon โดยไม่ต้องเขียนโค้ดได้ไหม?
ได้ เครื่องมืออย่าง ให้คุณ scrape สินค้า Amazon ได้ใน 2 คลิกผ่าน Chrome extension ระบบ AI ที่ตรวจจับฟิลด์จะจัดโครงสร้างข้อมูลให้อัตโนมัติ และคุณส่งออกไป Excel, Google Sheets, Airtable หรือ Notion ได้ฟรี เมื่อ Amazon เปลี่ยน HTML AI ของ Thunderbit ก็จะปรับตัวโดยไม่ต้องอัปเดตเอง
5. Amazon เปลี่ยน HTML selector บ่อยแค่ไหน และจะอัปเดต scraper อย่างไร?
บ่อยมากและไม่แจ้งล่วงหน้า ชุมชน scraping รายงานว่า ของ crawler ต้องแก้ไขทุกสัปดาห์เพราะ DOM เปลี่ยน เพื่อให้ตามทัน ควรติดตาม success rate ของ scraper เก็บ raw HTML ไว้เพื่อ parse ใหม่ และตรวจ selector กับหน้า live เป็นประจำ หรืออีกทางหนึ่ง เครื่องมือที่ใช้ AI อย่าง Thunderbit จะปรับตัวให้อัตโนมัติ ช่วยตัดภาระบำรุงรักษานี้ไปได้
เรียนรู้เพิ่มเติม