Як реалізувати ротацію проксі в Python

Як реалізувати ротацію проксі в Python

У цьому посібнику я розповім про проксі, поясню, навіщо потрібна ротація проксі, і покажу, як налаштувати її в Python. Без зайвого жаргону — лише прості, практичні кроки, щоб ваш вебскрапінг працював без збоїв. Почнімо!

Що таке проксі?

Проксі — це проміжний сервер між вашим комп’ютером та інтернетом. Коли ви надсилаєте запит через проксі, він пересилає його на цільовий вебсайт, а потім повертає відповідь. Цей процес допомагає приховати вашу реальну IP-адресу.

Типи проксі

  1. Datacenter Proxies — Швидкі й недорогі, але їх легко виявити.
  2. Residential Proxies — Використовують реальні IP-адреси, видані домогосподарствам, що ускладнює їх виявлення.
  3. Mobile Proxies — Використовуйте IP-адреси з мобільних пристроїв, що забезпечують найвищий рівень анонімності.
  4. ISP Proxies — Подібні до резидентських проксі, але це ISP-проксі, які забезпечують стабільні з'єднання.

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

Навіщо використовувати ротацію проксі в 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:

import random
import requests
# List of proxies
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():
return random.choice(proxies_list)
# Make requests with proxy rotation
for i in range(5): # Number of requests
proxy = get_random_proxy()
proxies = {
"http": проксі,
"https": proxy
}
try:
response = requests.get("https://httpbin.io/ip", proxies=proxies, timeout=5)
print(f"Request {i 1} from {proxy}: {response.json()}")
except requests.exceptions.RequestException as e:
print(f"Request {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:

import aiohttp
import asyncio
import random
# List of proxies
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(сесія, проксі, спроба):
try:
async with session.get("https://httpbin.io/ip", proxy=proxy) as response:
json_response = await response.json()
print(f"Attempt {attempt} using {proxy}: {json_response}")
except Exception as e:
print(f"Attempt {attempt} завершилося з помилкою {proxy}: {e}")
# Main function to send requests concurrently
async def main():
async with aiohttp.ClientSession() as session:
tasks = []
for i in range(5): # Number of requests
proxy = random.choice(proxies_list)
tasks.append(fetch_ip(session, proxy, i 1))
await asyncio.gather(*tasks)
# Run the async event loop
asyncio.run(main())

Крок 3: Запустіть скрипт

Запустіть скрипт за допомогою:

python rotate_aiohttp.py

Цей метод надсилає кілька запитів одночасно, тому він швидший і ефективніший, ніж підхід із requests.

Ротація проксі в 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:
import scrapy
class IpSpider(scrapy.Spider):
name = "ip_spider"
start_urls = ["https://httpbin.io/ip"]
def parse(self, response):
ip = response.json().get("origin")
self.log(f"IP Address: {ip}")

Крок 4: Запустіть павука

Запустіть павука за допомогою:

scrapy crawl ip_spider

Scrapy автоматично ротуватиме проксі під час вебскрапінгу.

Conclusion

Застосовуючи ці техніки ротації проксі, ви зможете вебскрапити дані без проблем, не переймаючись блокуваннями чи обмеженнями. Перемикання між IP-адресами допомагає залишатися непоміченим, обходити обмеження частоти запитів і отримувати доступ до контенту з різних країн.

Якщо ви працюєте над невеликими проєктами, простих способів на кшталт requests буде достатньо. Але для більших завдань використання AIOHTTP або Scrapy зробить усе швидшим і ефективнішим.

Пам'ятайте, безкоштовні проксі може бути ненадійним, тож потрібно обирати надійний постачальник ротаційних проксі може заощадити вам час і клопоти. Тепер, коли ви знаєте, як ротувати проксі, ви готові вебскрапити ефективніше й уникати блокувань. Дякуємо за читання!

Схожі записи