Як використовувати проксі з Httpx

Як використовувати проксі з Httpx

У цьому гайді я покажу, як використовувати проксі з Httpx. Я покажу, як їх налаштувати, використовувати аутентифікацію, перемикатися між різними проксі й навіть працювати з преміальними резидентськими проксі. Не хвилюйтеся — це простіше, ніж здається. Давайте розберемося й почнемо!

Що таке Httpx?

Httpx — це просунутий HTTP-клієнт для Python, створений тією самою командою, що й популярна бібліотека requests. Водночас Httpx має додаткові можливості:

  • Підтримка синхронних і асинхронних запитів
  • HTTP/2 і пулінг з'єднань
  • Потокова передача та керування тайм-аутами

Ви можете встановити його через pip:

pip install httpx

Let’s now see how to use proxies with Httpx.

Навіщо використовувати проксі?

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

Переваги використання проксі

  • Обхід IP-блокувань: Вебсайти можуть заблокувати вашу реальну IP-адресу, якщо ви надсилаєте забагато запитів. Проксі запобігає цьому.
  • Контроль геолокації: Ви можете імітувати користувачів із різних країн.
  • Краща анонімність: Ваш реальний IP ніколи не розкривається.
  • Scalability: Надсилайте тисячі запитів, не викликаючи підозри.

Базовий запит без проксі

Ось базовий запит Httpx, який не використовує проксі:

# scraper.py
import httpx
response = httpx.get("https://httpbin.io/ip")
print(response.text)

Це повертає вашу справжню IP-адресу:

{
"origin": "123.45.67.89"
}

Як налаштувати проксі в Httpx у Python

Тепер надішлемо той самий запит через проксі.

Крок 1: Додайте проксі до Httpx

Щоб використовувати проксі, визначте його за допомогою параметра `proxies`:

# scraper.py
import httpx
proxies = {
"http://": "http://216.137.184.253:80",
"https://": "http://216.137.184.253:80"
}
response = httpx.get("https://httpbin.io/ip", proxies=proxies)
print(response.text)

Tip: Безкоштовні проксі можуть бути нестабільними або вже заблокованими. Використовуйте їх для тестування, а не в бойовому середовищі.

Крок 2: Використовуйте клієнт Httpx із проксі

Ви також можете передати проксі під час створення екземпляра Client:

# scraper.py
import httpx
with httpx.Client(proxy="http://216.137.184.253:80") as client:
response = client.get("https://httpbin.io/ip")
print(response.text)

Використання Client корисне, якщо ви надсилаєте кілька запитів через той самий проксі.

Крок 3: Автентифікація проксі (ім’я користувача та пароль)

Преміум-проксі (наприклад, від Bright Data) часто вимагають автентифікації. Вам потрібно буде включити ім’я користувача та пароль у URL проксі.

Format:

http://<USERNAME>:<PASSWORD>@<PROXY_IP>:<PORT>

Example:

# scraper.py
import httpx
proxy_url = "http://myuser:[email protected]:80"
with httpx.Client(proxy=proxy_url) as client:
response = client.get("https://httpbin.io/ip")
print(response.text)

Замініть myuser і mypass на ваші реальні облікові дані проксі Bright Data.

Крок 4: Ротація проксі з Httpx

Ротація проксі допомагає уникати обмежень швидкості або банів. Ви можете вести список і вибирати випадковий проксі для кожного запиту.

Example:

# scraper.py
import httpx
import random
proxy_list = [
"http://20.210.113.32:8123",
"http://47.56.110.204:8989",
"http://50.174.214.216:80"
]
random_proxy = random.choice(proxy_list)
with httpx.Client(proxy=random_proxy) as client:
response = client.get("https://httpbin.io/ip")
print(response.text)

Кожен запит проходитиме через випадково вибраний проксі.

Крок 5: Обробка збоїв за допомогою логіки повторних спроб

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

# scraper.py
import httpx
import random
import time
proxies = [
"http://20.210.113.32:8123",
"http://47.56.110.204:8989",
"http://50.174.214.216:80"
]
url = "https://httpbin.io/ip"
for attempt in range(5):
proxy = random.choice(proxies)
try:
with httpx.Client(proxy=proxy, timeout=5) as client:
response = client.get(url)
print(response.text)
break
except httpx.RequestError:
print(f"Attempt {attempt 1} помилка з проксі {proxy}")
time.sleep(2)

Крок 6: Асинхронні запити через проксі

Httpx підтримує асинхронні запити через AsyncClient. Це корисно для високошвидкісного вебскрапінгу.

Example:

# scraper_async.py
import httpx
import asyncio
async def fetch():
proxy_url = "http://216.137.184.253:80"
async with httpx.AsyncClient(proxy=proxy_url) as client:
response = await client.get("https://httpbin.io/ip")
print(response.text)
asyncio.run(fetch())

Масштабувати це можна, запускаючи багато корутин паралельно.

Крок 7: Використовуйте проксі Bright Data з Httpx

Безкоштовні проксі Корисні для тестування, але повільні, незахищені, ненадійні й часто блокуються.

Для продакшн-вебскрапінгу використовуйте преміального провайдера проксі, як-от Bright Data or IPRoyal.

Чому я обрав Bright Data?

  • Понад 150 млн резидентських IP-адрес по всьому світу
  • Геотаргетинг за країною, містом або ASN
  • Автоматична ротація IP-адрес
  • Висока швидкість і низька затримка
  • Панель керування та API для керування проксі в реальному часі

Як використовувати Bright Data з Httpx

Після реєстрації ви отримаєте свої облікові дані для проксі.

Ось як інтегрувати їх у свій код:

# scraper.py
import httpx
proxy_url = "http://username:[email protected]:33335"
with httpx.Client(proxy=proxy_url) as client:
response = client.get("https://httpbin.io/ip")
print(response.text)

Замініть ім’я користувача та пароль на ваші фактичні облікові дані проксі Bright Data.

Example Output

Щоразу, коли ви запускаєте наведений вище скрипт, ви отримуватимете іншу резидентську IP-адресу:

{
"origin": "178.62.45.183"
}
{
"origin": "191.101.54.225"
}

Bright Data автоматично виконує ротацію IP-адрес, якщо ви налаштуєте це в панелі керування.

Бонус: ротація заголовків і User-Agent

Щоб ще більше уникнути виявлення, ротуйте заголовки, як-от User-Agent, щоб імітувати різні браузери.

Example:

import httpx
import random
user_agents = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64)",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)",
"Mozilla/5.0 (X11; Linux x86_64)"
]
headers = {
"User-Agent": random.choice(user_agents)
}
proxy = "http://username:[email protected]:22225"
with httpx.Client(proxy=proxy, headers=headers) as client:
response = client.get("https://httpbin.io/headers")
print(response.json())

Це імітує реальні запити браузера, допомагаючи залишатися невиявленим.

Conclusion

Використання проксі з Httpx робить ваш вебскрапінг ефективнішим і надійнішим. Тепер ви знаєте, як налаштовувати базові проксі, використовувати облікові дані, перемикатися між різними проксі та працювати з якісними резидентськими проксі. Ви також навчилися коректно перехоплювати й обробляти помилки. Ці навички допомагають уникати блокувань і довше підтримувати роботу ваших вебскраперів.

Із цими знаннями ви готові вільніше досліджувати веб і безпечніше збирати дані. Почніть тестувати проксі вже сьогодні та подивіться, що зможете створити. Із Httpx та Python потужні інструменти для вебскрапінгу буквально за кілька рядків коду. Продовжуйте експериментувати й навчатися!

Схожі записи