Пользовательские агенты для веб-парсинга

Что такое агент пользователя?

Этот термин относится к любому программному обеспечению, которое облегчает взаимодействие конечного пользователя с веб-контентом. Строка агента пользователя (АП) - это текст, который программа клиентского компьютера отправляет в запросе.

Строка агента пользователя помогает целевому серверу определить, какой браузер, тип устройства и операционная система используются. Например, строка сообщает серверу, что на вашем компьютере используется браузер Chrome и операционная система Windows 10. Сервер может использовать эту информацию для настройки ответа в соответствии с типом устройства, ОС и браузера.

Большинство браузеров отправляют заголовок агента пользователя в следующем формате, хотя в выборе агентов пользователя нет особой последовательности:

syntax for choosing a user agent - User-Agent: Mozilla/5.0 (<system-information.) <platform> (<platform-details>) <extensions> white text on grey background

Каждый браузер добавляет свои компоненты комментариев, такие как платформа или RV (release version). Mozilla предлагает примеры строк, которые должны использоваться для парсеров:

Crawler string example - white text on grey background - Mozilla/5.0 (compatible; Googlebot/2.1; +http:://www.google.com/bot.html

Ниже приведены примеры с сайта разработчиков Chrome того, как выглядит формат строки UA для различных устройств и браузеров:

Chrome для Android

Телефонный UA:

white text on grey background - user agent to collect data as a android linux device or some other mobile device such as an apple iphone

Mozilla/5.0 (Linux; ; )AppleWebKit/ (KHTML, like Gecko) Chrome/Mobile Safari/

Планшетный UA:

White text on grey background - syntax for user-agent to appear as either android tablet or apple ipad

Почему необходимо использовать агент пользователя?

При проведении веб-парсинга иногда можно обнаружить, что веб-сервер блокирует определенные агенты пользователя. В основном это связано с тем, что он идентифицирует источник как бота, а некоторые сайты не допускают ботов-парсеров. Более сложные сайты делают это наоборот, т.е. разрешают агентам пользователей, которые, по их мнению, являются допустимыми, выполнять задания на парсинг. Действительно сложные сайты проверяют, действительно ли поведение браузера соответствует заявленному пользовательскому агенту.

Вы можете подумать, что правильным решением будет не указывать в запросах агент пользователя. Однако это заставляет инструменты использовать UA по умолчанию. Во многих случаях целевой веб-сервер заносит его в черный список и блокирует.

Как же сделать так, чтобы ваш пользовательский агент не был заблокирован?

Советы, как избежать запрета UA при парсинге

#1: Используйте реальный пользовательский агент

Если ваш пользовательский агент не принадлежит одному из основных браузеров, некоторые сайты будут блокировать его запросы. Многие веб-парсеры, основанные на ботах, пропускают этап определения UA, что приводит к тому, что они могут быть обнаружены и забанены за отсутствие неправильного UA по умолчанию.

Избежать этой проблемы можно, задав широко используемый UA для своего веб-парсера. Большой список популярных агентов пользователя можно найти здесь. Вы можете составить список популярных строк и чередовать их, выполняя cURL-запрос к веб-сайту. Тем не менее, мы рекомендуем использовать пользовательский агент вашего браузера, поскольку поведение браузера с большей вероятностью будет соответствовать ожидаемому от пользовательского агента, если вы не будете слишком сильно его менять.

#2: Чередуйте пользовательские агенты

При выполнении многочисленных запросов в процессе веб-парсинга их следует чередовать. Это позволит свести к минимуму вероятность того, что веб-сервер определит и заблокирует ваши UA.

Как можно рандомизировать запросы?

Одним из решений является смена IP-адреса запроса с помощью вращающихся прокси-серверов. Таким образом, каждый раз отправляется разный набор заголовков. На стороне веб-сервера это будет выглядеть так, как будто запрос поступает с разных компьютеров и из разных браузеров.

Совет: Агент пользователя - это заголовок, но заголовки включают в себя гораздо больше, чем просто агенты пользователя. Нельзя просто отправлять случайные заголовки, необходимо убедиться, что отправляемый пользовательский агент соответствует отправляемым заголовкам.

Вы можете использовать botcheck.luminatio.io, чтобы проверить, соответствуют ли отправляемые вами заголовки тому, что ожидается от пользовательского агента.

Как выполнить ротацию агентов пользователя

Прежде всего, необходимо собрать список строк агентов пользователя. Мы рекомендуем использовать строки из реальных браузеров, которые можно найти здесь. Следующий шаг - добавление этих строк в список Python. И, наконец, определить, что каждый запрос выбирает случайную строку из списка.

Пример ротации пользовательских агентов с помощью Python 3 и Selenium 4 можно посмотреть в этом обсуждении на stack overflow. Пример кода выглядит следующим образом:

white text on grey background coding environment, python code on how to rotate user agents

Какую бы программу или метод вы ни выбрали для ротации UA-заголовков, во избежание обнаружения и блокировки следует придерживаться одних и тех же приемов:

  • #1: Чередовать полный набор заголовков, связанных с каждым UA.
  • #2: Отправлять заголовки в том порядке, в котором их обычно отправляет реальный браузер
  • #3: Используйте предыдущую страницу, которую вы посетили, в качестве "заголовка реферера".

Совет: при использовании заголовка referrer необходимо убедиться, что IP-адрес и cookies не меняются. В идеале нужно действительно посетить предыдущую страницу, чтобы на целевом сервере была запись о ней.

#3: Чередуйте агентов использования с помощью прокси-сервера

Вы можете избежать головной боли и хлопот, связанных с ручным определением списков и ротацией IP-адресов, используя ротационную сеть прокси-серверов. Прокси-серверы позволяют настроить автоматическую ротацию IP-адресов и строк UA. Это означает, что ваши запросы выглядят так, как будто они поступают из различных браузеров. Это значительно снижает количество блокировок и увеличивает процент успешных запросов, так как создается впечатление, что запросы поступают от реальных пользователей. Следует помнить, что только специальные прокси-серверы, использующие технологию Data Unlocking, способны правильно управлять и ротировать пользовательские агенты.

Список пользовательских агентов для парсинга 

Существует большое количество браузерных/телефонных/устройств/ботов/поисковых машин/инструментов разработчиков, которые могут быть использованы для эмуляции различных браузеров при использовании таких инструментов, как wget и cURL. К ним относятся:

  • Lynx: Lynx/2.8.8pre.4 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/2.12.23
  • Wget: Wget/1.15 (linux-gnu)
  • Curl: curl/7.35.0

  • HTC: Mozilla/5.0 (Linux; Android 7.0; HTC 10 Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.83 Mobile Safari/537.36
  • Google Nexus: Mozilla/5.0 (Linux; U; Android-4.0.3; en-us; Galaxy Nexus Build/IML74K) AppleWebKit/535.7 (KHTML, like Gecko) CrMo/16.0.912.75 Mobile Safari/535.7
  • Samsung Galaxy Note 4: Mozilla/5.0 (Linux; Android 6.0.1; SAMSUNG SM-N910F Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/4.0 Chrome/44.0.2403.133 Mobile Safari/537.36

  • Samsung Galaxy Note 3: Mozilla/5.0 (Linux; Android 5.0; SAMSUNG SM-N900 Build/LRX21V) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/2.1 Chrome/34.0.1847.76 Mobile Safari/537.36
  • Samsung Phone: Mozilla/5.0 (Linux; Android 6.0.1; SAMSUNG SM-G570Y Build/MMB29K) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/4.0 Chrome/44.0.2403.133 Mobile Safari/537.36
  • Bing’s Search Engine Bot: Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
  • Google’s Search Engine Bot: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
  • Apple iPhone: Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1

  • Apple iPad: Mozilla/5.0 (iPad; CPU OS 8_4_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12H321 Safari/600.1.4
  • Microsoft Internet Explorer 11 / IE 11: Mozilla/5.0 (compatible, MSIE 11, Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko
  • Microsoft Internet Explorer 10 / IE 10: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0; MDDCJS)

 

  • Microsoft Internet Explorer 9 / IE 9: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0;  Trident/5.0)
  • Microsoft Internet Explorer 8 / IE 8: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
  • Microsoft Internet Explorer 7 / IE 7: Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)
  • Microsoft Internet Explorer 6 / IE 6: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
  • Microsoft Edge: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393
  • Mozilla Firefox: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:53.0) Gecko/20100101 Firefox/53.0
  • Google Chrome: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36

Заключение

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