Руководство по веб-парсингу с использованием мобильного прокси
Пошаговый алгоритм действий для сбора данных через мобильный прокси: подключение к нему, выбор режима ротации или «привязанных» сессий для каждого задания, а также диагностика блокировок, которые по-прежнему возникают даже при использовании абсолютно «чистого» IP-адреса.
- Один конечный узел, любой клиент — всё, что поддерживает HTTP(S) или SOCKS5, работает без изменений.
- Фиксированный или с чередованием — удерживать IP-адрес для авторизованного задания, чередовать между независимыми заданиями.
- Неограниченная пропускная способность — без учета трафика, поэтому размер страницы никак не влияет на стоимость сканирования.
- Реальные IP-адреса операторов связи — запросы поступают из мобильной сети, а не из диапазона хостинга.
Выполнять поворот по требованию на границах задания, а не по фиксированному таймеру.
Используйте один IP-адрес выхода для всего потока сеанса, независимо от его продолжительности.
Подключение мобильного прокси к вашему скребкеру
Мобильный прокси — это обычный прокси-сервер перенаправления, который просто проходит через сеть оператора мобильной связи. Вашему скрапперу об этом не нужно знать. Если ваш клиент может взаимодействовать с прокси-сервером HTTP или SOCKS5 — а все популярные клиенты это умеют — то он уже поддерживает мобильные прокси, и для интеграции достаточно просто указать строку подключения, а не использовать SDK.
- Укажите конечную точку, порт и протокол
Вам будет указан хост, порт и тип протокола: HTTP(S), SOCKS5 или оба. SOCKS5 следует выбрать, если вам нужен трафик UDP или трафик, отличный от HTTP; в остальных случаях для сбора данных это различие практически не имеет значения.
- Выберите модель аутентификации
Либо добавьте в белый список публичный IP-адрес, с которого работает ваш скрейпер, чтобы учетные данные вообще не передавались, либо используйте имя пользователя и пароль. Добавление в белый список — более надежный вариант для стационарного сервера, который позволяет избежать целого ряда проблем, связанных с автоматизацией работы браузера, о которых пойдет речь далее в этом разделе.
- Создать один URL-адрес прокси-сервера
Практически каждый клиент поддерживает один и тот же формат: http://user:pass@host:port. Храните его в переменной среды, а не в исходном коде — это учетные данные, и в противном случае они окажутся в общедоступном репозитории.
- Прежде чем доверять чему-либо, проверьте IP-адрес, с которого поступает запрос
Запросите услугу IP-echo через прокси и убедитесь, что указанный адрес и страна соответствуют действительности, а также что ASN принадлежит оператору мобильной связи, а не хостинг-провайдеру. Пропустив эту проверку, люди тратят целый день на устранение неполадок, связанных с блокировками, которые на самом деле были вызваны неправильной настройкой прокси.
Если служба echo возвращает ваш собственный адрес, это означает, что прокси не используется вовсе. Большинство библиотек работают по принципу «fail open» — неверные настройки прокси игнорируются без каких-либо уведомлений, и запрос отправляется напрямую. Всегда проверяйте выходной адрес, прежде чем делать какие-либо выводы о целевом сервере.
Как только связь подтверждена, всё, что происходит дальше, касается скорее поведения, чем «технической стороны». Самым важным решением будет следующее.
Ротация сеансов и фиксированные сеансы: выбор для каждого задания
Ротация не всегда лучше стабильного IP-адреса — они решают противоположные задачи, и неправильный выбор часто становится причиной блокировок, которые кажутся необъяснимыми.
| Шаблон | Используйте его для | Он ломается, когда |
|---|---|---|
| Поворот по запросу | Анонимное сканирование множества независимых URL-адресов без аутентификации | Целевой сайт использует сессионный файл cookie или корзину — состояние привязано к IP-адресу, с которого оно было создано |
| Сессия с сохранением настроек | Всё, что доступно только после входа в систему, многоэтапные рабочие процессы, результаты с пагинацией, сохраняющие состояние | Вы удерживаете один IP-адрес так долго и наносите по нему столь сильные удары, что сам по себе этот показатель становится сигналом |
| Поворот только в случае сбоя | Длительные сканирования, при которых большинство запросов завершаются успешно, и вы хотите исключить проблемный IP-адрес | Вы выполняете ротацию на 429 и сразу же повторяете попытку — новый IP-адрес наследует ту же проблему со скоростью |
Практическое правило: переключайтесь между логическими задачами, но никогда не делайте этого в середине выполнения одной из них. Смена IP-адреса выхода в середине сеанса на сайте, требующем аутентификации, выглядит точно так же, как перехват сеанса, что является гораздо более тревожным сигналом, чем сам скрейпинг.
Именно поэтому таймер фиксированной ротации — плохой вариант по умолчанию. Таймер не знает о границах ваших заданий, поэтому рано или поздно он сработает между двумя запросами, которым пришлось делить один адрес. Проводите ротацию по требованию после завершения задания, а также в случае сбоя, чтобы своевременно отключить испорченный IP-адрес. Если вам необходимо использовать интервал, сделайте его длиннее, чем время выполнения вашего самого медленного отдельного задания.
A 429 заслуживает отдельного рассмотрения. Это именно та ошибка, которая указывает на неправильную частоту запросов, а смена IP-адреса для повторной отправки запроса приводит к тому, что проблема частоты воспринимается как проблема идентификации — именно так ситуация с медленным прохождением запросов перерастает из состояния ограничения в состояние полной блокировки. Соблюдайте параметр Retry-After, увеличивайте интервал между запросами по экспоненте и добавляйте джиттер, если используете параллельные рабочие процессы. Руководство по Python в этом кластере в коде заложена конфигурация повторных попыток.
Почему скрейперы по-прежнему блокируются даже при использовании «чистых» IP-адресов
Наличие хорошего IP-адреса — необходимое, но не достаточное условие. Системы защиты от ботов состоят из нескольких независимых уровней, а прокси решает проблему лишь на одном из них. Если вас по-прежнему блокируют даже при использовании «чистых» мобильных IP-адресов, ответ вы найдёте в этом списке:
- Отпечаток TLS (JA3/JA4) — Процесс установления соединения TLS в Python отличается от того, что используется в Chrome — у них разный порядок шифров и разные расширения. Запрос, выдающий себя за Chrome, но использующий протокол установления соединения, как в urllib3, вступает в противоречие сам с собой ещё до того, как будет прочитан хотя бы один заголовок. Такие библиотеки, как curl_cffi, имитируют профиль TLS реального браузера.
- HTTP/2 и порядок заголовков — Браузеры отправляют определённый набор заголовков в определённом порядке с определённой структурой псевдозаголовков. Запрос, состоящий всего из трёх заголовков, не является запросом браузера, что бы ни указывал параметр User-Agent.
- Утечка без видимых признаков — Наличие `navigator.webdriver`, отсутствующих плагинов и кодеков, а также рендерера WebGL с именем SwiftShader — все это указывает на автоматизированный браузер. Запустите Headful в виртуальной среде или воспользуйтесь плагином-стелсом, а затем проверьте результат на странице тестирования отпечатков, а не полагайтесь на догадки.
- Географическая несогласованность — Это полностью входит в компетенцию прокси-сервера: IP-адрес, с которого осуществляется выход из Великобритании, в сочетании с браузером, указывающим регион «America/New_York» и язык «en-US», является несоответствием, которое проверяется в режиме реального времени. Установите языковые настройки и часовой пояс в соответствии со страной, из которой вы выходите.
- Мобильный UA на стационарном IP-адресе — Заявление о том, что это Android-телефон из линейки устройств для центров обработки данных, представляет собой противоречие, которое может обнаружить любой уровень идентификации по отпечаткам. Если вы указываете мобильный User-Agent и мобильный viewport, IP-адрес выхода должен быть мобильным — в этом и заключается весь смысл данного типа прокси.
- Поведение — Измеряются: идеально равные интервалы, отсутствие движений мыши, мгновенное заполнение форм и частота запросов, которую ни один человек не смог бы выдержать. Ни один прокси-сервер не скрывает характер доступа; это удается только путем изменения самого характера доступа.
Прежде чем добавлять ещё один уровень защиты от ботов, ознакомьтесь со скучными пояснениями: файл robots.txt, возможно, уже указывает, что недоступно; сайт может предоставлять API, возвращающий те же данные в виде «чистого» JSON; а страница, которую вы анализируете, может загружаться из внутреннего конечного пункта, к которому вы могли бы обратиться напрямую. Час работы во вкладке «Сеть» часто заменяет неделю работы по борьбе с ботами.
Ограничения частоты запросов, файл robots.txt и соблюдение правил
Сбор общедоступных данных, как правило, является законным, и использование прокси-сервера никак не влияет на этот вывод. Влияние оказывают все сопутствующие сбору действия.
Стоит обратить внимание на дело «hiQ Labs против LinkedIn». В 2022 году Апелляционный суд Девятого округа постановил, что скрапинг общедоступных данных не нарушает Закон о компьютерном мошенничестве и злоупотреблении — это действительно важное решение, и обычно на этом краткое изложение заканчивается. Но не должно. При повторном рассмотрении дела LinkedIn выиграла по иску о нарушении договора: hiQ согласилась с решением суда о выплате 500 000 долларов, постоянным судебным запретом, обязывающим компанию прекратить сбор данных и уничтожить собранные данные и исходный код, в результате чего компания прекратила свою деятельность. Это не было уголовным преступлением, связанным с несанкционированным вторжением в компьютерную систему, но тем не менее оказалось фатальным.
Из этого следует вывод: вопрос доступа и вопрос договора — это две разные вещи. Публичный скрапинг не является хакерством; договор, который вы приняли, по-прежнему имеет юридическую силу. Если вы создали учетную запись, согласились с условиями или использовали ключ API, вы попадаете в сферу действия договора, независимо от того, насколько общедоступными кажутся данные.
- robots.txt — В большинстве юрисдикций этот документ не имеет юридической силы, однако его прочтение не требует затрат, а игнорирование свидетельствует о недобросовестности. Согласно недавним европейским рекомендациям он также рассматривается как машиночитаемый сигнал о закреплении прав, поэтому сейчас он имеет большее значение, чем несколько лет назад.
- Персональные данные — Тот факт, что данные являются общедоступными, не означает, что на них не распространяется действие GDPR или CCPA. Если собираемые вами данные позволяют идентифицировать людей, вам необходимо иметь законное основание для их сбора, и эта обязанность совершенно не зависит от того, каким образом вы их получили.
- Оценить — Нарушение нормативных требований сервиса, из которого вы получаете данные, — это самый быстрый способ превратить техническую проблему в юридическую. Параллелизм должен регулироваться на уровне каждого целевого хоста, а не глобально: восемь параллельных запросов, распределенных по восьми доменам, — это норма, а восемь запросов на один хост — это пиковая нагрузка.
- Условия предоставления услуг — Реальная зона риска для большинства проектов. Внимательно ознакомьтесь с условиями соглашения и честно ответьте, был ли в этом замешан какой-либо аккаунт.
Ничто из вышесказанного не является юридической консультацией, а законодательство в разных юрисдикциях может различаться. Именно такие вопросы стоит задать до начала сканирования, а не после него.
Получите выделенный прокси-сервер для веб-парсинга
Активные локации PXM2 — выберите страну, из которой, по вашему замыслу, должен поступать запрос, и получите выделенный IP-адрес с поддержкой 4G/5G, неограниченной пропускной способностью и возможностью смены адреса:
Великобритания
Испания
Индия
Часто задаваемые вопросы
Как использовать мобильный прокси для веб-парсинга?
Настройте ваш клиент на конечную точку прокси и пройдите аутентификацию — либо включив IP-адрес вашего сервера в список разрешенных, либо с помощью имени пользователя и пароля. Все популярные клиенты обращаются к прокси одинаково — через URL-адрес вида http://user:pass@host:port. Затем, прежде чем доверять чему-либо, проверьте IP-адрес выхода: отправьте запрос на службу IP-echo через прокси и убедитесь, что адрес и страна соответствуют вашим ожиданиям.
Стоит ли менять прокси при каждом запросе?
Только для анонимного сканирования отдельных URL-адресов. Как только в процесс вступают сессионный куки, корзина покупок, набор результатов с пагинацией или авторизация, ротация по запросам приводит к сбою задания — это состояние привязано к IP-адресу, с которого оно было создано. Общее правило заключается в том, что ротацию следует осуществлять между логическими заданиями, но ни в коем случае не в середине одного задания.
Почему меня по-прежнему блокируют при использовании прокси?
Ведь IP-адрес — это лишь один из нескольких сигналов. Системы защиты от ботов также анализируют ваш TLS-хэндшейк, порядок заголовков HTTP/2, наличие утечки флагов автоматизации в браузере, а также соответствие заявленной локали и часового пояса стране, из которой осуществляется выходной трафик. «Чистый» мобильный IP-адрес в сочетании со стандартным «безголовым» отпечатком по-прежнему явно указывает на бота.
Что такое «закреплённая сессия» и когда она нужна?
«Стикки-сессия» сохраняет один и тот же IP-адрес выхода столько, сколько вам нужно, вместо того, чтобы он менялся в процессе работы. Такая сессия необходима для любых операций, требующих аутентификации, для многоэтапных процессов, а также для сканирования с пагинацией, в котором сохраняется состояние. Смена IP-адреса выхода в середине сессии на сайте, где требуется авторизация, выглядит как «угон сессии», что является более негативным сигналом, чем сам скрапинг.
Как часто следует менять прокси-сервер для сбора данных?
Связывайте ротацию с границами заданий, а не с временем. Фиксированный таймер в конечном итоге сработает посреди многоэтапного запроса и прервет его. Если вы всё же хотите использовать правило, основанное на времени, установите интервал длиннее, чем самое медленное отдельное задание, и предусмотрите ротацию также при сбое, чтобы проблемный IP-адрес оперативно исключался из списка.
Связанные руководства по мобильным прокси-серверам
Данное руководство представляет собой обзор, не привязанный к конкретным инструментам. В остальных разделах кластера более подробно рассматриваются вопросы выбора прокси-уровня и код для конкретных стеков.
Руководства по веб-парсингу
Основные руководства по мобильным прокси-серверам
Собирать данные с реального IP-адреса провайдера
Специализированные модемы 4G/5G с неограниченной пропускной способностью и неограниченным количеством смен адреса — меняйте IP-адрес в пределах рабочей зоны или сохраняйте один IP-адрес на весь период сеанса.
Получить прокси для скрапинга