Вопрос или проблема
Привет всем! Я понимаю, что это довольно простая проблема, но я не могу найти решение и испытываю трудности. Я переписал бот для 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 прокси-сервера:
Я посмотрел несколько видео на 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}")
Объяснение изменений:
-
Использование
splitlines()
: Это позволяет избежать добавления пустых строк в список прокси, если в вашем файле есть пустые строки. -
Условная ротация прокси: Здесь используется выражение
i % len(proxies)
, что позволяет циклически выбирать прокси из списка. Когдаi
превышает количество доступных прокси, мы начинаем с первого элемента списка снова. -
Код статуса: После каждого запроса выводится статус-код ответа, чтобы вы могли следить за успехом запросов.
Советы по практическому использованию:
- Убедитесь, что ваш файл
validproxylist.txt
содержит актуальные и работоспособные прокси. - Следите за возможными ошибками при попытке использовать недоступные или проблемные прокси. Рассмотрите возможность обработки исключений (например,
requests.exceptions.ProxyError
). - Если вы используете много запросов, возможно, логика ротации прокси будут полезна, если у вас есть дополнительные правила для выбора прокси (например, если один из них отключается).
Это решение должно помочь вам реализовать ротацию прокси в вашем проекте. Если у вас есть дополнительные вопросы, не стесняйтесь спрашивать!