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