Как настроить ротацию прокси в Python

Как настроить ротацию прокси в Python

В этом руководстве я расскажу о прокси, о том, зачем нужна ротация прокси, и о том, как настроить её в Python. Без сложного жаргона — только простые, практичные шаги, чтобы ваш скрапинг работал без сбоев. Давайте разберёмся!

Что такое прокси?

Прокси — это промежуточный сервер между вашим компьютером и интернетом. Когда вы отправляете запрос через прокси, он пересылает его на целевой сайт, а затем возвращает ответ. Этот процесс помогает скрыть ваш реальный IP-адрес.

Виды прокси

  1. Прокси-серверы для центров обработки данных — Быстрые и недорогие, но легко обнаруживаемые.
  2. Жилые доверенности — Используйте реальные IP-адреса, выданные домашним абонентам, чтобы их было сложнее обнаружить.
  3. Мобильные прокси-серверы — Используйте IP-адреса мобильных устройств, чтобы обеспечить максимальную анонимность.
  4. Прокси-провайдеры — Похожи на residential-прокси, но предоставляются интернет-провайдерами для стабильного соединения.

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

Зачем нужна ротация прокси в Python?

При веб-скрейпинге или автоматизации запросов использование одного IP-адреса может привести к ограничениям по частоте запросов, CAPTCHA или блокировке IP. Ротация прокси помогает:

  • Prevent IP Blocks — Распределяйте запросы по нескольким IP-адресам, чтобы избежать обнаружения.
  • Bypass Rate Limits — Сайты ограничивают запросы с одного IP, а ротация прокси помогает обходить эти ограничения.
  • Access Geo-Restricted Content — Некоторые сайты показывают разный контент в зависимости от местоположения. Использование прокси из разных стран позволяет получить доступ к этому контенту.

Настройка ротации прокси в Python

Теперь посмотрим, как реализовать ротацию прокси с помощью разных библиотек Python.

Ротация прокси с библиотекой Requests

Библиотека requests — один из самых простых способов выполнять HTTP-запросы в Python. Мы можем вручную ротировать прокси, используя список доступных прокси-серверов.

Шаг 1: Установите Requests

Сначала установите библиотеку requests:

pip install requests

Шаг 2: Определите логику ротации прокси

Create a Python file (rotate_requests.py) and add the following code:

импорт случайно
импорт requests
# Список прокси-серверов
proxies_list = [
"http://username:password@PROXY_1:PORT",
"http://username:password@PROXY_2:PORT",
"http://username:password@PROXY_3:PORT"
]
# Function to get a random proxy
def get_random_proxy():
возврат random.choice(proxies_list)
# Make requests with proxy rotation
для i в ассортимент(5): # Number of requests
proxy = get_random_proxy()
proxies = {
"http": прокси,
"https": proxy
}
попробуйте:
response = requests.get("https://httpbin.io/ip", proxies=proxies, timeout=5)
печать(f "Запрос {i 1} с сайта {proxy}: {response.json()}")
кроме requests.exceptions.RequestException в роли e:
печать(f "Запрос {i 1} сбой при работе с прокси {proxy}: {e}")

Шаг 3: Запустите скрипт

Запустите скрипт так:

python rotate_requests.py

Каждый запрос будет отправляться через другой прокси. Этот метод хорошо подходит для скрейпинга небольшого масштаба, но имеет ограничения при эффективной обработке больших объемов запросов.

Ротация прокси с aiohttp (асинхронные запросы)

Библиотека requests обрабатывает запросы по одному. Чтобы ускорить обработку запросов, можно использовать AIOHTTP, что позволяет асинхронно ротировать прокси.

Шаг 1: Установите aiohttp

Установите библиотеку aiohttp:

pip install aiohttp

Шаг 2: Определите логику ротации прокси

Create a Python file (rotate_aiohttp.py) and add the following code:

импорт aiohttp
импорт asyncio
импорт случайно
# Список прокси-серверов
proxies_list = [
"http://username:password@PROXY_1:PORT",
"http://username:password@PROXY_2:PORT",
"http://username:password@PROXY_3:PORT"
]
# Function to fetch IP using a proxy
async def fetch_ip(session, proxy, attempt):
попробуйте:
async с session.get("https://httpbin.io/ip", proxy=proxy) в роли response:
json_response = ожидайте response.json()
печать(попытка {attempt} using {proxy}: {json_response}")
кроме Исключение в роли e:
печать(попытка {attempt} завершилось с ошибкой {proxy}: {e}")
# Main function to send requests concurrently
async def главная():
async с aiohttp.ClientSession() в роли session:
tasks = []
для i в ассортимент(5): # Number of requests
proxy = random.choice(proxies_list)
tasks.append(fetch_ip(session, proxy, i 1))
ожидайте asyncio.gather(*tasks)
# Run the async event loop
asyncio.run(main())

Шаг 3: Запустите скрипт

Запустите скрипт так:

python rotate_aiohttp.py

Этот метод отправляет несколько запросов одновременно, поэтому он быстрее и эффективнее, чем вариант на requests.

Ротация прокси с Scrapy

Scrapy Scrapy — мощный фреймворк для веб-скрапинга, который поддерживает встроенную ротацию прокси.

Шаг 1: Установите Scrapy

Установите Scrapy и middleware для ротации прокси:

pip install scrapy scrapy-rotating-proxies

Шаг 2: Создайте проект Scrapy

В рабочем каталоге создайте новый проект Scrapy:

scrapy startproject proxy_scraper
cd proxy_scraper

Шаг 3: Настройте ротацию прокси

Modify settings.py in the Scrapy project:

# Enable proxy middleware
DOWNLOADER_MIDDLEWARES = {
"rotating_proxies.middlewares.RotatingProxyMiddleware": 610,
"rotating_proxies.middlewares.BanDetectionMiddleware": 620,
}
# List of rotating proxies
ROTATING_PROXY_LIST = [
"http://PROXY_1:PORT",
"http://PROXY_2:PORT",
"http://PROXY_3:PORT"
]
# Retry settings
RETRY_TIMES = 5
RETRY_HTTP_CODES = [500, 502, 503, 504, 403, 408]
Step 4: Create a Spider
Inside the spiders/ directory, create a file called ip_spider.py:
импорт scrapy
класс IpSpider(scrapy.Spider):
имя = "ip_spider"
start_urls = ["https://httpbin.io/ip"]
def разбор(self, response):
ip = response.json().get("origin")
self.log(f"IP Address: {ip}")

Шаг 4: Запустите паука

Запустите паука с помощью:

scrapy crawl ip_spider

Scrapy будет автоматически переключать прокси во время скрейпинга.

Заключение

Используя эти методы ротации прокси, вы сможете собирать данные без сбоев, не беспокоясь о блокировках и ограничениях. Смена IP-адресов помогает оставаться незаметным, обходить лимиты запросов и получать доступ к контенту из разных регионов.

Если вы работаете над небольшими проектами, простых подходов вроде requests будет достаточно. Но для более крупных задач использование AIOHTTP или Scrapy сделает работу быстрее и эффективнее.

Помните, бесплатные прокси может быть ненадёжным, поэтому выбор надёжный провайдер ротационных прокси Это может сэкономить вам время и избавить от хлопот. Теперь, когда вы знаете, как переключать прокси, вы готовы собирать данные более эффективно и избегать блокировок. Спасибо за чтение!

Похожие записи