User agents для веб-скрапинга 101

Использование правильного агента пользователя при выполнении задач по веб-скрапингу данных имеет решающее значение для успешного сбора целевых данных и предотвращения их блокировки. Это единственное руководство, которое вам понадобится для начала работы.
3 min read
Chrome browser and web scraping to data collection

В этой статье вы узнаете:

Что такое User-Agent?

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

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

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

User-Agent: Mozilla/5.0 (system-information>) 
<platform> (<platform-details>) <extensions>

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

Mozilla/5.0 (compatible; Googlebot/2.1; 
+http://www.google.com/bot.html)

Вы можете узнать больше о различных строках, которые можно использовать для браузера Mozilla, непосредственно на сайте разработчиков.

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

Chrome для Android

Phone UA:

Mozilla/5.0 (Linux; <Android Version>; <Build Tag etc.>)AppleWebKit/<WebKit Rev> (KHTML, like Gecko) Chrome/<Chrome Rev>Mobile Safari/<WebKit Rev>

Tablet UA:

Mozilla/5.0 (Linux; <Android Version>; <Build Tag etc.>)AppleWebKit/<WebKit Rev> (KHTML, like Gecko) Chrome/<Chrome Rev>Safari/<WebKit Rev>

Почему вы должны использовать User-Agent?

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

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

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

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

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

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

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

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

#2: Ротация пользовательских агентов

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

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

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

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

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

Как чередовать агентов пользователей

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

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

# you will need to install Selenium and fake_useragent using pip or similar 
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from fake_useragent import UserAgentimport sleep

options = Options() options.add_argument(f'user-agent={UserAgent().random}')
driver = webdriver.Chrome(chrome_options=options) driver.get("http://www.whatsmyua.info/")

sleep(5)
driver.execute_cdp_cmd("Network.enable", {}) driver.execute_cdp_cmd("Network.setExtraHTTPHeaders", {"headers": {"User-Agent": f"{UserAgent().random}"}}) driver.get ("http://www.whatsmyua.info/")

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

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

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

Ротация агентов использования с помощью прокси-сервера

Вы можете избежать головной боли и хлопот, связанных с ручным определением списков и ротацией 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 очень важно для предотвращения блокировки.

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

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