Google کے سرچ نتائج (SERP) کو proxies کے ساتھ scrape کرنا (2026)

شائع کردہ 12 جون 2026 · ≈9 منٹ کا مطالعہ

Google scrape کرنے کے لیے سب سے مشکل مرکزی دھارے کا ہدف ہے، اور وجہ سادہ ہے: یہ کسی بھی دوسرے سے زیادہ ٹریفک دیکھتا ہے، اس لیے اس کے پاس اس بات کا سب سے بھرپور ماڈل ہے کہ ایک حقیقی سرچ کرنے والا کیسا دکھتا ہے۔ کسی بھی والیوم پر datacenter IP سے اسے ہٹ کریں اور آپ کو 429، ایک "sorry/index" صفحہ، یا ایک soft block ملتا ہے جہاں نتائج خاموشی سے کم ہوتے جاتے ہیں۔ یہ گائیڈ اس بات کا احاطہ کرتی ہے کہ Google کے بلاکس کو دراصل کیا متحرک کرتا ہے اور وہ proxy اور rate-limit حکمت عملی جو 2026 میں ایک SERP scraper کو زندہ رکھتی ہے۔

Google بلاک کو کیا متحرک کرتا ہے

Google کسی ایک سگنل پر انحصار نہیں کرتا — یہ کئی کو جمع کرتا ہے اور جب مشترکہ اسکور ایک حد عبور کرتا ہے تو بین کر دیتا ہے:

یہاں residential ناقابلِ مذاکرہ ہے

زیادہ تر اہداف کے لیے آپ عوامی ڈیٹا پر datacenter IPs کے ساتھ کام چلا سکتے ہیں۔ Google استثنا ہے: اس کا ASN ساکھ اسکورنگ اتنا جارحانہ ہے کہ datacenter proxies تقریباً فوراً سست کر دیے جاتے ہیں۔ residential exits — حقیقی صارفین کے ASNs — وہ ہیں جو ایک SERP scraper کو والیوم برقرار رکھنے دیتے ہیں۔ datacenter کو باقی ہر چیز کے لیے محفوظ رکھیں اور residential بجٹ وہاں خرچ کریں جہاں یہ واقعی فرق ڈالتا ہے۔

Rotate کریں، لیکن فی exit rate-limit کریں

Rotation لوڈ کو پھیلاتا ہے تاکہ کوئی ایک IP bot جیسا نہ لگے، لیکن جو نظم آپ کو زندہ رکھتا ہے وہ فی exit شرح ہے، نہ کہ صرف pool کا سائز۔ ایک ہزار proxies بھی بین ہو جاتے ہیں اگر آپ ان سب کو ایک ساتھ پوری رفتار سے چلائیں۔ ہر 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) خود ایک فنگرپرنٹ ہے۔ اسے تبدیل کریں، اور queries کو exits میں پھیلائیں تاکہ ہر ایک Google کی فی IP حد سے نیچے رہے۔

Sticky sessions اور جیولوکیشن

مقامی نتائج (rankings، زبان، کرنسی) exit کے مقام پر منحصر ہوتے ہیں، لہٰذا اس جغرافیے میں proxies منتخب کریں جسے آپ ناپنا چاہتے ہیں اور ایک کثیر صفحہ query کے لیے ایک sticky session برقرار رکھیں تاکہ ایک سرچ کے تمام صفحات ایک ہی جگہ سے آئیں۔ query کے درمیان exits کو ملانا آپ کو مختلف locales سے جوڑے گئے نتائج دیتا ہے — rank tracking کے لیے بے کار۔

فنگرپرنٹ کو نہ بھولیں

Google آپ کے TLS handshake کو بھی پڑھتا ہے۔ ایک سادہ requests کال ایک JA3 بھیجتی ہے جو Python کی چیخ ہے، جو IP اسکور میں اضافہ کرتی ہے۔ ایک حقیقی براؤزر فنگرپرنٹ curl_cffi (اوپر استعمال کیا گیا) یا ایک حقیقی براؤزر کے ساتھ بھیجیں — دیکھیں Bypass TLS Fingerprinting with curl_cffi۔ اگر Google ایک JS consent wall پر gating شروع کر دے، تو ایک حقیقی براؤزر انجن تک بڑھیں جیسا کہ Turnstile گائیڈ میں شامل ہے — وہی "JS runtime درکار ہے" منطق لاگو ہوتی ہے۔

بلاک کو خوش اسلوبی سے سنبھالیں

چیک لسٹ

تمام IP پروڈکٹس کے لیے · ہر وقت دستیاب نوڈز کا وسیع پول

ابھی رجسٹر کریں اور ری چارج پر 100% تک کیش بیک حاصل کریں

نئے صارفین کو سائن اپ پر 500MB ملتے ہیں، اس کے علاوہ پہلے ری چارج پر بونس۔ پیشکش محدود وقت کے لیے ہے۔