Как прокси помогают собирать данные отзывов: практическое руководство по Trustpilot, G2 и Google Business

Руководство по сбору публичных отзывов с Trustpilot, G2 и Google Business через вращаемые резидентные прокси ProxyHat: примеры кода на Python и Node.js, обработка антибот-защиты и геолокации.

How Proxies Help You Scrape Reviews Data: Trustpilot, G2 & Google Business
В этой статье

Важное предупреждение: Эта статья посвящена сбору только публично доступных данных отзывов. Перед скрапингом любой платформы проверьте её Условия использования (Terms of Service), соблюдайте применимое законодательство (CFAA в США, GDPR в ЕС) и файл robots.txt. Не собирайте персональные данные, не публикуемые в отзывах, и не используйте собранные данные для спама или преследования.

Сбор отзывов — одна из самых востребованных задач в маркетинговых исследованиях, бренд-мониторинге и аналитике. Но платформы вроде Trustpilot, G2 и Google Business активно противодействуют автоматическому сбору данных: они ограничивают частоту запросов, персонализируют контент по гео и применяют антибот-системы. В этом руководстве мы разберём, как прокси помогают собирать данные отзывов, и покажем рабочие примеры кода для трёх крупных платформ.

Как прокси помогают собирать данные отзывов: почему один IP не справляется

Платформы отзывов используют три механизма защиты, которые делают сбор данных с одного IP-адреса практически невозможным:

  • Rate limiting — после 20–50 запросов с одного IP за короткий период сервер возвращает HTTP 429 Too Many Requests или временную блокировку на 5–60 минут.
  • Гео-персонализация — Google Business и Trustpilot показывают разные наборы отзывов в зависимости от страны и языка запроса. Один IP из дата-центра в Германии увидит не те отзывы, что пользователь из США.
  • Антибот-проверка — G2 использует Cloudflare, который анализирует TLS-отпечатки, заголовки и паттерны поведения. Дата-центровые IP-адреса помечаются как подозрительные с вероятностью 60–80%.

Резидентные прокси решают все три проблемы. Они предоставляют IP-адреса реальных интернет-провайдеров, что делает запросы неотличимыми от обычных пользователей. Ротация IP на каждый запрос распределяет нагрузку, а таргетинг по стране позволяет получать отзывы в нужной локали. Согласно документации Mozilla, корректные HTTP-заголовки, включая User-Agent, Accept-Language и Referer, также критически важны для прохождения проверок.

Архитектура решения: ProxyHat и резидентные прокси

ProxyHat предоставляет резидентные прокси через единый шлюз gate.proxyhat.com на порту 8080 (HTTP) или 1080 (SOCKS5). Управление ротацией, гео-таргетингом и сессиями осуществляется через имя пользователя:

ПараметрФорматПример
Ротация на каждый запросuser:passhttp://user:pass@gate.proxyhat.com:8080
Таргетинг по странеuser-country-US:passhttp://user-country-US:pass@gate.proxyhat.com:8080
Липкая сессияuser-session-abc123:passhttp://user-session-abc123:pass@gate.proxyhat.com:8080
Страна + город + сессияuser-country-DE-city-berlin-session-abc:passhttp://user-country-DE-city-berlin-session-abc:pass@gate.proxyhat.com:8080

Подробнее о доступных локациях см. на странице ProxyHat Locations, а о тарифах — на странице цен.

Trustpilot: парсинг отзывов через __NEXT_DATA__ JSON

Trustpilot рендерит страницы бизнес-профилей через Next.js, что означает наличие встроенного JSON-блока __NEXT_DATA__ прямо в HTML. Это намного надёжнее, чем парсинг HTML-селекторов, которые меняются при каждом обновлении дизайна.

Структура URL

Публичные бизнес-профили доступны по адресу https://www.trustpilot.com/review/{domain} с пагинацией через ?page=N. Каждая страница содержит до 20 отзывов.

Python: ротация IP на каждую страницу

import requests
import json
import re
import time

PROXY_URL = "http://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.0.0 Safari/537.36",
    "Accept-Language": "en-US,en;q=0.9",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
}

def scrape_trustpilot_reviews(domain, max_pages=10):
    all_reviews = []
    for page in range(1, max_pages + 1):
        url = f"https://www.trustpilot.com/review/{domain}?page={page}"
        try:
            resp = requests.get(url, headers=headers, proxies=proxies, timeout=30)
            if resp.status_code == 429:
                print(f"Rate limited on page {page}, sleeping 30s")
                time.sleep(30)
                continue
            resp.raise_for_status()
            # Извлекаем __NEXT_DATA__ JSON
            match = re.search(
                r'<script id="__NEXT_DATA__" type="application/json">(.*?)</script>',
                resp.text, re.DOTALL
            )
            if not match:
                print(f"No __NEXT_DATA__ on page {page}")
                break
            data = json.loads(match.group(1))
            reviews = data["props"]["pageProps"]["reviews"]
            if not reviews:
                break
            for r in reviews:
                all_reviews.append({
                    "title": r.get("title", ""),
                    "text": r.get("text", ""),
                    "rating": r.get("rating", 0),
                    "date": r.get("dates", {}).get("publishedDate", ""),
                    "author": r.get("consumer", {}).get("displayName", ""),
                })
            print(f"Page {page}: {len(reviews)} reviews")
            time.sleep(2)  # уважаем rate limits
        except Exception as e:
            print(f"Error on page {page}: {e}")
    return all_reviews

reviews = scrape_trustpilot_reviews("example.com", max_pages=5)
print(f"Total reviews collected: {len(reviews)}")

Каждый запрос через gate.proxyhat.com:8080 автоматически получает новый IP-адрес, что снижает риск получения HTTP 429. При 2-секундной задержке между страницами вы можете собрать ~1800 отзывов в час без блокировок.

G2: обход антибот-защиты Cloudflare

G2 использует Cloudflare для защиты от ботов, что делает его одним из самых сложных сайтов для скрапинга. Дата-центровые прокси здесь почти бесполезны — Cloudflare блокирует их с высокой вероятностью. Резидентные прокси с реалистичными заголовками — единственный надёжный подход.

Стратегия

  • Используйте резидентные прокси с таргетингом по стране (например, -country-US для отзывов на английском).
  • Установите реалистичные заголовки: User-Agent, Accept-Language, Sec-Ch-Ua.
  • Соблюдайте задержку 3–5 секунд между запросами.
  • Парсите звёздные распределения из HTML, так как G2 не встраивает JSON так, как Trustpilot.

Python: сбор отзывов G2 с резидентными прокси

import requests
from bs4 import BeautifulSoup
import time
import random

PROXY_URL = "http://user-country-US: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.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",
    "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"',
    "Sec-Fetch-Dest": "document",
    "Sec-Fetch-Mode": "navigate",
    "Sec-Fetch-Site": "none",
    "Sec-Fetch-User": "?1",
    "Upgrade-Insecure-Requests": "1",
}

def scrape_g2_reviews(product_slug, max_pages=5):
    all_reviews = []
    for page in range(1, max_pages + 1):
        url = f"https://www.g2.com/products/{product_slug}/reviews?page={page}"
        try:
            resp = requests.get(url, headers=headers, proxies=proxies, timeout=30)
            if resp.status_code == 403:
                print(f"Blocked (403) on page {page}, retrying with new IP")
                time.sleep(5)
                continue
            resp.raise_for_status()
            soup = BeautifulSoup(resp.text, "html.parser")
            review_items = soup.find_all("div", attrs={"itemprop": "review"})
            for item in review_items:
                title_el = item.find("div", class_="review-title")
                body_el = item.find("div", attrs={"itemprop": "reviewBody"})
                rating_el = item.find("meta", attrs={"itemprop": "ratingValue"})
                all_reviews.append({
                    "title": title_el.get_text(strip=True) if title_el else "",
                    "text": body_el.get_text(strip=True) if body_el else "",
                    "rating": rating_el.get("content") if rating_el else None,
                })
            print(f"G2 page {page}: {len(review_items)} reviews")
            time.sleep(random.uniform(3, 5))
        except Exception as e:
            print(f"Error on page {page}: {e}")
    return all_reviews

reviews = scrape_g2_reviews("slack", max_pages=3)
print(f"Total G2 reviews: {len(reviews)}")

Совет: Если G2 возвращает 403 даже с резидентными прокси, попробуйте мобильные прокси ProxyHat или увеличьте задержку до 5–8 секунд. Также проверьте, что ваш User-Agent соответствует актуальной версии браузера.

Google Business: сбор отзывов с учётом hl/gl и гео

Google Business (Maps) отзывы — самый сложный случай, потому что Google персонализирует результаты по множеству факторов:

  • Параметр hl (язык интерфейса) определяет язык отзывов.
  • Параметр gl (гео) определяет, какие отзывы приоритизируются.
  • IP-адрес запроса влияет на локализацию даже при явных hl/gl.

Для консистентного сбора отзывов в одной локали используйте таргетинг по стране в имени пользователя ProxyHat: user-country-US в сочетании с hl=en и gl=us.

Липкие сессии для многостраничного сбора

При сборе отзывов с Google Business важно сохранять один IP на протяжении всей сессии, чтобы Google не менял набор отзывов при смене IP. Используйте флаг -session-abc123:

import requests
import json
import time

# Липкая сессия с таргетингом на США
PROXY_URL = "http://user-country-US-session-gmaps-001: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.0.0 Safari/537.36",
    "Accept-Language": "en-US,en;q=0.9",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
}

def scrape_google_business_reviews(place_id, max_reviews=100):
    """
    Собирает отзывы Google Business через публичный протокол batchexecute.
    Требуется place_id из Google Maps.
    """
    all_reviews = []
    session = requests.Session()
    session.headers.update(headers)
    session.proxies.update(proxies)
    
    # Получаем начальную страницу места
    base_url = "https://www.google.com/maps"
    params = {"hl": "en", "gl": "us"}
    
    # Шаг 1: загрузить страницу места
    place_url = f"{base_url}/place/?q=place_id:{place_id}"
    resp = session.get(place_url, params=params, timeout=30)
    if resp.status_code != 200:
        print(f"Failed to load place page: {resp.status_code}")
        return all_reviews
    
    # Шаг 2: использовать batchexecute API для отзывов
    # Это упрощённый пример — реальная реализация требует
    # парсинга токенов из начального ответа
    print(f"Place page loaded, status: {resp.status_code}")
    print(f"Session IP maintained via sticky session")
    
    # В реальном проекте используйте google-maps-reviews библиотеки
    # или парсите данные из встроенных JSON-массивов в HTML
    time.sleep(2)
    return all_reviews

# Пример: сбор отзывов для известного места
reviews = scrape_google_business_reviews("ChIJN1t_tDeuEmsRUsoyG83frY4")

Липкая сессия -session-gmaps-001 гарантирует, что все запросы в рамках сбора идут с одного IP-адреса в США. Это критически важно для Google: смена IP-адреса между страницами может привести к тому, что Google покажет другой набор отзывов, и вы получите дубликаты или пропуски.

Node.js: сбор отзывов Trustpilot с ротацией IP

Для JavaScript-разработчиков вот эквивалентный пример на Node.js с использованием axios и https-proxy-agent:

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

const PROXY_URL = 'http://user:pass@gate.proxyhat.com:8080';
const agent = new HttpsProxyAgent(PROXY_URL);

const headers = {
  'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
  'Accept-Language': 'en-US,en;q=0.9',
  'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
};

async function scrapeTrustpilotReviews(domain, maxPages = 5) {
  const allReviews = [];
  for (let page = 1; page <= maxPages; page++) {
    const url = `https://www.trustpilot.com/review/${domain}?page=${page}`;
    try {
      const resp = await axios.get(url, {
        httpsAgent: agent,
        headers,
        timeout: 30000,
      });
      if (resp.status === 429) {
        console.log(`Rate limited on page ${page}, sleeping 30s`);
        await new Promise(r => setTimeout(r, 30000));
        page--; // retry same page
        continue;
      }
      const $ = cheerio.load(resp.data);
      const nextDataScript = $('#__NEXT_DATA__').text();
      if (!nextDataScript) {
        console.log(`No __NEXT_DATA__ on page ${page}`);
        break;
      }
      const data = JSON.parse(nextDataScript);
      const reviews = data.props?.pageProps?.reviews || [];
      if (reviews.length === 0) break;
      reviews.forEach(r => {
        allReviews.push({
          title: r.title || '',
          text: r.text || '',
          rating: r.rating || 0,
          date: r.dates?.publishedDate || '',
          author: r.consumer?.displayName || '',
        });
      });
      console.log(`Page ${page}: ${reviews.length} reviews`);
      await new Promise(r => setTimeout(r, 2000));
    } catch (err) {
      console.error(`Error on page ${page}: ${err.message}`);
    }
  }
  return allReviews;
}

(async () => {
  const reviews = await scrapeTrustpilotReviews('example.com', 5);
  console.log(`Total reviews: ${reviews.length}`);
})();

Частые ошибки и граничные случаи

1. Парсинг HTML вместо встроенного JSON

Многие скраперы ломаются при обновлении дизайна платформы. Trustpilot и Google встраивают структурированный JSON в HTML — используйте его. HTML-селекторы стоит применять только там, где JSON недоступен (как на G2).

2. Игнорирование гео-персонализации

Если вы собираете отзывы Google Business с IP-адреса в Германии, вы увидите преимущественно немецкоязычные отзывы, даже если бизнес находится в США. Всегда используйте -country-US (или нужную страну) в имени пользователя ProxyHat.

3. Слишком быстрые запросы

Даже с ротацией IP, запросы каждые 200ms вызовут подозрения. Соблюдайте задержку 2–5 секунд между запросами и добавляйте случайную вариацию. Это снижает скорость сбора, но повышает надёжность с 40–50% до 90%+.

4. Отсутствие обработки пустых страниц

Trustpilot иногда возвращает страницу без отзывов, если бизнес недавно зарегистрирован. Всегда проверяйте, что список отзывов не пуст, прежде чем продолжать пагинацию.

5. Сбор данных, требующих входа

Отзывы, видимые только после входа в аккаунт, обычно не считаются публичными данными. Не используйте учётные записи для обхода ограничений — это нарушает Условия использования большинства платформ.

Сравнение платформ: сложность сбора и рекомендуемые прокси

ПлатформаАнтибот-защитаРекомендуемый тип проксиСтратегия IPЗадержка
TrustpilotУмереннаяРезидентныеРотация на каждый запрос2–3 сек
G2Высокая (Cloudflare)Резидентные / МобильныеРотация + липкие сессии3–5 сек
Google BusinessВысокаяРезидентные с гео-таргетингомЛипкая сессия на профиль3–5 сек

Этика и когда использовать официальные API

Сбор публичных данных отзывов может быть законным, но важно соблюдать баланс между технической возможностью и этическими нормами:

  • Соблюдайте robots.txt — проверьте, разрешает ли платформа скрапинг конкретных путей. Например, https://www.g2.com/robots.txt может запрещать индексацию определённых страниц.
  • Не собирайте PII — имена авторов отзывов на Trustpilot и G2 являются публичными никнеймами, но не собирайте email-адреса, телефоны или другие контактные данные, даже если они технически доступны.
  • Соблюдайте rate limits — даже если прокси позволяют обойти ограничения, намеренное перегружение серверов платформы неэтично и может быть расценено как нарушение.
  • GDPR и CCPA — отзывы могут содержать персональные данные. Если вы храните или обрабатываете данные пользователей из ЕС или Калифорнии, убедитесь, что ваше использование соответствует применимому законодательству. Подробнее см. на gdpr.eu.

Перед скрапингом проверьте, есть ли у платформы официальный API:

  • Google Maps Places API — предоставляет отзывы через Place Details и Place Reviews, но с квотой 2000 запросов/день на бесплатном тарифе.
  • Trustpilot API — доступен для бизнес-партнёров, требует регистрации приложения.
  • G2 API — не имеет публичного API для отзывов; скрапинг — единственная альтернатива для публичных данных.

Если официальный API покрывает ваши потребности по объёму и функциональности — используйте его. Скрапинг через прокси оправдан, когда API недоступен, слишком ограничен или не предоставляет нужные данные.

Ключевые выводы

  • Резидентные прокси обязательны для сбора отзывов — дата-центровые IP блокируются на G2 и Google в 60–80% случаев.
  • Парсите встроенный JSON (например, __NEXT_DATA__ на Trustpilot) вместо хрупких HTML-селекторов — это снижает maintenance на 70%+.
  • Используйте липкие сессии (-session-abc123) для многостраничного сбора с Google Business, чтобы избежать смены набора отзывов при ротации IP.
  • Таргетинг по стране (-country-US) критически важен для Google Business — без него вы получите локализованный набор отзывов, не отражающий реальную картину.
  • Соблюдайте задержки 2–5 секунд между запросами и добавляйте случайную вариацию для имитации человеческого поведения.
  • Проверяйте Условия использования и robots.txt каждой платформы перед началом сбора. Не собирайте данные, требующие входа в аккаунт.

Готовы начать сбор отзывов? Изучите варианты использования веб-скрапинга и SERP-трекинга с ProxyHat, а полную техническую документацию найдёте в официальных документах ProxyHat.

Часто задаваемые вопросы

Что такое сбор данных отзывов с помощью прокси?

Это метод сбора публичных отзывов с платформ вроде Trustpilot, G2 и Google Business через прокси-серверы, которые вращают IP-адреса для обхода ограничений частоты запросов и гео-персонализации контента. Резидентные прокси маскируют ваш скрапер под реальных пользователей из нужных стран, что позволяет стабильно собирать данные без блокировок.

Почему прокси важны для сбора отзывов?

Платформы отзывов применяют агрессивные лимиты частоты запросов, гео-персонализацию и антибот-защиту. Один IP-адрес быстро получает HTTP 429 или CAPTCHA. Резидентные прокси обеспечивают ротацию IP на каждый запрос, что распределяет нагрузку и снижает риск блокировок. Также они позволяют получать отзывы в нужной локали через таргетинг по стране и городу.

Какой тип прокси лучше всего подходит для сбора отзывов?

Резидентные прокси — оптимальный выбор для сбора отзывов. Они используют IP-адреса реальных интернет-провайдеров, что делает их неотличимыми от обычных пользователей. Мобильные прокси подходят для самых защищённых платформ. Дата-центровые прокси быстрее, но чаще блокируются. Для многостраничного сбора используйте липкие сессии, для массового — ротацию на каждый запрос.

Как избежать блокировок при сборе отзывов?

Используйте вращаемые резидентные прокси с реалистичными HTTP-заголовками, соблюдайте разумные задержки между запросами (1-3 секунды), чередуйте user-agent, парсите встроенный JSON вместо хрупких HTML-селекторов и уважайте robots.txt. Не собирайте персональные данные, не входящие в публичные отзывы, и всегда проверяйте условия использования платформы перед началом.

Готовы начать?

Доступ к более чем 50 млн резидентных IP в 148+ странах с AI-фильтрацией.

Смотреть ценыРезидентные прокси
← Вернуться в Блог