การ scrape ผลการค้นหา Google ด้วย proxy (SERP, 2026)

เผยแพร่เมื่อ 12 มิถุนายน 2026 · อ่าน ≈9 นาที

Google คือเป้าหมายกระแสหลักที่ scrape ยากที่สุด และเหตุผลก็เรียบง่าย: มันเห็น traffic มากกว่าใคร ดังนั้นมันจึงมีโมเดลที่สมบูรณ์ที่สุดว่าผู้ค้นหาตัวจริงมีหน้าตาอย่างไร ยิงมันจาก IP ดาต้าเซ็นเตอร์ที่ปริมาณใด ๆ แล้วคุณจะได้ 429 หน้า "sorry/index" หรือ soft block ที่ผลลัพธ์ค่อย ๆ บางลงอย่างเงียบ ๆ คู่มือนี้ครอบคลุมสิ่งที่กระตุ้นการบล็อกของ Google จริง ๆ และกลยุทธ์ proxy กับ rate-limit ที่ทำให้ SERP scraper อยู่รอดในปี 2026

อะไรกระตุ้นการบล็อกของ Google

Google ไม่พึ่งสัญญาณเดียว — มันซ้อนหลายสัญญาณและแบนเมื่อคะแนนรวมข้ามเส้น:

Residential ต่อรองไม่ได้ตรงนี้

สำหรับเป้าหมายส่วนใหญ่ คุณรอดได้ด้วย IP ดาต้าเซ็นเตอร์บนข้อมูลสาธารณะ Google คือข้อยกเว้น: การให้คะแนนชื่อเสียง ASN ของมันก้าวร้าวพอที่ datacenter proxy จะถูก throttle แทบจะทันที Exit residential — ASN ของผู้บริโภคจริง ๆ — คือสิ่งที่ทำให้ SERP scraper ทำปริมาณได้ต่อเนื่อง สำรอง datacenter ไว้สำหรับทุกอย่างที่เหลือ และใช้งบ residential ในที่ที่มันสร้างความแตกต่างจริง ๆ

หมุนเปลี่ยน แต่จำกัดอัตราต่อ Exit

การหมุนเปลี่ยนกระจายภาระเพื่อไม่ให้ IP เดียวดูเหมือนบอท แต่วินัยที่ทำให้คุณอยู่รอดคืออัตราต่อ exit ไม่ใช่แค่ขนาดพูล proxy พันตัวก็ยังถูกแบนหากคุณยิงทั้งหมดเต็มที่ ให้กำหนดจังหวะแต่ละ exit เหมือนคน:

import time, random, itertools
from curl_cffi import requests   # browser TLS fingerprint, see notes below

PROXIES = [
    "socks5h://USERNAME:[email protected]:913",
    "socks5h://USERNAME:[email protected]:913",
]
pool = itertools.cycle(PROXIES)

def serp(query, page=0):
    proxy = next(pool)
    params = {"q": query, "start": page * 10, "hl": "en"}
    r = requests.get("https://www.google.com/search", params=params,
                     impersonate="chrome",
                     proxies={"http": proxy, "https": proxy}, timeout=30)
    if r.status_code == 429 or "/sorry/" in r.url:
        raise RuntimeError("rate-limited - back off and rotate")
    return r.text

for q in queries:
    html = serp(q)
    parse(html)
    time.sleep(random.uniform(2.0, 5.0))   # human-paced gap between queries

การหน่วงเวลาแบบสุ่มกำลังทำงานจริง: sleep(3) แบบตายตัวก็คือลายนิ้วมือในตัวมันเอง ให้แปรเปลี่ยนมัน และกระจาย query ข้าม exit เพื่อให้แต่ละตัวอยู่ใต้เกณฑ์ต่อ IP ของ Google

เซสชัน Sticky และตำแหน่งทางภูมิศาสตร์

ผลลัพธ์ที่ถูกปรับให้เป็นท้องถิ่น (อันดับ ภาษา สกุลเงิน) ขึ้นอยู่กับตำแหน่งของ exit ดังนั้นให้เลือก proxy ในภูมิศาสตร์ที่คุณต้องการวัด และคงเซสชัน stickyไว้สำหรับ query หลายหน้า เพื่อให้ทุกหน้าของการค้นหาหนึ่งครั้งมาจากที่เดียวกัน การผสม exit กลางคันทำให้คุณได้ผลลัพธ์ที่เย็บมาจากหลายโลแคล — ไร้ประโยชน์สำหรับการติดตามอันดับ

อย่าลืมเรื่องลายนิ้วมือ

Google อ่านการจับมือ TLS ของคุณด้วย การเรียก requests ธรรมดาส่ง JA3 ที่ตะโกนว่า Python ซึ่งซ้ำเติมคะแนน IP ส่งลายนิ้วมือเบราว์เซอร์จริงด้วย curl_cffi (ใช้ด้านบน) หรือเบราว์เซอร์จริง — ดูBypass TLS Fingerprinting ด้วย curl_cffi หาก Google เริ่มกั้นด้วยกำแพง consent ของ JS ให้ยกระดับไปใช้เอนจินเบราว์เซอร์จริงตามที่ครอบคลุมในคู่มือ Turnstile — ตรรกะ "ต้องการ JS runtime" เดียวกันใช้ได้

จัดการการบล็อกอย่างนุ่มนวล

เช็กลิสต์

สำหรับผลิตภัณฑ์ IP ทุกประเภท · พูลโหนดขนาดมหึมาพร้อมใช้งานได้ทุกเมื่อ

สมัครสมาชิกตอนนี้และรับเงินคืนการเติมเงินสูงสุด 100%

ผู้ใช้ใหม่รับ 500MB เมื่อสมัครสมาชิก พร้อมโบนัสในการเติมเงินครั้งแรก ข้อเสนอมีระยะเวลาจำกัด