Когда ваш парсер обходит страницы, он должен как-то представиться сайту. За имя клиентского приложения отвечает параметр user-agent. От него могут зависеть различные опции дизайна и прочее. Но многие крупные сайты используют значения строки user-агента в первую очередь для организации защиты от злонамеренных действий, в том числе для блокировки парсинга.
Ниже расскажем, что такое пользовательские агенты и как сделать так, чтобы парсер не блокировался антифрод-системами.
Что такое User-агенты?
User Agent – это текстовый идентификатор, который программное обеспечение отправляет внутри HTTP-запросов при организации подключений к сайтам или web-сервисам.
Если по-простому, то это условное имя браузера или другой программы: поискового бота, паука и т.п.
Примеры пользовательского агента:
- Актуальная версия Google Chrome (v 124), работающая на ПК под управлением ОС Windows, представляется так – «Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36»
- Браузер Firefox – «Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0»
- Chrome, но уже на мобильных устройствах – «Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Mobile Safari/537.36»
- Основной поисковый робот Яндекса – «Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.268»
- Поисковый бот Google – «Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)»
- И т.д.
Можно заметить, что внутри строки юзер-агента передаётся сразу несколько параметров:
- Текущая платформа (тип операционной системы, её разрядность и архитектура процессора, например, ARM, Win64, Linux и т.п.).
- Разработчик браузера (Chrome, Safari, Mozilla).
- Версия браузера (для мобильных или десктопов, номер сборки).
Наиболее внимательные читатели заметят, что строки User-агентов у разных браузеров очень похожи, но есть у них и отличия. Как раз по этим отличиям сайты и определяют тип браузера.
Если хотите больше подробностей, то на Wikipedia можно найти причины такой «похожести». Всё дело в том, что в период активной борьбы за рынок они пытались представляться браузерами конкурентов. В итоге современные строки user-agent могут содержать одновременно до 5 имён.
Немного статистики: какой user-agent выбрать для парсера
По логике вещей, самым распространённым юзер-агентом будет тот, который используется на наибольшем числе устройств. На текущий момент это Google Chrome стабильной версии, работающий в ОС Android. По статистике Statcounter Андроидом пользуется свыше 43% всех пользователей сети.
Если говорить о десктопах, то тут безусловный лидер – Windows + тот же Chrome. Более 27% от всех устройств, имеющих выход в сеть.
Давно не меняющийся лидер среди всех браузеров, а значит и самый популярный user-agent – Google Chrome. От его имени отправляется более 65% всех интернет-запросов.
Итак, самые беспроигрышные варианты для указания в HTTP-запросах при тонкой настройке парсинга:
- Для десктопов – Win64 + стабильная версия Хрома. На момент написания статьи это Chrome 124. То есть строка юзер-агента должна выглядеть так: «Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36»
- Для мобильных – Android + стабильная версия Хрома. Версии десктопного и мобильного браузера обычно совпадают. Строка юзер-агента будет выглядеть так: «Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Mobile Safari/537.36»
Как и для чего используется User-Agent?
Стоит ли упоминать, что user-agent – это один из самых важных параметров цифрового отпечатка?
Обратите внимание! Для стабильного парсинга без блокировок недостаточно подделать User-Agent, сайты могут собирать о клиентских браузерах/приложениях гораздо больше информации. Подробности в материале про лучшие практики парсинга. Например, могут пригодиться безголовые браузеры и качественные прокси.
Ниже опишем наиболее популярные задачи, которые позволяет решить анализ строк с пользовательским агентом:
- Ведение статистики и сбор данных о посетителях сайта: какими браузерами они пользуются, на каких операционных системах работают и с каких гаджетов выходят в сеть. Чем лучше вы будете понимать свою аудиторию, тем качественнее контент сможете им предложить.
- Таргетинг рекламы. Специальные небольшие баннеры можно показывать только владельцам Android-устройств или тем, кто работает с iOS. Большие баннеры лучше показывать только на десктопах и т.п.
- Оптимизация дизайна. Каждый тип устройства может получать ту версию сайта, которая лучше всего для него подходит. На версию браузера можно завязать отдельные CSS-свойства и персонализировать контент.
- Обнаружение вредоносного трафика и блокировка ботов. Многие крупные сайты открыто запрещают массовые запросы и стараются исключить из общего потока боты и парсеры, создающие паразитную нагрузку. User-agent при этом играет важную роль, так как именно он отвечает за идентификацию клиентского ПО. В зависимости от полученных параметров пользовательского агента могут запускаться те или иные скрипты безопасности.
Нужно ли использовать user-agent при парсинге?
Конечно нужно. Если вы будете отправлять запросы к сайту не представившись, то это будет первый сигнал для блокировки паразитного трафика.
Тут скорее вопрос в том, как и кем представиться:
- Многие сайты сознательно запрещают обход страниц ботами и поисковыми пауками (подробнее о разнице между парсингом и web-краулингом). Сайты могут блокировать посещения только конкретным ботам, а могут вести белый список (то есть запрещать краулинг всем, кроме списка избранных).
- Если прописать чужое имя бота, то принадлежность легко может быть проверена за счёт обратных запросов – при анализе IP-адресов на соответствие принадлежности к доменным именам. Например, тот же Yandex официально описывает процедуру проверки.
- Если представиться популярным браузером пользователя, то могут инициироваться дополнительные средства проверки цифровых отпечатков – наличие поддержки JavaScript, параметры юзерагента в JavaScript-окружении (оно прописывается отдельно от строки в HTTP-запросе, запрашивается через функцию window.navigator.userAgent), набор шрифтов, куки и т.п.
- Если представиться устаревшим браузером, то это будет одним из наиболее вероятных атрибут парсера.
- Если версия браузера будет придуманной (несуществующей), то бан можно получить просто так.
- И т.д.
Лучшие практики и рекомендации – как избежать блокировки по user-агенту
Совет 1. Используйте user agent, соответствующий вашему реальному устройству.
Всё дело в том, что реальную операционную систему и аппаратную платформу можно проверить разными способами. Продвинутые антифрод-системы могут сверять списки предустановленных шрифтов. Естественно, в Linux-системах и на MacOS разные дефолтные шрифты. С очень большой вероятностью внутри бесплатного дистрибутива Ubuntu не окажется проприетарных шрифтов, защищённых авторскими правами Microsoft.
Не менее интересный приём – HTML5 Canvas-отпечатки. С помощью встроенных средств браузера на странице рисуются определённые элементы. В разных операционных системах отрисовка происходит по-разному. Соответственно, собирая цвета из определённых участков страницы, можно проверить соврал пользователь в своём юзер-агенте или нет.
По аналогии могут применяться скрипты, проверяющие платформу на основе других технологий: WebGL, WebRTC и т.п.
Совет 2. Используйте актуальные стабильные версии браузеров.
Тоже интересный момент: внутри user-агента лучше всего прописать версию браузера, отстающую от текущей стабильной ветки не более чем на 2 версии.
Дело в том, что устаревшие версии браузеров исключаются из списка поддерживаемых многими разработчиками. Продолжая пользоваться старым браузером, вы рискуете пострадать из-за отсутствия совместимости и поддержки актуальных веб-стандартов.
Команды программистов крупнейших web-сайтов и сервисов могут использовать такой признак для выявления подозрительного трафика.
Плюс, многие антидетект-браузеры работают на старых версиях Chromium. Это ли не повод детальнее присмотреться к подключившимся клиентам?
Совет 3. Ротируйте IP-адреса и отпечатки
Чтобы точнее выявить проблемные запросы, антифрод-системам нужно время. Например, они могут засекать задержки между запросами с одного IP-адреса, могут сравнивать идентификаторы, прописанные в cookies, а анализировать строки с user-агентами.
Меняя цифровые отпечатки в паре с IP-адресами, вы подключаетесь к целевому сайту каждый раз как будто с нового устройства. По крайней мере, именно так это выглядит со стороны антифрод систем.
Защитные механизмы просто не успевают сработать.
Выводы
Анализ пользовательского агента – это основа многих защитных систем и механизмов на крупных сайтах. Да, только одного user-агента бывает недостаточно, поэтому параметр изучается вкупе с другими данными: куки, HTML5-canvas, WebGL и пр.
Указывать user agent при парсинге нужно обязательно, но делать это нужно правильно, чтобы антифрод-системы не могли найти изъянов.
Помочь с обходом блокировок и с отправкой большого числа запросов к одному и тому же сайту могут ротационные прокси.
Качественные мобильные и резидентные прокси можно купить у нас. Froxy – это более 8 млн. IP с таргетингом до уровня города. Оплачивается только трафик, количество параллельных подключений может быть любым (до 1000 портов в одни руки).