Google scrape کرنے کے لیے سب سے مشکل مرکزی دھارے کا ہدف ہے، اور وجہ سادہ ہے: یہ کسی بھی دوسرے سے زیادہ ٹریفک دیکھتا ہے، اس لیے اس کے پاس اس بات کا سب سے بھرپور ماڈل ہے کہ ایک حقیقی سرچ کرنے والا کیسا دکھتا ہے۔ کسی بھی والیوم پر datacenter IP سے اسے ہٹ کریں اور آپ کو 429، ایک "sorry/index" صفحہ، یا ایک soft block ملتا ہے جہاں نتائج خاموشی سے کم ہوتے جاتے ہیں۔ یہ گائیڈ اس بات کا احاطہ کرتی ہے کہ Google کے بلاکس کو دراصل کیا متحرک کرتا ہے اور وہ proxy اور rate-limit حکمت عملی جو 2026 میں ایک SERP scraper کو زندہ رکھتی ہے۔
Google کسی ایک سگنل پر انحصار نہیں کرتا — یہ کئی کو جمع کرتا ہے اور جب مشترکہ اسکور ایک حد عبور کرتا ہے تو بین کر دیتا ہے:
زیادہ تر اہداف کے لیے آپ عوامی ڈیٹا پر datacenter IPs کے ساتھ کام چلا سکتے ہیں۔ Google استثنا ہے: اس کا ASN ساکھ اسکورنگ اتنا جارحانہ ہے کہ datacenter proxies تقریباً فوراً سست کر دیے جاتے ہیں۔ residential exits — حقیقی صارفین کے ASNs — وہ ہیں جو ایک SERP scraper کو والیوم برقرار رکھنے دیتے ہیں۔ datacenter کو باقی ہر چیز کے لیے محفوظ رکھیں اور residential بجٹ وہاں خرچ کریں جہاں یہ واقعی فرق ڈالتا ہے۔
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 حد سے نیچے رہے۔
مقامی نتائج (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 درکار ہے" منطق لاگو ہوتی ہے۔
/sorry/ — اس exit کو ہٹ کرنا بند کریں، rotate کریں، اور exponential طور پر back off کریں۔ فلیگ شدہ IP کو ہتھوڑے سے مارنا بین کو بڑھاتا ہے۔/sorry/ پر سختی سے back off کریں۔نئے صارفین کو سائن اپ پر 500MB ملتے ہیں، اس کے علاوہ پہلے ری چارج پر بونس۔ پیشکش محدود وقت کے لیے ہے۔