Scraping de resultados de busca do Google com proxies (SERP, 2026)

Publicado em 12 de junho de 2026 · ≈9 min de leitura

O Google é o alvo mainstream mais difícil de fazer scraping, e a razão é simples: ele vê mais tráfego do que qualquer um, então tem o modelo mais rico de como é um buscador real. Acesse-o de um IP de datacenter em qualquer volume e você recebe um 429, uma página "sorry/index" ou um bloqueio suave em que os resultados silenciosamente rareiam. Este guia cobre o que de fato dispara os bloqueios do Google e a estratégia de proxy e rate-limit que mantém um scraper de SERP vivo em 2026.

O Que Dispara um Bloqueio do Google

O Google não depende de um único sinal — ele empilha vários e bane quando a pontuação combinada cruza uma linha:

Residencial é Inegociável Aqui

Para a maioria dos alvos, você consegue se virar com IPs de datacenter em dados públicos. O Google é a exceção: sua pontuação de reputação de ASN é agressiva o suficiente para que proxies de datacenter sejam estrangulados quase imediatamente. Exits residenciais — ASNs reais de consumidor — são o que permite a um scraper de SERP sustentar volume. Reserve o datacenter para todo o resto e gaste o orçamento residencial onde ele realmente faz diferença.

Rotacione, Mas Limite a Taxa Por Exit

A rotação distribui a carga para que nenhum IP único pareça um bot, mas a disciplina que te mantém vivo é a taxa por exit, não apenas o tamanho do pool. Mil proxies ainda são banidos se você disparar todos eles a todo vapor. Marque o ritmo de cada exit como uma pessoa:

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

O atraso aleatorizado faz um trabalho real: um sleep(3) fixo é, em si, um fingerprint. Varie-o e distribua as consultas entre exits para que cada um fique abaixo do limiar por IP do Google.

Sessões Sticky e Geolocalização

Resultados localizados (rankings, idioma, moeda) dependem da localização do exit, então escolha proxies na geografia que você quer medir e mantenha uma sessão sticky para uma consulta de múltiplas páginas, de modo que todas as páginas de uma busca venham do mesmo lugar. Misturar exits no meio da consulta te dá resultados costurados de locais diferentes — inúteis para rastreamento de ranking.

Não Esqueça o Fingerprint

O Google também lê seu handshake TLS. Uma chamada simples de requests envia um JA3 que grita Python, o que se soma à pontuação do IP. Envie um fingerprint de navegador real com curl_cffi (usado acima) ou um navegador real — veja Como Burlar o TLS Fingerprinting com curl_cffi. Se o Google começar a barrar com um muro de consentimento de JS, escale para um motor de navegador real, como coberto no guia do Turnstile — a mesma lógica de "precisa de um runtime JS" se aplica.

Lide com o Bloqueio com Elegância

Checklist

Para todos os produtos de IP · um enorme pool de nós disponíveis a qualquer momento

Cadastre-se agora e ganhe até 100% de reembolso na sua recarga

Novos usuários recebem 500MB ao se cadastrar, mais um bônus na primeira recarga. Oferta por tempo limitado.