Proxies के साथ Google search results (SERP) का scraping (2026)

12 जून 2026 को प्रकाशित · ≈9 मिनट पढ़ें

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 block को क्या Trigger करता है

Google किसी एक संकेत पर निर्भर नहीं रहता — यह कई को ढेर लगाता है और तब ban करता है जब संयुक्त score एक रेखा पार कर जाता है:

यहाँ Residential अनिवार्य है

ज़्यादातर targets के लिए आप सार्वजनिक डेटा पर datacenter IPs से काम चला सकते हैं। Google अपवाद है: इसका ASN प्रतिष्ठा scoring इतना आक्रामक है कि datacenter proxies लगभग तुरंत throttle हो जाते हैं। Residential exits — असली उपभोक्ता ASNs — वही हैं जो एक SERP scraper को volume बनाए रखने देते हैं। datacenter को बाकी सब चीज़ों के लिए सुरक्षित रखें और residential बजट वहाँ खर्च करें जहाँ यह वाकई असर करता है।

Rotate करें, पर प्रति Exit Rate-Limit करें

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 सीमा से नीचे रहे।

Sticky Sessions और Geolocation

स्थानीयकृत results (rankings, भाषा, मुद्रा) exit की location पर निर्भर करते हैं, इसलिए उस भूगोल में proxies चुनें जिसे आप मापना चाहते हैं और एक multi-page query के लिए एक sticky session थामे रखें ताकि एक search के सभी pages एक ही जगह से आएँ। query के बीच में exits मिलाने से आपको अलग-अलग locales से जोड़े गए results मिलते हैं — rank tracking के लिए बेकार।

Fingerprint मत भूलें

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 चाहिए" तर्क लागू होता है।

Block को शालीनता से संभालें

चेकलिस्ट

सभी IP प्रोडक्ट्स के लिए · किसी भी समय उपलब्ध नोड्स का विशाल पूल

अभी साइन अप करें और अपने रिचार्ज पर 100% तक का रिबेट पाएं

नए यूज़र्स को साइन अप पर 500MB मिलते हैं, साथ ही पहली रिचार्ज पर बोनस। सीमित समय की पेशकश।