Google scrape करने के लिए सबसे कठिन मुख्यधारा target है, और इसकी वजह सीधी है: यह किसी से भी ज़्यादा traffic देखता है, इसलिए इसके पास इसका सबसे समृद्ध मॉडल है कि एक असली searcher कैसा दिखता है। इसे किसी भी मात्रा में datacenter IP से hit करें और आपको 429, एक "sorry/index" page, या एक soft block मिलता है जहाँ results चुपचाप पतले होते जाते हैं। यह गाइड बताती है कि असल में Google के blocks को क्या trigger करता है और वह proxy तथा rate-limit रणनीति जो 2026 में एक SERP scraper को ज़िंदा रखती है।
Google किसी एक संकेत पर निर्भर नहीं रहता — यह कई को ढेर लगाता है और तब ban करता है जब संयुक्त score एक रेखा पार कर जाता है:
ज़्यादातर targets के लिए आप सार्वजनिक डेटा पर datacenter IPs से काम चला सकते हैं। Google अपवाद है: इसका ASN प्रतिष्ठा scoring इतना आक्रामक है कि datacenter proxies लगभग तुरंत throttle हो जाते हैं। Residential exits — असली उपभोक्ता ASNs — वही हैं जो एक SERP scraper को volume बनाए रखने देते हैं। datacenter को बाकी सब चीज़ों के लिए सुरक्षित रखें और residential बजट वहाँ खर्च करें जहाँ यह वाकई असर करता है।
Rotation भार को फैला देता है ताकि कोई एक IP bot जैसा न दिखे, पर जो अनुशासन आपको ज़िंदा रखता है वह है प्रति-exit दर, न कि सिर्फ़ pool का आकार। एक हज़ार proxies भी ban हो जाते हैं अगर आप उन सबको पूरी रफ़्तार से चलाएँ। हर 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) खुद एक fingerprint है। इसे बदलें, और queries को exits के बीच फैलाएँ ताकि हर एक Google की प्रति-IP सीमा से नीचे रहे।
स्थानीयकृत results (rankings, भाषा, मुद्रा) exit की location पर निर्भर करते हैं, इसलिए उस भूगोल में proxies चुनें जिसे आप मापना चाहते हैं और एक multi-page query के लिए एक sticky session थामे रखें ताकि एक search के सभी pages एक ही जगह से आएँ। query के बीच में exits मिलाने से आपको अलग-अलग locales से जोड़े गए results मिलते हैं — rank tracking के लिए बेकार।
Google आपके TLS handshake को भी पढ़ता है। एक सादा requests call एक ऐसा JA3 भेजता है जो चीख-चीखकर Python बताता है, जो IP score को और बढ़ा देता है। curl_cffi (ऊपर इस्तेमाल किया गया) या एक असली browser के साथ एक असली browser fingerprint भेजें — देखें Bypass TLS Fingerprinting with curl_cffi। अगर Google एक JS consent wall पर gating शुरू कर दे, तो एक असली browser engine पर बढ़ें जैसा Turnstile गाइड में बताया गया है — वही "JS runtime चाहिए" तर्क लागू होता है।
/sorry/ — उस exit को hit करना बंद करें, rotate करें, और तेज़ी से (exponentially) पीछे हटें। एक flagged IP को पीटना ban को बढ़ाता है।/sorry/ पर लंबे ban में फिर से कोशिश करने के बजाय ज़ोर से पीछे हटें।नए यूज़र्स को साइन अप पर 500MB मिलते हैं, साथ ही पहली रिचार्ज पर बोनस। सीमित समय की पेशकश।