Ротация прокси с модулем REQUESTS в Python

Вопрос или проблема

Привет всем! Я понимаю, что это довольно простая проблема, но я не могу найти решение и испытываю трудности. Я переписал бот для Ebay, код которого нашел в открытом доступе на github. Я добавил прокси-серверы для бота, так как именно так просмотры будут выглядеть реальными, но мне трудно реализовать ротацию прокси, чтобы это работало по принципу 1 GET-запрос = 1 использование прокси-сервера.

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

 with open("validproxylist.txt", "r") as f:
      for line in f:
          proxies = f.read().split("\n")

 counter = 0

 for i in range(number_of_views):
     print(f"Использую прокси {proxies[counter]}")
          r = requests.get(link, headers=headers, proxies={ 
                                  "https": proxies[counter],
                                  "http": proxies[counter], 
                                                           })

Вывод из терминала показывает только использование 1 прокси-сервера:

Вывод из терминала показывает только использование 1 прокси-сервера

Я посмотрел несколько видео на YouTube, которые объясняют, как работают ротационные прокси с модулем REQUESTS, но мне не удалось найти решение с учетом пользовательского ввода. Я также искал на Stack Overflow, но могу найти только проблему использования 1 прокси, а не нескольких.

Ответ или решение

Конечно! Давайте разберёмся, как правильно реализовать ротацию прокси-серверов в вашем коде для Python с использованием модуля requests. Проблема в вашем текущем коде заключается в том, что вы всегда используете один и тот же прокси-сервер, поскольку счётчик (counter) не обновляется между запросами.

Вот как можно исправить код для правильной ротации прокси:

import requests

# Читаем список прокси из файла
with open("validproxylist.txt", "r") as f:
    proxies = f.read().splitlines()  # Используем splitlines для удаления пустых строк

number_of_views = 10  # Задайте необходимое количество запросов
headers = {
    'User-Agent': 'Your User Agent'  # Замените на необходимый User-Agent
}

# Проходим по количеству запросов и используем разные прокси
for i in range(number_of_views):
    proxy = proxies[i % len(proxies)]  # Выбираем прокси на основе текущего индекса
    print(f"Используем прокси {proxy}")

    # Выполняем GET-запрос с текущим прокси
    r = requests.get("https://example.com", headers=headers, proxies={
        "http": proxy,
        "https": proxy,
    })

    # Проверяем статус-код ответа для диагностики
    print(f"Статус-код: {r.status_code}")

Объяснение изменений:

  1. Использование splitlines(): Это позволяет избежать добавления пустых строк в список прокси, если в вашем файле есть пустые строки.

  2. Условная ротация прокси: Здесь используется выражение i % len(proxies), что позволяет циклически выбирать прокси из списка. Когда i превышает количество доступных прокси, мы начинаем с первого элемента списка снова.

  3. Код статуса: После каждого запроса выводится статус-код ответа, чтобы вы могли следить за успехом запросов.

Советы по практическому использованию:

  • Убедитесь, что ваш файл validproxylist.txt содержит актуальные и работоспособные прокси.
  • Следите за возможными ошибками при попытке использовать недоступные или проблемные прокси. Рассмотрите возможность обработки исключений (например, requests.exceptions.ProxyError).
  • Если вы используете много запросов, возможно, логика ротации прокси будут полезна, если у вас есть дополнительные правила для выбора прокси (например, если один из них отключается).

Это решение должно помочь вам реализовать ротацию прокси в вашем проекте. Если у вас есть дополнительные вопросы, не стесняйтесь спрашивать!

Оцените материал
Добавить комментарий

Капча загружается...