SERP Scraping Sırasında Google Engellerinden Nasıl Kaçınılır

Google'ın SERP hurdalarını nasıl algıladığını ve konut proxyları, gerçekçi başlıklar, rastgeleleştirilmiş zamanlama ve kod örnekleri ile yeniden deneme stratejilerinden nasıl kaçınılacağını öğrenin.

SERP Scraping Sırasında Google Engellerinden Nasıl Kaçınılır

Google, SERP Kaçırıcılarını Nasıl Tespit Ediyor

Google arama sonuçlarını otomatik erişimden korumak için ağır yatırım yapar. Bloklardan kaçınmadan önce, Google'ın kullandığı algılama yöntemlerini anlamanız gerekir. Her yöntem farklı bir sinyale işaret eder ve etkili bir SERP scraping, tüm bunları aynı anda ele almak gerektirir.

Referanslarla dolu bir genel bakış için, dikkatimizi gör SERP puting with agents guide.

IP-Based Tespit

İlk savunma hattı IP analizidir. Google, IP adresi ve bayrakları için sorgu hacmini normal insan arama modellerini aşıyor. Özel işaretler içerir:

  • İstek frekansı: Tek bir IP tetiklerinden dakika başına birkaç aramadan daha fazla bir arama oranı sınırlamak
  • IP itibarı: Bilinen datacenter IP aralıkları hemen scrutiny alıyor
  • Coğrafi tutarsızlık: Almanya'dan bir IP İngilizce ABD destekli sorgular bayrakları yükseltti
  • ASN analizi: Google, sağlayıcıları barındırmaya ait IP bloklarını tanır

Tarayıcı Parmak

IP adreslerinin ötesinde, Google, isteğin kendisini otomasyon belirtileri için inceler:

Tarayıcı Parmak
Signal SignalGoogle ne kontrol ediyorRed Flag
Kullanıcı-AgentTarayıcı ve OS kimlik dizeleriEksik, eski, ya da diğer başlıklarla tutarsız
Başlıkları Kabul Ediyorİçerik türü tercihleriEksik Kabul - Dil veya standart olmayan kabul değerleri
TLS parmak iziSSL/TLS elhake özellikleriParmak eşleştirme bilinen HTTP kütüphaneleri (requests, urllib)
JavaScript execution JavaScript execution JavaScript executionMüşteri adım senaryo davranışıHiçbir JavaScript infazı (önsüz algılama)
Çerez davranışlarıÇerez kabul ve yönetimHiçbir kurabiye veya aynı kurabiye kalıpları ile istekler

Bu tekniklere daha derin bir bakış için makalemizi okuyun Anti-bot sistemlerinin nasıl algılandığını nasıl algılar.

Davranış Analizi

Google, otomasyonu tespit etmek için isteklerdeki kalıpları analiz eder:

  • İstek zamanlaması: İstekler arasında mükemmel bir şekilde tutarlı aralıklarla (örneğin, tam olarak 3 saniye ayrı) doğal olmayan aralıklarla
  • Sorgu modelleri: Anahtar kelimeler alfabetik veya öngörülebilir diziler otomatik olarak görünüyor
  • Oturum davranışı: Gerçek kullanıcılar birden çok sayfayı göz önünde bulunduruyor, sonuçlar tıklayın ve zaman okumayı harcayın - sadece SERPs getiriyor
  • Cilt kalıpları: İlgili IP'lerden sorgu hacmindeki sudden çatlaklar, koordineli kazılar öneriyor

Anti-Block Stratejisinin Üç Katmanı

Google bloklarından kaçınmak bir tabakalı yaklaşım gerektirir. Tek bir teknik kendi başına yeterli değildir.

Katman 1: Proxy Altyapısı

Seçiminiz, anti-block stratejinizin temelidir. ProxyHat konut proxy Sürekli SERP hurdalığı için gerekli IP çeşitliliği ve güven seviyesi sağlar.

Katman 2: Kurulum

Her HTTP isteği gerçek bir tarayıcıdan geliyor gibi görünmelidir. Headers, kurabiye ve zamanlama her şeyin gerçekçi olması gerekir.

Katman 3: Davranışlı Desenler

Yıkıcı aktivitenizin genel modeli doğal arama davranışını taklit etmelidir. Bu, rastgeleleştirilmiş gecikmeler, çeşitli sorgu dizileri ve uygun istek hacimleri anlamına gelir.

Konut Proxies: İlk Savunmanız

Yapabileceğiniz en etkili tek değişiklik, datacenter'dan veri merkezine geçmektir Konut sahipleriİşte konut IP'lerinin Google'ın bakış açısından temel olarak farklı olmasının nedeni:

  • Konut IP'leri gerçek ISS'lere aittir (Comcast, AT&T, BT, Deutsche Telekom), bulut sağlayıcıları değil
  • Google, meşru kullanıcıları engellemeden konut IP aralıklarını engelleyebilir
  • Her IP'nin gerçek kullanıcı tarafından inşa edilmiş bir tarama geçmişi ve itibarı vardır
  • Konut IPs, şehir seviyesindeki geo-targeting'i lokasyona göre destekliyor

SERP için Proxy Constructing

import requests
# ProxyHat residential proxy with automatic rotation
PROXY_URL = "http://USERNAME:PASSWORD@gate.proxyhat.com:8080"
session = requests.Session()
session.proxies = {
    "http": PROXY_URL,
    "https": PROXY_URL,
}
# Each request automatically gets a new residential IP
response = session.get(
    "https://www.google.com/search",
    params={"q": "best proxy service", "num": 10, "hl": "en", "gl": "us"},
    headers={
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
        "Accept-Language": "en-US,en;q=0.9",
        "Accept-Encoding": "gzip, deflate, br",
        "DNT": "1",
        "Connection": "keep-alive",
        "Upgrade-Insecure-Requests": "1",
    },
    timeout=15,
)

Refer'e ProxyHat Belgeleri Gelişmiş rotasyon ve oturum ayarları için.

Realistic Request Headers

Tamamlanmış veya tutarsız başlıklar, hurdaların bloke edilmesi gereken en yaygın nedenlerden biridir. İşte tam, gerçekçi bir başlık:

import random
# Rotate between realistic User-Agent strings
USER_AGENTS = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.3 Safari/605.1.15",
]
def get_headers():
    ua = random.choice(USER_AGENTS)
    headers = {
        "User-Agent": ua,
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8",
        "Accept-Language": "en-US,en;q=0.9",
        "Accept-Encoding": "gzip, deflate, br",
        "DNT": "1",
        "Connection": "keep-alive",
        "Upgrade-Insecure-Requests": "1",
        "Sec-Fetch-Dest": "document",
        "Sec-Fetch-Mode": "navigate",
        "Sec-Fetch-Site": "none",
        "Sec-Fetch-User": "?1",
        "Cache-Control": "max-age=0",
    }
    # Firefox has different Sec-Ch headers
    if "Firefox" not in ua:
        headers["Sec-Ch-Ua"] = '"Chromium";v="124", "Google Chrome";v="124", "Not-A.Brand";v="99"'
        headers["Sec-Ch-Ua-Mobile"] = "?0"
        headers["Sec-Ch-Ua-Platform"] = '"Windows"' if "Windows" in ua else '"macOS"'
    return headers
Kullanıcı-Agent dizelerinizi her zaman mevcut tarayıcı versiyonları ile güncelleyin. Bir Chrome 90 Kullanıcı-Agent'ı 2026'da göndermek, hemen kırmızı bayraktır.

Limiting and Request Timing

İsteklerinizin şekli, taleplerin kendileri kadar önemlidir. İşte kanıtlanmış zamanlama stratejileri:

Rastgele Gecikler

İstekler arasındaki sabit aralıkları asla kullanmayın. Bunun yerine, insan arama davranışını taklit etme gecikmeleri:

import time
import random
def human_delay():
    """Generate a realistic delay between searches."""
    # Base delay: 3-8 seconds (normal browsing pace)
    base = random.uniform(3, 8)
    # Occasionally add longer pauses (simulating reading results)
    if random.random() < 0.15:
        base += random.uniform(10, 30)
    # Rare very short delays (rapid refinement searches)
    if random.random() < 0.05:
        base = random.uniform(1, 2)
    return base
# Usage in scraping loop
for keyword in keywords:
    result = scrape_serp(keyword)
    delay = human_delay()
    time.sleep(delay)

Cilt Talepleri

Cilt Talepleri
Proxy TypeGüvenli İstekler / Dakika IP başınaMax Concurrent IPs
Konut (rotating)1-2Sınırsız (pool döner)
Konut (sticky session)30'ların başına 1Havuz büyüklüğüne dayanarak
Datacenter60'lara 1Limited Tarafından IP count

CAPTCHAs ve Bloklar

En iyi önlemlerle bile, bazen bloklarla karşılaşacaksınız. Yıkıcınızı onları lütufla idare etmek için inşa edin.

Bloklar

def is_blocked(response):
    """Check if Google has blocked or challenged the request."""
    # HTTP 429: Rate limited
    if response.status_code == 429:
        return "rate_limited"
    # HTTP 503: Service unavailable (temporary block)
    if response.status_code == 503:
        return "service_unavailable"
    text = response.text.lower()
    # CAPTCHA detection
    if "captcha" in text or "recaptcha" in text:
        return "captcha"
    # Unusual traffic message
    if "unusual traffic" in text or "automated queries" in text:
        return "unusual_traffic"
    # Empty or suspicious results
    if "did not match any documents" in text and len(text) < 5000:
        return "empty_suspicious"
    return None

Retry Strategy

import time
import random
def scrape_with_retry(keyword, max_retries=3):
    """Scrape a SERP with automatic retry on blocks."""
    for attempt in range(max_retries):
        proxy_url = "http://USERNAME:PASSWORD@gate.proxyhat.com:8080"
        proxies = {"http": proxy_url, "https": proxy_url}
        response = requests.get(
            "https://www.google.com/search",
            params={"q": keyword, "num": 10, "hl": "en", "gl": "us"},
            headers=get_headers(),
            proxies=proxies,
            timeout=15,
        )
        block_type = is_blocked(response)
        if block_type is None:
            return parse_results(response.text)
        if block_type == "rate_limited":
            # Exponential backoff
            wait = (2 ** attempt) * 5 + random.uniform(0, 5)
            print(f"Rate limited. Waiting {wait:.1f}s (attempt {attempt + 1})")
            time.sleep(wait)
        elif block_type == "captcha":
            # Switch to a new IP and wait
            print(f"CAPTCHA detected. Rotating IP and waiting...")
            time.sleep(random.uniform(10, 20))
        else:
            # Generic block: wait and retry
            time.sleep(random.uniform(5, 15))
    return None  # All retries exhausted

Geographic Consistency

Bir ince ama önemli anti-deteksiyon ölçüsü, talep parametrelerinizde coğrafi tutarlılık sağlamaktır:

  • IP proxy'niz Amerika Birleşik Devletleri'nde ise, set gl=us ve hl=en
  • Kabul dili başlığı hedef yerele
  • Bu ülkedeki bir OS / tarayıcı kombinasyonu için bir Kullanıcı-Agent dize kullanın
  • Set timezone-appropriate istek süreleri

ProxyHat'ın geo-targeting özelliği Belirli ülkelerden ve şehirlerden temsilcileri seçmenize izin verin, bu tutarlılığı korumak için basit hale getirin. rehberimizde yer hedefli talepleri kullanmak hakkında daha fazla bilgi edinin Yıkmadan kazınmadan.

Node.js Anti-Block Uygulama

İşte Node.js'te uygulanan eşdeğer anti-block stratejisi:

const axios = require('axios');
const cheerio = require('cheerio');
const { HttpsProxyAgent } = require('https-proxy-agent');
const USER_AGENTS = [
  'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36',
  'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36',
  'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0',
];
function getRandomUA() {
  return USER_AGENTS[Math.floor(Math.random() * USER_AGENTS.length)];
}
function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}
async function scrapeWithRetry(keyword, maxRetries = 3) {
  for (let attempt = 0; attempt < maxRetries; attempt++) {
    const agent = new HttpsProxyAgent('http://USERNAME:PASSWORD@gate.proxyhat.com:8080');
    try {
      const { data, status } = await axios.get('https://www.google.com/search', {
        params: { q: keyword, num: 10, hl: 'en', gl: 'us' },
        headers: {
          'User-Agent': getRandomUA(),
          'Accept': 'text/html,application/xhtml+xml',
          'Accept-Language': 'en-US,en;q=0.9',
        },
        httpsAgent: agent,
        timeout: 15000,
        validateStatus: () => true,
      });
      if (status === 429) {
        const wait = Math.pow(2, attempt) * 5000 + Math.random() * 5000;
        console.log(`Rate limited. Waiting ${(wait/1000).toFixed(1)}s`);
        await sleep(wait);
        continue;
      }
      if (data.toLowerCase().includes('captcha')) {
        console.log('CAPTCHA detected. Rotating IP...');
        await sleep(10000 + Math.random() * 10000);
        continue;
      }
      return cheerio.load(data);
    } catch (err) {
      console.log(`Attempt ${attempt + 1} failed: ${err.message}`);
      await sleep(5000 + Math.random() * 10000);
    }
  }
  return null;
}

Gelişmiş Teknikler

Query Randomization

alfabetik veya eşdeğer bir şekilde anahtar kelimeler kazımayın. Her koşmadan önce anahtar kelime listesini Shuffle:

import random
keywords = ["proxy service", "web scraping", "serp tracking", "seo tools"]
random.shuffle(keywords)
# Now scrape in random order
for kw in keywords:
    scrape_with_retry(kw)

Google Arama Parametreleri

Bu parametreleri temiz, kişisel olmayan sonuçlar elde etmek için kullanın:

Google Arama Parametreleri
Parametre parametresiDeğer Değer Değer Değer Değer Değer Değer Değer Değer Değer Değer DeğerAmaç
pws0 0 0 0Engelli kişisel sonuçlar
glÜlke KoduSet arama ülkesi
hlDil KoduTakım arayüzü dili
num10-100Sayfa başına sonuçlar
filter0 0 0 0Disable tekrar filtreleme
nfpr1 1 1Disable auto-correction

Dağıtılmış Scheduling

Büyük ölçekli SERP izlemesi için, patlama kalıpları önlemek için zaman boyunca talepleri dağıtın. Bir saat içinde 10.000 anahtar kelime çıkarmak yerine, onları doğal trafik eğrileri ile 8-12 saat boyunca yaylar (günde daha az istekler) yaylar.

Hedef sadece bloklardan kaçınmak değildir - normal kullanıcı arama davranışından silinen trafiğinizi yapmaktır. Her detay önemlidir.

Güvenilir, büyük ölçekli hurda boru hatları inşa etmek için, bizi gör Web scrapingants için tam kılavuz ve ProxyHat web scraping solutions.

Başlamaya hazır mısınız?

148+ ülkede 50M+ konut IP'sine AI destekli filtreleme ile erişin.

Fiyatlandırmayı GörüntüleKonut Proxy'leri
← Bloga Dön