วิธี scrape เว็บไซต์ที่ป้องกันด้วย Cloudflare (คู่มือปี 2026)
Cloudflare อยู่หน้าเว็บสาธารณะจำนวนมาก ดังนั้น scraper ที่ทำงานได้กับเว็บไซต์หนึ่งมักจะชนกำแพงกับอีกเว็บไซต์ถัดไป คุณมักสังเกตเห็นเรื่องนี้จาก HTTP 403 หรือ 503 หน้า interstitial "Just a moment..." หรือ checkbox ของ Turnstile บนหน้า คู่มือนี้อธิบายว่า Cloudflare ตรวจสอบอะไร วิธีแก้ที่ได้ผลโดยไม่แตะสิ่งที่คุณไม่ควรแตะ และ solve captcha เข้ามาเกี่ยวข้องตรงไหน คำตอบสั้น ๆ คือ ตรวจว่าคุณได้รับอนุญาตให้ scrape เว็บไซต์นั้นหรือไม่ ชะลอ ส่ง request ที่ดูเหมือน client ปกติ ใช้เบราว์เซอร์จริงเมื่อหน้าต้องการ JavaScript และค่อยจัดการ captcha หลังจากนั้น Turnstile เป็น captcha ที่ Cloudflare ใช้บ่อยที่สุด การรองรับ Turnstile ของ Scarnox กำลังจะมาเร็ว ๆ นี้ captcha ที่ใช้งานได้จริงในวันนี้คือ PopularCaptcha
Cloudflare ตรวจสอบอะไร
Cloudflare ให้คะแนนทุก request ด้วยสัญญาณหลายอย่าง:
- ชื่อเสียงของ IP address จากศูนย์ข้อมูลคลาวด์เริ่มด้วยคะแนนที่ต่ำกว่า address จากการเชื่อมต่อที่บ้าน
- อัตราและรูปแบบของ request ร้อย request ต่อวินาทีจาก address เดียวดูเหมือนบอท ไม่ว่า header จะเป็นอย่างไร
- Header และ TLS fingerprint HTTP library เปล่า ๆ มักส่ง header ลำดับ header และ TLS handshake ที่เบราว์เซอร์หลักไม่ส่ง
- การรัน JavaScript หน้าความท้าทายรันสคริปต์และตรวจว่ามีสภาพแวดล้อมเบราว์เซอร์จริงอยู่
- Cookie หลังจากผ่านความท้าทาย Cloudflare ออก clearance cookie ที่ผูกกับ session นั้น
คะแนนสูงจะผ่านโดยไม่มีใครเห็น คะแนนปานกลางจะได้ความท้าทายแบบโต้ตอบ คะแนนต่ำจะถูกบล็อก งานส่วนใหญ่คือการทำให้คะแนนของคุณสูงขึ้นด้วยการประพฤติตัวเป็น client ที่ดี ไม่ใช่การต่อสู้กับการตรวจสอบ
ขั้นตอนที่ 1: ตรวจว่าคุณควร scrape เว็บไซต์นี้หรือไม่
ก่อนทำงานทางเทคนิคใด ๆ ให้อ่าน robots.txt และข้อกำหนดการให้บริการของเว็บไซต์ การบล็อกมักเป็นเจ้าของบอกอะไรบางอย่างกับคุณ การ scrape หน้าสาธารณะอย่างช้า ๆ และเพื่อวัตถุประสงค์ที่ชัดเจนเป็นเรื่องหนึ่ง การฝ่าการบล็อกเพื่อเข้าถึงข้อมูลที่เจ้าของจำกัดไว้เป็นอีกเรื่องหนึ่ง ซึ่งเป็นการใช้งานที่ Scarnox ไม่รองรับ ภาพรวมทางกฎหมาย ครอบคลุมคำถามทั่วไป
ขั้นตอนที่ 2: ทำให้คำขอพื้นฐานถูกต้อง
scraper จำนวนมากที่ดูเหมือนถูกบล็อกจริง ๆ แล้วกำลังส่ง request ที่ไม่ดี แก้เหล่านี้ก่อน:
- ส่ง User-Agent ที่ทันสมัยและ header ที่เบราว์เซอร์จะส่ง เช่น
AcceptและAccept-Language - ใช้ session object เดียวเพื่อให้ cookie คงอยู่ระหว่าง request เหมือนเบราว์เซอร์
- เพิ่มการหน่วงเวลาระหว่าง request พร้อม jitter แบบสุ่มเล็กน้อย
- ถอยออกเมื่อได้รับการตอบกลับ
429และ503แทนการ retry ในลูปที่แน่นหนา
import random
import time
import requests
session = requests.Session()
session.headers.update({
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/124.0 Safari/537.36",
"Accept-Language": "en-US,en;q=0.9",
})
def polite_get(url: str, attempts: int = 4) -> requests.Response:
r = None
for attempt in range(attempts):
r = session.get(url, timeout=30)
if r.status_code not in (429, 503):
return r
# Exponential backoff พร้อม jitter: ประมาณ 1, 2, 4 วินาทีบวกสัญญาณรบกวนเล็กน้อย
time.sleep(2 ** attempt + random.uniform(0, 1))
return r
หากวิธีนี้ทำให้คุณผ่านได้ ก็เสร็จแล้ว ให้คงการหน่วงเวลาไว้
ขั้นตอนที่ 3: ระบุว่าคุณกำลังเจอความท้าทายแบบไหน
การตอบกลับบอกคุณได้มาก:
- หน้า "Just a moment..." นี่คือความท้าทาย JavaScript เบราว์เซอร์จริงมักผ่านได้เองหลังจากไม่กี่วินาที จากนั้น clearance cookie สามารถนำกลับมาใช้กับ request ถัดไปใน session เดียวกันได้
- Turnstile widget บนฟอร์มหรือหน้า นี่คือ captcha ต้องมี token จาก widget ก่อนที่ฟอร์มจะยอมรับการส่ง
- หน้าบล็อกพร้อมรหัส error address หรือ request ถูกปฏิเสธโดยตรง การเปลี่ยนจังหวะและแก้ request มักช่วยมากกว่าสิ่งอื่นใด การ solve ไม่ทำให้การบล็อกแบบแข็งกลายเป็นข้อมูล
การตรวจว่าคุณเห็นแบบไหนช่วยประหยัดความพยายามที่สูญเปล่าได้มาก
ขั้นตอนที่ 4: ใช้เบราว์เซอร์จริงเมื่อหน้าต้องการ
หากหน้าแสดงเนื้อหาหลังจาก JavaScript ทำงาน HTTP client ธรรมดาจะไม่เห็นเนื้อหานั้นเลย ให้ควบคุมเบราว์เซอร์เต็มรูปแบบด้วย Playwright หรือ Selenium แทน headless browser ตรวจจับได้ ดังนั้นให้อ่าน การตรวจจับ headless browser ก่อนพึ่งพามัน และตั้งค่าให้ตรงกับสภาพแวดล้อมที่ผู้เข้าชมจริงจะใช้ คู่มือ JavaScript แสดงตัวอย่างที่สมบูรณ์
ขั้นตอนที่ 5: ดูชื่อเสียงของ IP ของคุณ
address ของศูนย์ข้อมูลคลาวด์เป็นสาเหตุที่พบบ่อยที่สุดที่ request ที่สะอาดได้คะแนนต่ำ address แบบ residential มักได้คะแนนดีกว่า แต่มีต้นทุนด้านความเร็วและเงินที่สูงกว่า การแลกเปลี่ยนนี้อธิบายไว้ใน residential vs datacenter proxies
การหมุนก็มีกับดักของตัวเอง การเปลี่ยน address ทุก request ดูไม่เป็นธรรมชาติ เพราะผู้เข้าชมจริงใช้ address เดียวตลอดการเยี่ยมชม sticky session ซึ่งเก็บ address ไว้สำหรับชุด request ที่เกี่ยวข้องกัน มักทำงานได้ดีกว่าการหมุนอย่างรวดเร็ว Rotating proxies สำหรับ scraping อธิบายรายละเอียด
ขั้นตอนที่ 6: การ solve captcha เข้ามาเกี่ยวข้องตรงไหน
บางครั้ง widget ปรากฏขึ้นจริง บนฟอร์มที่คุณกำลังทดสอบหรือหน้าที่คุณได้รับอนุญาตให้ automate Turnstile token จึงเป็นขั้นตอนที่จำเป็นใน flow นั้น การรองรับ Turnstile ของ Scarnox กำลังจะมาเร็ว ๆ นี้ ดังนั้นอย่าสร้างโค้ดโปรดักชันบนมันในตอนนี้ captcha ที่ใช้งานได้จริงวันนี้คือ PopularCaptcha ซึ่งใช้ widget อีกแบบ
workflow ทั่วไปสำหรับ token-based captcha ใด ๆ เหมือนกัน คุณอ่าน sitekey จากหน้า ขอ token และวาง token ลงในฟิลด์ฟอร์มที่เว็บไซต์คาดหวัง token มีอายุสั้น ดังนั้นส่งทันที คู่มือ PopularCaptcha ด้วย Python แสดง workflow นั้นครบทั้งกระบวนการ และ ประเภทของ captcha ที่ควรรู้ เปรียบเทียบ widget ที่คุณจะพบ
หากคุณต้องการพร้อมเมื่อการรองรับ Turnstile เปิดให้ใช้งาน คุณเริ่มทดลองใช้ฟรีได้ตอนนี้ เริ่มต้นด้วยเครดิตทดลองใช้ฟรี ไม่ต้องใช้บัตรเครดิต: สร้างบัญชี สำหรับอัตราปัจจุบันของ captcha ประเภทที่ใช้งานได้จริง ดูที่ หน้าราคา
Scrape อย่างมีความรับผิดชอบ
- อ่าน
robots.txtและเคารพข้อกำหนดการใช้งานของเว็บไซต์ที่คุณ scrape - จำกัดอัตรา crawler ของคุณ และรันในช่วงนอกเวลาเร่งด่วนหากทำได้
- แคชการตอบกลับ เพื่อไม่ให้ดึงหน้าเดิมซ้ำโดยไม่จำเป็น
- หลีกเลี่ยงการเก็บข้อมูลส่วนบุคคล เว้นแต่คุณจะมีฐานทางกฎหมายสำหรับเรื่องนั้น
- หากเว็บไซต์จำกัดการเข้าถึง ให้หยุด อย่าพยายามเลี่ยงข้อจำกัดนั้น