Как использовать ротационные резидентные прокси IPRoyal с Selenium на Python для веб-скрапинга
Практическое руководство по интеграции резидентных прокси IPRoyal с Selenium WebDriver на Python, включая аутентификацию, ротацию и устранение неполадок.
Обзор
Selenium — популярный инструмент для автоматизации браузера, но для масштабного скрапинга часто требуется ротация IP-адресов, чтобы избежать блокировок. Сеть резидентных прокси IPRoyal предоставляет большой пул IP-адресов с гибкими опциями ротации. В этом руководстве показано, как подключить Selenium к резидентным прокси IPRoyal с помощью Python, обрабатывать аутентификацию и менять IP-адреса между запросами.
Поскольку Selenium не во всех драйверах поддерживает аутентификацию прокси изначально, мы будем использовать пакет selenium-wire, который расширяет Selenium и аккуратно обрабатывает учётные данные прокси. В примерах ниже используется Chrome, но такой же подход работает и с другими браузерами, поддерживаемыми Selenium.
Предварительные требования
- Python 3.8 или новее
- Аккаунт IPRoyal с учётными данными резидентных прокси
- Базовое знакомство с Python и Selenium
- Установленный браузер Chrome и ChromeDriver (или альтернативный драйвер браузера)
Шаг 1: Соберите учётные данные прокси IPRoyal
Войдите в свою панель управления IPRoyal и найдите сведения об эндпоинте резидентных прокси. Вам понадобятся:
- Хост прокси (например,
geo.iproyal.comили хост, указанный в вашей панели управления) - Номер порта
- Имя пользователя
- Пароль
Резидентные прокси IPRoyal обычно предлагают как ротационные, так и липкие сессии. При ротационных сессиях каждый запрос (или каждая новая сессия браузера) может использовать другой IP. При липких сессиях вы можете сохранять один и тот же IP в течение определённого периода, используя идентификатор сессии в имени пользователя. Проверьте точный формат в своей панели управления — часто идентификатор сессии добавляется к имени пользователя, например yourusername-session-abc123.
Шаг 2: Установите Selenium и selenium-wire
Установите необходимые пакеты с помощью pip:
pip install selenium selenium-wire
Убедитесь, что версия ChromeDriver соответствует установленной версии Chrome. Вы можете скачать ChromeDriver со страницы Chrome for Testing или использовать менеджер вроде webdriver-manager.
Шаг 3: Настройте Selenium с аутентификацией прокси IPRoyal
Создайте скрипт Python, который настраивает драйвер Selenium Wire с вашими учётными данными прокси IPRoyal. Замените заполнители на свои реальные значения.
from seleniumwire import webdriver
# Replace with your IPRoyal proxy details
proxy_user = "your_username"
proxy_pass = "your_password"
proxy_host = "your-iproyal-host"
proxy_port = "your_port"
# Build the proxy URL
proxy_url = f"http://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}"
# Configure Selenium Wire proxy options
proxy_options = {
'proxy': {
'http': proxy_url,
'https': proxy_url,
'no_proxy': 'localhost,127.0.0.1'
}
}
# Launch Chrome with Selenium Wire
driver = webdriver.Chrome(seleniumwire_options=proxy_options)
try:
driver.get("https://httpbin.org/ip")
print(driver.find_element("tag name", "body").text)
finally:
driver.quit()
Запустите скрипт. Если прокси работает, вы должны увидеть IP-адрес, принадлежащий сети IPRoyal, а не ваш реальный IP.
Шаг 4: Ротация IP между запросами
Существует два распространённых способа ротации IP с резидентными прокси IPRoyal:
- Ротационный эндпоинт: используйте один и тот же хост и порт для каждого запроса. Прокси автоматически назначает новый IP для каждого соединения. Это самый простой метод для скрапинга без сохранения состояния.
- Липкие сессии с идентификатором сессии: добавьте уникальный идентификатор сессии к имени пользователя (например,
yourusername-session-abc123). Все запросы с этим идентификатором сессии будут использовать один и тот же IP, пока сессия не истечёт или вы не измените идентификатор. Это полезно для многошаговых сценариев, таких как вход в систему, а затем сбор данных.
Чтобы вручную менять IP в Selenium, можно создавать новый экземпляр драйвера с другим идентификатором сессии для каждой задачи скрапинга. Вот пример, который перебирает список идентификаторов сессий:
import time
from seleniumwire import webdriver
base_username = "your_username"
base_password = "your_password"
proxy_host = "your-iproyal-host"
proxy_port = "your_port"
session_ids = ["session1", "session2", "session3"]
for session_id in session_ids:
# Construct username with session ID (adjust syntax per IPRoyal docs)
username = f"{base_username}-session-{session_id}"
proxy_url = f"http://{username}:{base_password}@{proxy_host}:{proxy_port}"
proxy_options = {
'proxy': {
'http': proxy_url,
'https': proxy_url,
'no_proxy': 'localhost,127.0.0.1'
}
}
driver = webdriver.Chrome(seleniumwire_options=proxy_options)
try:
driver.get("https://httpbin.org/ip")
print(f"Session {session_id}:", driver.find_element("tag name", "body").text)
finally:
driver.quit()
time.sleep(1)
Если IPRoyal предоставляет ротационный эндпоинт, который меняет IP при каждом запросе, можно пропустить логику с идентификатором сессии и использовать одни и те же учётные данные. Проверьте поведение в своей панели управления.
Шаг 5: Работа с геотаргетингом и липкими сессиями
Резидентные прокси IPRoyal поддерживают таргетинг по стране и городу. Обычно можно указать местоположение, добавив код страны к имени пользователя или используя выделенный эндпоинт. Например, многие провайдеры используют формат имени пользователя вроде yourusername-country-us. Проверьте точный синтаксис в своей панели управления IPRoyal.
Чтобы поддерживать липкую сессию для многошагового скрапинга (например, добавление в корзину, затем оформление заказа), используйте один идентификатор сессии для всех действий и держите один и тот же экземпляр драйвера открытым. Смена драйвера или идентификатора сессии приведёт к использованию другого IP.
Шаг 6: Проверьте прокси и обработайте ошибки
Всегда проверяйте, что ваши запросы идут через прокси. Простая проверка — посетить https://httpbin.org/ip или https://ipinfo.io/ip и убедиться, что IP не ваш собственный. Если нужно проверить заголовки, Selenium Wire позволяет получать доступ к объектам запросов и ответов:
for request in driver.requests:
if request.response:
print(request.url, request.response.status_code)
Устранение неполадок
| Проблема | Вероятная причина | Решение |
|---|---|---|
| 407 Proxy Authentication Required | Неверное имя пользователя/пароль или специальные символы не закодированы в URL | Закодируйте специальные символы в имени пользователя/пароле для URL (например, @ становится %40). Проверьте учётные данные в панели управления IPRoyal. |
| Тайм-аут соединения | Неверный хост/порт или блокировка брандмауэром | Перепроверьте хост и порт. Попробуйте другой порт, если IPRoyal предоставляет альтернативы. Убедитесь, что ваш брандмауэр разрешает исходящие соединения. |
| IP не меняется | Используется идентификатор липкой сессии или кэшированное соединение | Используйте ротационный эндпоинт или измените идентификатор сессии. Закройте драйвер и откройте новый. |
| Ошибка WebDriver при запуске | Несоответствие версии ChromeDriver | Обновите ChromeDriver, чтобы он соответствовал версии Chrome. |
| Ошибки SSL | Прокси неправильно обрабатывает HTTPS | Убедитесь, что вы используете http:// в URL прокси даже для HTTPS-сайтов (прокси туннелирует HTTPS). |
Итог
В этом руководстве вы узнали, как интегрировать резидентные прокси IPRoyal с Selenium на Python, используя selenium-wire для аутентификации. Вы настроили один прокси, реализовали ротацию с помощью идентификаторов липких сессий и проверили настройку. Не забывайте использовать ротационные эндпоинты для высокообъёмного скрапинга, а липкие сессии — для многошаговых сценариев. Всегда проверяйте подключение через прокси перед запуском больших задач и обращайтесь к своей панели управления IPRoyal для точного формата эндпоинта и параметров сессии.