Основная информация
Библиотека fake_useragent обеспечивает удобную генерацию фейковых значений User-Agent, что достаточно востребовано в сфере автоматизации и парсинга. Заметно облегчается процесс маскировки скрипта под рядового пользователя. Есть большое количество инструментов для настройки режима добавления новых заголовков и их смену. Такой подход позволяет заметно снизить вероятность получения блокировки.
Установка осуществляется при помощи стандартной команды:
pip install fake-useragent
Перед использованием в коде необходимо осуществить импорт:
from fake_useragent import UserAgent
Экземпляр класса можно создать двумя способами, в контексте дальнейшей работы они не отличаются.
ua = fake_useragent.UserAgent() # или ua = UserAgent()
Для запросов можно использовать обычный цикл:
for x in range(10):
fake_ua = {'user-agent': ua.random}
response = requests.get(url=url, headers=fake_ua)
print(response.text)
Данный цикл работает следующим образом. На текущей итерации при помощи метода .random генерируется новый экземпляр класса UserAgent. Далее полученный UserAgent используется для выполнения GET-запроса. Полученный результат выводится при помощи стандартного print.
Пример реального использования представлен ниже.
# Импортируем необходимые библиотеки
from fake_useragent import UserAgent
import requests
import time
from random import randint
# Функция для выполнения GET-запроса с подменой User-Agent
def make_request(url, headers):
try:
response = requests.get(url, headers=headers, timeout=10)
if response.status_code == 200:
return response.text
else:
return f"Ошибка: получен статус-код {response.status_code}"
except Exception as e:
return f"Произошла ошибка: {e}"
# Инициализация
url = "http://httpbin.org/user-agent"
ua = UserAgent()
# Цикл для выполнения 10 запросов с разными User-Agent и случайными задержками
for i in range(10):
fake_ua = {'User-Agent': ua.random} # Генерация случайного User-Agent
print(f"Итерация {i + 1} с User-Agent: {fake_ua['User-Agent']}")
# Выполнение запроса
response_text = make_request(url, fake_ua)
print(f"Ответ сервера: {response_text}")
# Случайная задержка от 1 до 5 секунд
sleep_time = randint(1, 5)
print(f"Задержка на {sleep_time} секунд")
time.sleep(sleep_time)
Далее код будет разобран подробнее.
Функция make_request принимает на вход URL и заголовки, далее осуществляется выполнение GET-запроса. Если возвращается код 200, функция передает текст ответа, если код другой – возвращается текст ошибки.
На этапе инициализации переменных указывается нужный URL и создается новый экземпляр класса. Далее запускается цикл, на каждой итерации:
— создается новый User-Agent;
— осуществляется вызов функции make_request для передачи нового GET- запроса;
— выводится полученный ответ;
— для дополнительной защиты добавляется случайная пауза в диапазоне 1-5 секунд.
Дополнительные возможности библиотеки
Ограничение исходного списка обозревателей
В аргументе browsers можно явно передать список обозревателей для генерации. Пример реализации:
from fake_useragent import UserAgent ua = UserAgent(browsers=['edge', 'chrome']) print(ua.random)
По умолчанию fake_useragent поддерживает следующие браузеры:
chrome — для генерации User-Agent браузера Google Chrome;
edge — для генерации User-Agent браузера Microsoft Edge;
firefox — для генерации User-Agent браузера Mozilla Firefox;
safari — для генерации User-Agent браузера Apple Safari.
Аргумент os для указания операционных систем
По аналогичной схеме можно ограничить набор операционных систем. Пример:
from fake_useragent import UserAgent ua = UserAgent(os='linux') print(ua.random)
По умолчанию, fake_useragent поддерживает следующие операционные системы:
windows — для генерации User-Agent с операционной системой Windows;
macos — для macOS;
linux — для Linux.
Сочетание browsers и os позволяет получить узкий набор User-Agent под определенные задачи.
Аргумент min_percentage в библиотеке fake_useragent
Еще одна интересная возможность – фильтрация браузеров по популярности. Аргумент представляет собой минимальный процент популярности User-Agent, который будет использоваться при генерации. По умолчанию установлено значение 0, что означает полное отсутствие ограничений.
Это позволяет лучше имитировать доступ к сайту обычных пользователей, поскольку частое обращение через непопулярные браузеры может вызвать подозрение. Также контент сайта может быть не оптимизирован для работы с непопулярными браузерами, вплоть до нарушения работоспособности парсера.