Como os Proxies Ajudam a Raspar Dados de Avaliações em Várias Plataformas

Guia prático para raspar avaliações públicas do Trustpilot, G2 e Google Business com proxies residenciais rotativos. Inclui snippets em Python e Node.js usando gate.proxyhat.com.

How Proxies Help You Scrape Reviews Data: Trustpilot, G2 & Google Business
Neste artigo

Aviso: Este guia aborda apenas acesso a dados públicos. Respeite os Termos de Serviço de cada plataforma, o robots.txt e leis aplicáveis como a CFAA nos EUA e a GDPR na UE. Não colete informações pessoais identificáveis (PII) nem contorne logins. Quando existir uma API oficial, considere usá-la primeiro.

Equipes de pesquisa de mercado e monitoramento de marca precisam de datasets de avaliações consistentes e multiplataforma. Mas páginas de reviews são agressivamente rate-limited, geo-personalizadas e protegidas por anti-bot. É exatamente aqui que entra o tema central deste artigo: como os proxies ajudam a raspar dados de avaliações do Trustpilot, G2 e Google Business sem ser bloqueado.

Por que proxies são essenciais para raspar dados de avaliações

Páginas de avaliações são diferentes de páginas estáticas comuns. Plataformas como Trustpilot, G2 e Google Business expõem conteúdo dinâmico, localizado e sensível a abuso. Três fatores tornam um IP único insuficiente:

  • Rate limiting agressivo: Trustpilot e G2 limitam requisições por IP em segundos, não minutos. Estudos de comunidades como a documentação do Google Maps mostram que o Google impõe cotas estritas para endpoints de lugares e reviews; o mesmo princípio se aplica ao scraping direto.
  • Geo-personalização: O Google Business retorna subconjuntos de avaliações diferentes conforme hl (idioma) e gl (país) do solicitante. Um IP alemão pode ver avaliações em alemão que um IP brasileiro nunca verá.
  • Anti-bot heurístico: G2 usa proteções como Cloudflare e fingerprints de TLS/JA3. IPs de datacenter com assinaturas automáticas costumam receber challenge pages em vez de HTML real.

Proxies residenciais rotativos resolvem os três problemas: distribuem requisições por milhares de IPs de ISPs reais, permitem geo-segmentação consistente e reduzem a taxa de detecção. Em testes práticos, equipes de scraping relatam saltos de taxa de sucesso de 30–40% para 95%+ ao trocar de datacenter para residenciais em plataformas com anti-bot moderado.

Comparação: tipos de proxy para raspar avaliações

TipoCusto relativoTaxa de bloqueio típicaIdeal para
DatacenterBaixoAlto (50–80%)Volumes baixos, sites sem anti-bot
Residencial rotativoMédioBaixo (5–15%)Trustpilot, G2, Google Business
MobileAltoMuito baixo (<5%)Casos extremos de anti-bot

Para revisões em escala, proxies residenciais oferecem o melhor equilíbrio custo-benefício. Veja opções em nossos planos de proxies e localizações disponíveis.

Trustpilot: paginando e parseando __NEXT_DATA__

O Trustpilot renderiza perfis de empresas com Next.js. Em vez de parsear HTML frágil, extraia o JSON embutido em <script id="__NEXT_DATA__">, que contém todas as avaliações da página em estrutura estável. Use o parâmetro ?page=N para paginação e rotacione o IP a cada página via gate.proxyhat.com:8080.

Snippet Python — Trustpilot com rotação por página

import requests
import json
import time
import random
from bs4 import BeautifulSoup

GATE = "http://gate.proxyhat.com:8080"
USER = "user"
PASS = "pass"

def fetch_trustpilot_reviews(company_slug, max_pages=10):
    all_reviews = []
    for page in range(1, max_pages + 1):
        # Rotaciona IP a cada página (sem session flag)
        proxy_url = f"http://{USER}:{PASS}@gate.proxyhat.com:8080"
        proxies = {"http": proxy_url, "https": proxy_url}
        url = f"https://www.trustpilot.com/review/{company_slug}?page={page}"
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
            "Accept-Language": "en-US,en;q=0.9",
        }
        try:
            r = requests.get(url, proxies=proxies, headers=headers, timeout=30)
            soup = BeautifulSoup(r.text, "html.parser")
            script = soup.find("script", id="__NEXT_DATA__")
            if not script:
                print(f"Página {page}: sem __NEXT_DATA__, parando.")
                break
            data = json.loads(script.string)
            reviews = (
                data.get("props", {})
                .get("pageProps", {})
                .get("reviews", [])
            )
            if not reviews:
                break
            for rv in reviews:
                all_reviews.append({
                    "id": rv.get("id"),
                    "stars": rv.get("rating"),
                    "title": rv.get("title"),
                    "text": rv.get("text"),
                    "date": rv.get("dates", {}).get("publishedDate"),
                })
            print(f"Página {page}: {len(reviews)} avaliações coletadas.")
            time.sleep(random.uniform(2, 5))
        except Exception as e:
            print(f"Erro na página {page}: {e}")
    return all_reviews

reviews = fetch_trustpilot_reviews("example.com", max_pages=20)
print(f"Total: {len(reviews)} avaliações")

Esse padrão evita dependência de classes CSS voláteis e reduz a manutenção. A rotação por requisição distribui o risco de throttling, mas se você precisar de continuidade de sessão (por exemplo, para carregar todas as páginas de um perfil sem revalidação), use sessões sticky.

Snippet Python — sessão sticky para perfis multipágina

import requests
import json
from bs4 import BeautifulSoup

def fetch_with_sticky_session(company_slug, max_pages=10, session_id="abc123"):
    # Sessão sticky mantém o mesmo IP durante a vida da sessão
    proxy_url = f"http://user-session-{session_id}:pass@gate.proxyhat.com:8080"
    proxies = {"http": proxy_url, "https": proxy_url}
    session = requests.Session()
    session.proxies = proxies
    session.headers.update({
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
        "Accept-Language": "en-US,en;q=0.9",
    })
    all_reviews = []
    for page in range(1, max_pages + 1):
        url = f"https://www.trustpilot.com/review/{company_slug}?page={page}"
        r = session.get(url, timeout=30)
        soup = BeautifulSoup(r.text, "html.parser")
        script = soup.find("script", id="__NEXT_DATA__")
        if not script:
            break
        data = json.loads(script.string)
        reviews = data.get("props", {}).get("pageProps", {}).get("reviews", [])
        if not reviews:
            break
        all_reviews.extend(reviews)
    return all_reviews

data = fetch_with_sticky_session("example.com", max_pages=15, session_id="tp-profile-001")
print(f"Coletadas: {len(data)} avaliações com sessão sticky")

Sessões sticky são úteis quando a plataforma associa preferências de paginação ao IP. Consulte a documentação do ProxyHat para detalhes de parâmetros de sessão.

G2: lidando com anti-bot mais pesado

O G2 tem postura anti-bot mais agressiva que o Trustpilot. Cloudflare e fingerprints de TLS/JA3 tornam proxies de datacenter quase inúteis. Para raspar avaliações do G2 com proxy, combine três elementos:

  1. Proxies residenciais com rotação por requisição.
  2. Headers realistas incluindo sec-ch-ua, accept e referer.
  3. Delays aleatórios entre 3 e 7 segundos para parecer humano.

As páginas de produto do G2 costumam incluir a distribuição de estrelas em um bloco div[class*="stars"] e avaliações em containers div[itemprop="review"]. Embora menos estável que o __NEXT_DATA__ do Trustpilot, ainda é parseável com BeautifulSoup se você usar seletores baseados em atributos itemprop.

import requests
import time
import random
from bs4 import BeautifulSoup

def fetch_g2_reviews(product_slug, max_pages=5):
    proxy_url = "http://user:pass@gate.proxyhat.com:8080"
    proxies = {"http": proxy_url, "https": proxy_url}
    headers = {
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0 Safari/537.36",
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
        "Accept-Language": "en-US,en;q=0.9",
        "sec-ch-ua": '"Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"',
        "sec-ch-ua-mobile": "?0",
        "sec-ch-ua-platform": '"macOS"',
    }
    all_reviews = []
    for page in range(1, max_pages + 1):
        url = f"https://www.g2.com/products/{product_slug}/reviews?page={page}"
        r = requests.get(url, proxies=proxies, headers=headers, timeout=30)
        if r.status_code == 403:
            print(f"Página {page}: bloqueado (403). Aumente o delay.")
            break
        soup = BeautifulSoup(r.text, "html.parser")
        for review in soup.select("div[itemprop='review']"):
            all_reviews.append({
                "author": review.select_one("span[itemprop='author']").get_text(strip=True) if review.select_one("span[itemprop='author']") else None,
                "rating": review.select_one("meta[itemprop='ratingValue']").get("content") if review.select_one("meta[itemprop='ratingValue']") else None,
                "text": review.select_one("div[itemprop='reviewBody']").get_text(strip=True) if review.select_one("div[itemprop='reviewBody']") else None,
            })
        time.sleep(random.uniform(3, 7))
    return all_reviews

reviews = fetch_g2_reviews("salesforce", max_pages=5)
print(f"G2: {len(reviews)} avaliações")

Se você encontrar muitos 403, reduza a concorrência para 1–2 sessões simultâneas e considere proxies mobile para os casos mais difíceis.

Google Business/Maps reviews: hl, gl e geo-segmentação

O Google Business retorna avaliações diferentes conforme o país e o idioma do solicitante. Dois parâmetros controlam isso:

  • hl: idioma da interface (ex.: hl=pt-BR).
  • gl: país do solicitante (ex.: gl=US).

Se o IP não corresponder ao gl, o Google pode mostrar um subconjunto diferente de avaliações ou redirecionar. Por isso, ao raspar avaliações do Google Business, use proxies residenciais geo-segmentados com a flag -country-US (ou outro país) para garantir consistência entre IP e parâmetros hl/gl.

import requests
import json
import time
import random

def fetch_google_business_reviews(place_id, country="US", hl="en", max_reviews=50):
    # Geo-segmentação: IP residencial dos EUA
    proxy_user = f"user-country-{country}"
    proxy_url = f"http://{proxy_user}:pass@gate.proxyhat.com:8080"
    proxies = {"http": proxy_url, "https": proxy_url}
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0 Safari/537.36",
        "Accept-Language": f"{hl},{hl.split('-')[0]};q=0.9",
    }
    url = f"https://www.google.com/maps/place/?q=place_id:{place_id}&hl={hl}&gl={country}"
    r = requests.get(url, proxies=proxies, headers=headers, timeout=30)
    # O Google Business retorna HTML pesado; extraia dados via selectors ou APIs de terceiros
    # Aqui simplificado: em produção, combine com parsers específicos ou Places API oficial
    print(f"Status: {r.status_code}, tamanho: {len(r.text)} bytes")
    return r.text

html = fetch_google_business_reviews("ChIJN1t_tDeuEmsRUsoJgCq5pK0", country="US", hl="en")

Nota: Para volumes altos de reviews do Google Business, considere a Places API do Google, que retorna reviews estruturadas com rate limits documentados. Para datasets amplos e multiplataforma, scraping com proxies residenciais costuma ser mais econômico.

Snippet Node.js — rotação de IPs em páginas de avaliações

const axios = require('axios');
const { HttpsProxyAgent } = require('https-proxy-agent');

const GATE = 'http://user:pass@gate.proxyhat.com:8080';

async function fetchReviews(companySlug, maxPages = 10) {
  const agent = new HttpsProxyAgent(GATE);
  const results = [];
  for (let page = 1; page <= maxPages; page++) {
    const url = `https://www.trustpilot.com/review/${companySlug}?page=${page}`;
    try {
      const res = await axios.get(url, {
        httpsAgent: agent,
        headers: {
          'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
          'Accept-Language': 'en-US,en;q=0.9',
        },
        timeout: 30000,
      });
      const match = res.data.match(/<script id="__NEXT_DATA__" type="application\/json">([\s\S]*?)<\/script>/);
      if (!match) { console.log(`Página ${page}: sem dados.`); break; }
      const data = JSON.parse(match[1]);
      const reviews = data.props?.pageProps?.reviews || [];
      if (reviews.length === 0) break;
      results.push(...reviews.map(r => ({
        id: r.id, stars: r.rating, title: r.title, text: r.text,
      })));
      console.log(`Página ${page}: ${reviews.length} avaliações`);
      await new Promise(r => setTimeout(r, 2000 + Math.random() * 3000));
    } catch (e) {
      console.error(`Erro página ${page}: ${e.message}`);
    }
  }
  return results;
}

(async () => {
  const reviews = await fetchReviews('example.com', 10);
  console.log(`Total: ${reviews.length} avaliações`);
})();

Erros comuns e casos de borda

  • IP único para todo o perfil: Sessões longas sem rotação aumentam a chance de throttling após 20–30 páginas. Rotacione a cada 5–10 páginas se não precisar de continuidade.
  • Headers genéricos: Usar apenas User-Agent sem sec-ch-ua e Accept-Language é um sinal de bot. Complete o header set.
  • Ignorar robots.txt: Verifique sempre /robots.txt da plataforma antes de raspar. Algumas proíbem paths específicos de reviews.
  • Concorrência alta: 50+ requisições simultâneas de um único pool de IPs dispara rate limits. Mantenha 5–10 sessões simultâneas por perfil.
  • hl/gl incompatíveis com o IP: Pedir gl=US de um IP brasileiro pode retornar resultados inconsistentes. Alinhe geo do proxy com os parâmetros.
  • Parsear HTML em vez de JSON embutido: No Trustpilot, seletores de CSS quebram a cada release. Prefira __NEXT_DATA__.

Todos os exemplos usam o gateway gate.proxyhat.com:8080 (HTTP) ou :1080 (SOCKS5). Parâmetros de geo e sessão vão no username:

  • user-country-US — IP residencial dos EUA.
  • user-country-DE-city-berlin — geo-segmentação até cidade.
  • user-session-abc123 — sessão sticky para perfis multipágina.

Recursos relacionados:

Quando usar APIs oficiais em vez de scraping

Antes de raspar, verifique se a plataforma oferece uma API. O Google Places API retorna reviews estruturadas com cotas claras; o G2 e o Trustpilot têm parâmetros de parceria para dados em escala. APIs oficiais eliminam risco legal, custos de infraestrutura anti-bot e manutenção de parsers. Use scraping quando:

  • A API não cobrir os campos ou filtros que você precisa.
  • O custo da API for proibitivo para o volume desejado.
  • Você precisar de cobertura multiplataforma padronizada.

Em todos os casos, mantenha boas práticas: respeite robots.txt, limite concorrência, evite PII e documente a origem de cada dataset.

Pontos-chave

  • Proxies residenciais rotativos são essenciais para contornar rate limits e geo-personalização em Trustpilot, G2 e Google Business.
  • No Trustpilot, parse o JSON __NEXT_DATA__ em vez de HTML; rotacione IPs por página via gate.proxyhat.com:8080.
  • No G2, use proxies residenciais com headers realistas e delays de 3–7 segundos; IPs de datacenter costumam receber 403.
  • No Google Business, alinhe hl/gl com a geo do proxy (-country-US) para evitar subconjuntos localizados inconsistentes.
  • Sessões sticky (-session-abc123) mantêm continuidade em perfis multipágina; rotação por requisição é melhor para varreduras amplas.
  • Compliance primeiro: só raspe dados públicos, respeite ToS e robots.txt e considere APIs oficiais quando disponíveis.

Conclusão

Raspar dados de avaliações em escala exige mais do que um bom parser: exige infraestrutura de IPs que pareça humana e seja geo-consistente. Com proxies residenciais do ProxyHat, você pode distribuir requisições por milhares de IPs de ISPs reais, geo-segmentar por país e cidade e manter sessões sticky quando necessário. Comece com os snippets acima, ajuste delays e concorrência conforme a plataforma e valide seu dataset contra amostras manuais antes de publicar análises. Para volumes maiores, consulte nossos planos e a documentação para configurar pools dedicados.

Perguntas frequentes

Como os proxies ajudam a raspar dados de avaliações?

Proxies residenciais rotativos distribuem suas requisições por milhares de IPs reais, evitando que uma única fonte seja throttled ou bloqueada pelos sistemas anti-bot do Trustpilot, G2 e Google Business. Eles também permitem geo-segmentação por país e cidade, garantindo que o conteúdo localizado das avaliações seja retornado de forma consistente.

Qual tipo de proxy funciona melhor para raspar avaliações?

Proxies residenciais são a melhor escolha para raspar avaliações porque usam IPs de ISPs reais, dificultando a detecção por anti-bot. Para perfis multipágina, use sessões sticky; para varreduras amplas, use rotação por requisição. Proxies de datacenter funcionam para volumes baixos, mas costumam ser bloqueados mais rápido em plataformas como G2 e Google Business.

Como evitar bloqueios ao raspar avaliações do Google Business?

Use proxies residenciais geo-segmentados (user-country-US), headers realistas, delays aleatórios entre 2 e 5 segundos e respeite o robots.txt. Combine parâmetros hl e gl consistentes com o país do IP para evitar receber subconjuntos localizados diferentes a cada requisição. Limite a concorrência a 5–10 sessões simultâneas por perfil.

É legal raspar avaliações públicas do Trustpilot e G2?

Raspar dados públicos geralmente é permitido quando você respeita os Termos de Serviço da plataforma, o robots.txt e leis aplicáveis como CFAA (EUA) e GDPR (UE). Evite coletar PII, contornar logins ou acessar dados protegidos. Quando disponível, prefira APIs oficiais. Consulte um advogado para casos específicos.

Seus proxies estão sendo bloqueados durante o scraping?

Faça um teste de proxy grátis — taxa de bloqueio, velocidade e anonimato em segundos. Sem cadastro.

Testar meus proxies grátis
← Voltar ao Blog