Нельзя победить CAPTCHA, которую Google уже решил показать. К тому моменту, когда загружается флажок «Я не робот» или сетка изображений, детекция уже произошла: что-то в вашем трафике определилось как автоматизированное, и проверка, это следствие, а не ворота. Надёжный способ обойти CAPTCHA при скрапинге Google, никогда не вызывать её. Сделайте ваши запросы похожими на запросы обычного человека, и проверка просто не появится.
Это руководство именно об этом подходе. В нём рассказывается, почему Google решает проверить скрапер, что конкретно удерживает ваш трафик ниже порога, где вписываются сторонние сервисы решения CAPTCHA (и почему опора на них означает уже проигранный бой вверх по потоку), а также приводится короткий рабочий код для получения Google SERP без срабатывания сигнализации. Данные в рамках этой статьи, только публичные результаты поиска: заголовки, ссылки, сниппеты, те, что видит любой не авторизованный посетитель.
Почему Google проверяет скраперов
Google не показывает CAPTCHA случайно. Он показывает её, когда запрос выглядит как пришедший от скрипта, а не от человека, и строит это суждение по нескольким сигналам одновременно. Знание того, какой именно сигнал не проходит проверку, подсказывает, что изменить, поэтому стоит быть точным в отношении каждого.
- Скорость запросов с одного IP. Всплеск поисковых запросов с одного адреса в короткий промежуток времени, самый очевидный признак. Люди делают паузы, читают и переформулируют; плотный цикл, нет. Это первый порог, который пересекают большинство скраперов.
- Репутация IP. Адреса, которые определяются как принадлежащие хостинг-провайдерам (ASN датацентров), имеют худшую репутацию, чем потребительские соединения, поскольку почти никакие реальные поиски не исходят из серверной стойки. Чистый скрипт с облачного сервера подозрителен ещё до отправки единственного запроса.
- Отпечаток браузера и заголовки. Google читает ваш user-agent, порядок заголовков, TLS-хэндшейк и свойства клиента, открытые через JavaScript. Запрос, заголовки которого не соответствуют заявленному браузеру или в котором отсутствуют свойства реального браузера, выделяется. Подробнее об этом в статье browser fingerprinting.
- Отсутствие JavaScript и поведения. Реальная сессия выполняет скрипты, устанавливает cookies и производит небольшие сигналы взаимодействия человека со страницей. Голый HTTP-запрос не производит ничего из этого, и само отсутствие является сигналом.
- Гигиена сессии. Без cookies, без преемственности, свежая пустая сессия при каждом обращении: этот паттерн читается как автоматизация, потому что люди сохраняют состояние от одного поиска к следующему.
Ни один из этих сигналов не является единственным переключателем. Google оценивает их совокупно, и именно запрос, проваливающий два-три из них одновременно, получает CAPTCHA. В этом и хорошая новость: исправьте важные сигналы, и вы останетесь ниже порога, вызывающего проверку.
Появившаяся CAPTCHA, это симптом. Вы не столько решаете её, сколько меняете трафик, который её породил. Каждая техника ниже существует для того, чтобы ваши запросы оставались ниже порога детектирования Google, чтобы проверка вообще не появлялась, а не для взлома уже показанной.
Что реально удерживает вас ниже порога
Каждый рычаг здесь соответствует одному из описанных выше сигналов. Потяните их вместе, и ваш трафик перестанет выглядеть автоматизированным, это и есть вся игра.
Ротируйте IP и используйте резидентные
Главный фактор, адрес, с которого выходит запрос. Важны две вещи: насколько доверен IP и сколько запросов несёт любой один IP.
IP датацентров быстры и дёшевы, но определяются по хостинговым ASN, которым Google не доверяет по умолчанию, поэтому они быстро получают проверки. Резидентные прокси выходят через реальные потребительские ISP-соединения, поэтому Google воспринимает их как обычных посетителей. Это доверие и есть разница между запросом, возвращающим результаты, и запросом, возвращающим флажок. Полное сравнение в статье datacenter vs residential proxies.
Доверие, половина задачи; распределение нагрузки, другая половина. Даже идеальный IP получает ограничение скорости, если гнать через него весь поток. Ротирующие резидентные прокси меняют адрес выхода через большой пул, поэтому скорость запросов на каждый IP остаётся низкой, даже когда общий объём высок. Чистый способ потребления, backconnect-шлюз, один эндпоинт, меняющий IP за кулисами для каждого запроса или закрепляющий его на сессию, описан в статьях how to use rotating proxies и, специально для SERP, how to rotate proxies for scraping Google search results.
Отправляйте заголовки, соответствующие заявленному браузеру
Реалистичный user-agent, это минимум, а не потолок. Ловушка в несоответствии: набор заголовков, заявляющий быть Chrome, но не включающий заголовки, которые Chrome реально отправляет, или у которого порядок и регистр не совпадают, более подозрителен, чем полное отсутствие user-agent, потому что выглядит как скрипт, притворяющийся браузером. Отправляйте согласованный актуальный профиль браузера или доверьте это инструменту, который его поддерживает.
Дозируйте запросы и рандомизируйте интервалы
Ротация помогает только при достаточно распределённом объёме. Запросы в плотном цикле концентрируют нагрузку и создают машинно-идеальный ритм, который ни один человек никогда не воспроизводит. Добавляйте задержки между запросами, рандомизируйте интервалы и поддерживайте низкую скорость на каждый IP. Более медленный трафик, который завершается, лучше быстрого трафика, который блокируется на пятидесятом запросе.
Рендерите JavaScript и сохраняйте сессию
Часть проверок Google зависит от того, запускает ли клиент скрипты и передаёт ли cookies между запросами. Голый HTTP-запрос не удовлетворяет ни одному из этих требований. Рендеринг страницы в браузере с поддержанием преемственности сессии вместо начала с чистого листа убирает класс сигналов, которые обычный HTTP-клиент неизбежно производит. Общее руководство, в статье как скрапить сайты без блокировки.
А как же сервисы решения CAPTCHA?
Такие сервисы, как 2Captcha и Anti-Captcha существуют, и они делают то, что обещают: когда появляется проверка, они возвращают решённый токен, иногда с помощью операторов-людей, иногда с помощью моделей. Лучше оценить их честно, а не делать вид, что они не работают.
Проблема в том, что означает обращение к ним. Если вы платите за решение проверок, значит, уже получаете проверки, что означает, что ваш трафик уже вызвал детектирование. Теперь вы платите за каждую проверку, добавляете задержку при каждом решении и зависите от третьей стороны, которая ломается при каждом изменении формата проверки. Ничто из этого не масштабируется изящно, и ничто не устраняет причину. Решатель, это заплатка на незалатанную течь.
Лучшая инженерия, не получать проверок вообще. Если вы настроили происхождение IP, ротацию, заголовки, дозирование и рендеринг, и проверки редки, решатель как крайний запасной вариант оправдан. Если проверки обычны и вы решаете их через каждый запуск, это сигнал исправить входные данные, а не покупать больше решений. Общую картину обработки проверок смотрите в статье как обойти CAPTCHA при скрапинге.
Путь кода, не вызывающий проверку
Самостоятельно объединить ротацию, резидентные IP, согласованные заголовки, дозирование и рендеринг, это реальный проект, а поддержание его в настроенном состоянии по мере смены Google является непрерывной работой. Короткий путь, передать весь запрос эндпоинту, который уже всё это делает. Crawlbase Crawling API принимает целевой URL, ротирует IP через резидентный пул, отправляет согласованный профиль браузера, рендерит JavaScript при необходимости и возвращает результат, так что сигналы, которые вызвали бы CAPTCHA, никогда не выстраиваются в одну линию.
Вот короткий рабочий пример загрузки Google SERP через него. Сначала установите зависимость.
pip install requests
Затем передайте токен и закодированный URL Google-поиска в API. Запрос встроенного скрапера google-serp возвращает структурированные результаты вместо «сырого» HTML, поэтому ручной парсинг страницы не нужен.
import requests from urllib.parse import quote_plus TOKEN = "YOUR_CRAWLBASE_TOKEN" KEYWORD = "best running shoes" # Rotation, residential IPs, and JS rendering happen server-side. target = f"https://www.google.com/search?q={quote_plus(KEYWORD)}" resp = requests.get( "https://api.crawlbase.com/", params={ "token": TOKEN, "url": target, "scraper": "google-serp", # parsed SERP, not raw HTML }, ) data = resp.json() for result in data.get("organic_results", []): print(result["position"], result["url"])
Если предпочитаете типизированный клиент вместо формирования URL вручную, SDK crawlbase оборачивает тот же эндпоинт.
from crawlbase import CrawlingAPI from urllib.parse import quote_plus api = CrawlingAPI({"token": "YOUR_CRAWLBASE_TOKEN"}) target = f"https://www.google.com/search?q={quote_plus('best running shoes')}" resp = api.get(target, {"scraper": "google-serp"}) if resp["status_code"] == 200: print(resp["body"])
Суть не в точных именах полей; суть в том, что запрос возвращает результаты, а не проверку, потому что ротация, доверенный IP, согласованные заголовки и рендеринг были применены за вас. Это тот же набор исправлений из раздела выше, только управляемый в одном вызове, а не пятью движущимися частями на вашем обслуживании.
Обход CAPTCHA Google на самом деле означает её невызывание, что требует правильного происхождения IP, ротации, заголовков, дозирования и рендеринга при каждом запросе. Crawlbase Crawling API, это один эндпоинт, обрабатывающий всё это на стороне сервера, так что ваш код указывает на один URL и проверка не срабатывает. Сначала запустите SERP-запрос через него в бесплатном тарифе.
Когда проверка всё же проскальзывает
Даже настроенный трафик иногда встречает случайную проверку, особенно при большом объёме или при обращении к агрессивному региону. Воспринимайте это как обратную связь, а не как провал. Запуск, начинающий возвращать проверки или ошибки 429, говорит вам, что текущий уровень IP или скорость запросов уже недостаточны: замедляйтесь, расширяйте пул или переходите на более высокий уровень прокси. Читайте статус-коды как сигнал, так же как вы делаете это с кодами ошибок статуса прокси. Числа за всем этим (запросов на IP до проверки, частота успеха на данном уровне), это диапазоны, смещающиеся с целью и провайдером, поэтому настраивайтесь против собственного трафика, а не по опубликованному ориентиру.
Это разрешено?
Скрапинг публичных результатов поиска Google находится в защищаемом положении, если вы его там сохраняете. Оставайтесь на публичных данных, заголовках, ссылках и сниппетах, которые видит любой не авторизованный посетитель. Соблюдайте условия использования Google и ожидания по скорости запросов, стоящие за его robots.txt, и соответственно дозируйте трафик, а не атакуйте его. Не собирайте персональные данные и не пытайтесь получить доступ к чему-либо за логином. Граница, удерживающая работу в чистоте, та же, что удерживает её устойчивой: публичные результаты, разумная скорость, никакой личной информации.
Ключевые выводы
- Избегайте триггера, не борьтесь с проверкой. Появившаяся CAPTCHA означает, что детектирование уже произошло; долгосрочное решение, трафик, который никогда не выглядит автоматизированным.
- IP, главный рычаг. Ротирующие резидентные IP воспринимаются как реальные посетители; IP датацентров быстро получают проверки.
- Заголовки, дозирование и рендеринг важны вместе. Согласованные заголовки браузера, рандомизированные интервалы и рендеринг JavaScript убирают сигналы, которые маркируют вас как бота.
- Решатели, это заплатка, а не исправление. Регулярное решение CAPTCHA означает, что вы вызвали детектирование; исправляйте входные данные.
- Оставайтесь на публичных данных. Скрапьте публичные SERP, соблюдайте ToS, robots и скоростные ограничения, и никогда не собирайте личную информацию.
Часто задаваемые вопросы
Как обойти CAPTCHA при скрапинге Google?
Вы обходите её, не вызывая. Google показывает CAPTCHA, когда ваш трафик выглядит автоматизированным, поэтому решение, выглядеть как обычный посетитель: ротируйте резидентные IP, чтобы ни один адрес не получал ограничения скорости, отправляйте заголовки, соответствующие реальному браузеру, дозируйте и рандомизируйте запросы и рендерите JavaScript. Сделайте это правильно, и проверка вообще не появится.
Почему Google показывает CAPTCHA при скрапинге результатов поиска?
Потому что что-то пометило ваш трафик как автоматизированный. Обычные виновники: слишком много запросов с одного IP, IP датацентра с плохой репутацией, заголовки, не соответствующие заявленному браузеру, отсутствие выполнения JavaScript или отсутствие преемственности сессии. Google оценивает их совокупно, и запрос, проваливающий несколько из них одновременно, получает проверку.
Стоит ли использовать сервисы решения CAPTCHA, такие как 2Captcha?
Они работают, но необходимость в них означает уже проигранный бой вверх по потоку. Если вы платите за решение проверки, ваш трафик уже вызвал детектирование, и теперь вы добавляете стоимость, задержку и хрупкую зависимость к каждому запросу. Решатели оправданы только как редкий запасной вариант после настройки происхождения IP, ротации, заголовков, дозирования и рендеринга, а не как основная стратегия.
Какой тип прокси лучше всего подходит для скрапинга Google?
Ротирующие резидентные прокси. Они выходят через реальные потребительские ISP-соединения, которые Google воспринимает как обычных посетителей, а ротация не позволяет ни одному IP нести достаточно запросов, чтобы получить ограничение скорости. IP датацентров дешевле, но определяются по хостинговым ASN, которым Google не доверяет, поэтому они быстро получают проверки и являются плохим основным выбором.
Законно ли скрапить результаты поиска Google?
Скрапинг публичных результатов поиска в целом защищаем, если вы придерживаетесь публичных данных, соблюдаете условия использования Google и ожидания по скорости запросов за его robots.txt и избегаете сбора персональных данных или чего-либо за логином. Риск возрастает при игнорировании скоростных ограничений или сборе личной информации. Ограничьте объём публичными SERP-данными и дозируйте трафик.
Может ли Crawlbase Crawling API скрапить Google без CAPTCHA?
Он создан для того, чтобы не допускать срабатывания проверки. Crawling API ротирует резидентные IP, отправляет согласованный профиль браузера, рендерит JavaScript и управляет запросом на стороне сервера, это тот же набор исправлений, который иначе пришлось бы собирать вручную. Вы отправляете один URL с вашим токеном и получаете результаты вместо страницы-проверки.
Обходите любой сайт в масштабе, без борьбы с инфраструктурой.
Crawlbase берёт на себя прокси, отпечатки и CAPTCHA, чтобы ваша команда выпускала конвейеры данных вместо поддержки обвязки краулинга. 1 000 запросов бесплатно, без карты.
