Веб-скрапинг кажется простым делом, пока сайт не начинает сопротивляться. Первый запуск возвращает чистые данные, второй отвечает CAPTCHA, а к третьему ваш IP уже ограничен или заблокирован. Большинство проблем возникает из-за нескольких типичных ошибок: слишком интенсивные запросы с одного адреса, отсутствующий заголовок, хрупкий парсер, который ломается в день, когда страница обновляется.
Перед вами практический список из семи советов по веб-скрапингу, которые позволяют поддерживать краулер в рабочем состоянии и собирать чистые данные. Каждый совет направлен против конкретной причины, по которой скрапер обнаруживают или ломают, и предлагает конкретное действие, которое можно применить уже сегодня. В итоге вы узнаете, как выглядеть как настоящий пользователь, как регулировать запросы, как переживать изменения в разметке и когда делегировать сложные задачи управляемому сервису, а не решать их вручную.
Почему скраперы блокируют
Прежде чем перейти к советам, полезно понять, с чем именно вам предстоит столкнуться. Сайты обнаруживают автоматизацию по паттернам, которые никогда не создаёт человек: все запросы с одного IP, идеально равномерный ритм, отсутствующие или непоследовательные заголовки браузера, трафик, игнорирующий скрытые ловушки для ботов. Защита варьируется от мягкой (ограничение скорости) до жёсткой (CAPTCHA, отпечатки браузера, JavaScript-проверки, которые может пройти только настоящий браузер).
Ни одна из этих мер не является непреодолимой сама по себе. Задача в том, чтобы перестать выделяться: распределяйте запросы, отправляйте заголовки, которые отправляет браузер, замедляйтесь до разумного темпа и используйте тяжёлые инструменты только тогда, когда цель этого действительно требует. Семь советов ниже работают со слоя запроса наружу и усиливают друг друга: ротация без разумного темпа всё равно приведёт к блокировке.
1. Скрапьте ответственно, затем ротируйте IP
Самый распространённый способ, которым сайт замечает скрапер, это наблюдение за IP-адресом. Сотни запросов с одного адреса приводят к ограничению, проверкам или блокировке. Распределение запросов по пулу адресов гарантирует, что ни один IP не демонстрирует подозрительного паттерна, поэтому ротация IP является основой, на которой строится всё остальное.
Прежде чем ротировать, скрапьте ответственно: ограничивайтесь публичными данными, доступными любому без учётной записи, читайте robots.txt целевого сайта и соблюдайте указанные им ограничения, а также держите объём запросов достаточно низким, чтобы не перегружать серверы. Вежливый скрапер остаётся в работе гораздо дольше агрессивного, и это спасает вас от лишних юридических и этических проблем.
Для самой ротации сервис, циклически использующий множество адресов, позволяет одному проекту вести себя как миллион отдельных посетителей. Для мягких целей достаточно датацентровых IP; сайты с развитыми списками блокировки прокси могут потребовать жилых или мобильных адресов, которые воспринимаются как обычные потребительские подключения. Скрапинг без блокировок охватывает общий план действий, но ротация это отправная точка.
2. Устанавливайте актуальный User-Agent
User-Agent это HTTP-заголовок, который сообщает сайту, какой браузер его посещает. Многие скраперы оставляют его пустым или отправляют очевидный дефолт библиотеки, и это один из простейших признаков для проверки: запрос без User-Agent или с таким, который ни один реальный браузер не отправит, блокируется немедленно. Всегда предъявляйте актуальную и легитимную строку User-Agent.
Следите за актуальностью этих строк. С каждым выпуском Chrome, Firefox или Safari поставляется новый User-Agent, поэтому краулер со значением прошлого года становится всё более подозрительным. Ротируйте между несколькими реальными User-Agent, чтобы сайт не видел внезапного всплеска запросов с одной и той же строки, и убедитесь, что остальные заголовки (Accept-Language, Accept и прочие) согласуются с браузером, за который вы себя выдаёте.
3. Ограничивайте запросы случайными задержками
Скрапер, отправляющий ровно один запрос в секунду круглосуточно, тривиально распознаётся. Ни один человек не просматривает страницы с такой периодичностью, и идеально равномерный ритм сам по себе является отпечатком бота. Добавляйте случайные задержки между запросами, от нескольких секунд до десяти в зависимости от цели, чтобы ваш трафик выглядел менее механическим.
Ограничение скорости это также проявление вежливости. Слишком интенсивная нагрузка на сервер может навредить всем пользователям, поэтому если ответы начинают замедляться, снижайте темп, а не увеличивайте его. Особо вежливые краулеры проверяют robots.txt сайта на наличие строки Crawl-delay, которая указывает, сколько времени нужно выжидать между запросами, чтобы не перегружать сервер.
Постоянный двухсекундный интервал всё равно остаётся роботизированным паттерном. Рандомизируйте ожидание на каждом запросе, чтобы никакие два интервала не совпадали. Небольшой разброс снимает нагрузку с каждой конкретной секунды и делает ваш ритм человекоподобным, а не запланированным.
4. Используйте headless-браузер только при необходимости
Некоторые сайты опираются на тонкие сигналы (веб-шрифты, расширения браузера, куки, выполнение JavaScript), чтобы определить, исходит ли запрос от реального человека. Страницы, содержимое которых строится на стороне клиента, не поддаются простому HTTP-запросу вообще, потому что данных просто нет в начальном HTML. Для них единственный путь это headless-браузер, который запускает страницу как настоящий пользователь.
Инструменты вроде Playwright, Puppeteer и Selenium управляют реальным движком браузера, выполняя JavaScript, необходимый сайту для отрисовки контента. Обратная сторона это ресурсы: каждый экземпляр является полноценным браузером, потребляющим CPU и память, что ограничивает количество одновременных запусков и замедляет каждый запрос. Поэтому рассматривайте рендеринг как крайнее средство. Сначала проверьте вкладку сети на наличие внутреннего JSON API, который уже вызывает страница, поскольку прямое обращение к этому эндпоинту быстрее и стабильнее, чем парсинг отрисованного HTML. Оставляйте headless-путь для страниц, которые действительно этого требуют. Краулинг JavaScript-сайтов подробно разбирает детали.
Ротация, реалистичные отпечатки браузера, опциональный рендеринг JavaScript и автоматические повторные попытки доступны в одном вызове. Вы отправляете URL и получаете чистый HTML, избавляясь от необходимости самостоятельно поддерживать пул прокси и headless-флот. Нужна просто ротация для существующего HTTP-клиента? Crawlbase Smart AI Proxy предоставляет один эндпоинт, который за кулисами циклически использует большой пул жилых и датацентровых адресов. Большинство советов из этой статьи уже встроены.
5. Избегайте ловушек типа «honeypot»
Некоторые сайты размещают «honeypot»-ссылки: элементы, невидимые для человека, но видимые для наивного краулера, который переходит по каждой ссылке на странице. Попасться в такую ловушку означает, что сайт сразу же поймёт, что вы бот, и заблокирует вас на месте. Решение в том, чтобы скрапить как осторожный человек, а не как скрипт, хватающий каждый встречный URL.
Несколько защитных привычек помогут вам избежать ловушек. Настройте бота пропускать ссылки, скрытые CSS, например с display: none или visibility: hidden, поскольку это классические ловушки, на которые человек никогда не нажмёт. Переходите по ссылкам только из доверенных и видимых разделов страницы, не гоняясь за каждым якорем. Изучайте структуру и CSS страницы перед массовым сбором ссылок и с осторожностью относитесь к данным, которые выглядят слишком удобно, так как некоторые сайты подбрасывают приманки для скраперов. Тщательная оценка ссылок является дешёвой страховкой от мгновенной блокировки.
6. Следите за изменениями сайта и мониторьте скрапер
Сайты постоянно меняют разметку, и изменение, которое перемещает или переименовывает нужный вам элемент, тихо сломает ваш парсер. Некоторые сайты даже раздают разные версии страниц в разных местах, что распространено даже у крупных, менее технически зрелых розничных продавцов. Если вы не следите за такими изменениями, скрапер может работать несколько дней, при этом тихо ничего не собирая.
Встраивайте мониторинг с самого начала. Простой и эффективный подход: небольшой юнит-тест для каждого типа страниц: один для страницы результатов поиска, один для страницы товара, один для страницы отзывов, каждый проверяет наличие нужных полей. Запускайте эти проверки по расписанию для нескольких репрезентативных URL, чтобы обнаружить критические изменения с помощью небольшого числа запросов, а не обнаруживать их после того, как полный обход вернул пустой результат. Применяйте защитный парсинг: если селектор ничего не находит, делайте откат или логируйте это, а не записывайте пустую строку как настоящие данные.
7. Предусмотрите план работы с CAPTCHA
Когда сайт уверен, что имеет дело с автоматизацией, он нередко подаёт CAPTCHA. Они разработаны, чтобы полностью остановить ботов, и при любом реальном объёме вы не можете решать их вручную. У вас есть два варианта: управляемый сервис скрапинга, который обрабатывает проверки как часть загрузки страницы, или специализированный сервис решения CAPTCHA, такой как 2Captcha или AntiCaptcha, который вы подключаете только для шага решения.
Оценивайте компромиссы честно. Отдельные сервисы решения CAPTCHA могут работать медленно и добавлять стоимость за каждое решение, поэтому для сайта, который постоянно подаёт проверки, стоит задаться вопросом: остаётся ли скрапинг экономически оправданным при текущем подходе? Нередко более чистым ответом является слой загрузки, который предъявляет реалистичные отпечатки и изначально не провоцирует большинство проверок, что в разы сокращает их число. Обход CAPTCHA при скрапинге подробнее разбирает варианты.
Применяем советы вместе
Ни один отдельный совет не является панацеей, и в этом суть: блокировки возникают, когда вы выглядите автоматизированным сразу по нескольким параметрам, поэтому защитные меры накапливаются. Ротируйте IP, отправляйте реальные и актуальные заголовки, темпируйте запросы с разбросом, обходите honeypot-ловушки, отслеживайте изменения разметки и держите план на случай CAPTCHA. Для большинства целей чистой ротации в сочетании с правильными заголовками достаточно; более тяжёлые тактики (headless-рендеринг, обработка CAPTCHA) применяются только на самых защищённых сайтах.
Именно здесь управляемый слой оправдывает себя. Поддерживать пул прокси, headless-флот и конвейер обработки CAPTCHA это реальная, постоянная работа. Объединение ротации, рендеринга и обработки проверок в одном вызове API позволяет тратить время на нужные данные, а не на инфраструктуру, которая к ним ведёт.
Ключевые выводы
- Ротируйте IP и соблюдайте ответственность. Распределяйте запросы по пулу, чтобы ни один адрес не демонстрировал паттерна, и скрапьте только публичные данные в пределах ограничений, указанных сайтом.
- Отправляйте реальные, актуальные заголовки. Всегда предъявляйте легитимный и свежий User-Agent и следите за согласованностью остальных заголовков с заявленным браузером.
- Ограничивайте скорость со случайным разбросом. Используйте случайные задержки и соблюдайте crawl-delay, чтобы ваш ритм выглядел человеческим и никогда не перегружал сервер.
- Используйте рендеринг и решение CAPTCHA только при необходимости. Обращайтесь к headless-браузеру или решателю CAPTCHA только на сайтах, которые этого требуют; сначала проверьте наличие внутреннего JSON API.
- Мониторьте и применяйте защитный парсинг. Тестируйте каждый тип страниц по расписанию, чтобы быстро обнаруживать изменения разметки, и при отсутствии данных делайте откат или логируйте, не записывая пустые строки.
Часто задаваемые вопросы
Какие советы по веб-скрапингу наиболее важны для предотвращения блокировок?
Наиболее эффективные меры: ротация IP-адресов, чтобы ни один не демонстрировал подозрительного паттерна, отправка реального и актуального User-Agent с согласованными заголовками, а также темпирование запросов со случайными задержками вместо роботизированного ритма. Помимо этого, избегайте honeypot-ссылок, отслеживайте изменения разметки на целевом сайте и заготовьте план для работы с CAPTCHA. Для большинства сайтов чистой ротации в сочетании с правильными заголовками вполне достаточно; более тяжёлые тактики актуальны только для агрессивных целей.
Почему ротация IP-адресов так важна?
Самый распространённый способ обнаружения скрапера сайтом состоит в проверке IP-адреса, с которого поступает каждый запрос. Сотни запросов с одного адреса это явная сигнатура бота, поэтому сайт ограничивает, проверяет или блокирует его. Ротация по пулу адресов распределяет трафик таким образом, что ни один IP не накапливает блокируемую историю. Для мягких целей достаточно датацентровых IP; сайты с развитыми списками блокировки могут потребовать жилых или мобильных адресов, которые воспринимаются как обычные потребительские подключения.
Как долго нужно ждать между запросами?
Универсального числа нет, но случайные задержки в диапазоне от нескольких секунд до примерно десяти подходят для многих целей. Главное рандомизировать, а не отправлять запросы с фиксированным интервалом, поскольку идеально равномерный ритм сам по себе является отпечатком бота. Следите за ответами цели: если они начинают замедляться, снижайте темп, а не увеличивайте его. Для вежливого краулинга проверьте robots.txt сайта на наличие значения Crawl-delay и соблюдайте его.
Когда действительно нужен headless-браузер?
Только когда страница строит контент на стороне клиента с помощью JavaScript, то есть данные отсутствуют в начальном HTML, возвращаемом простым HTTP-запросом. Headless-браузеры вроде Playwright, Puppeteer и Selenium запускают страницу как настоящий пользователь, но требуют много CPU и памяти, что ограничивает их количество. Прежде чем брать на себя эти расходы, проверьте вкладку сети на наличие внутреннего JSON API, который вызывает страница: прямое обращение к нему быстрее и стабильнее, чем парсинг отрисованного результата.
Что такое honeypot-ловушка и как её избежать?
Honeypot это ссылка или элемент, скрытый от людей, но видимый краулеру, который слепо переходит по каждой ссылке; он специально размещён, чтобы поймать ботов. Переход по ней помечает вас как автоматизированный агент и может мгновенно заблокировать. Избегайте ловушек, пропуская элементы, скрытые CSS с помощью display: none или visibility: hidden, переходя по ссылкам только из доверенных и видимых частей страницы и изучая структуру страницы перед массовым сбором ссылок.
Может ли Crawlbase справиться с ротацией и CAPTCHA вместо меня?
Да. Crawlbase Crawling API ротирует IP, предъявляет реалистичные отпечатки браузера, опционально рендерит JavaScript и обрабатывает решаемые проверки, возвращая чистый HTML из одного вызова. Если вам нужна только ротация для существующего HTTP-клиента, Smart AI Proxy предоставляет один эндпоинт, который за кулисами циклически использует большой пул жилых и датацентровых адресов. В обоих случаях вы делегируете пул прокси, headless-флот и конвейер CAPTCHA, а не создаёте и поддерживаете их самостоятельно.
Обходите любой сайт в масштабе, без борьбы с инфраструктурой.
Crawlbase берёт на себя прокси, отпечатки и CAPTCHA, чтобы ваша команда выпускала конвейеры данных вместо поддержки обвязки краулинга. 1 000 запросов бесплатно, без карты.
