Как использовать прокси с 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-адрес никогда не раскрывается.
- Масштабируемость: Отправляйте тысячи запросов, не вызывая подозрений.
Базовый запрос без прокси
Вот базовый запрос Httpx без использования прокси:
# scraper.py
импорт httpx
response = httpx.get("https://httpbin.io/ip")
печать(response.text)
Это вернет ваш реальный IP-адрес:
{
"origin": "123.45.67.89"
}
Как задать прокси в Httpx на Python
Теперь отправим тот же запрос через прокси.
Добавление прокси в Httpx
Чтобы использовать прокси, укажите его через параметр proxies:
# scraper.py
импорт 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)
печать(response.text)
Tip: Бесплатные прокси могут быть нестабильными или уже заблокированными. Используйте их для тестирования, а не в продакшене.
Использование клиента Httpx через прокси
Можно также указать прокси при создании экземпляра Client:
# scraper.py
импорт httpx
с httpx.Client(proxy="http://216.137.184.253:80") в роли client:
response = client.get("https://httpbin.io/ip")
печать(response.text)
Client будет полезен, если вы отправляете несколько запросов через один и тот же прокси.
Аутентификация прокси (имя пользователя и пароль)
Премиум-прокси, например от Bright Data, часто требуют аутентификации. Вам нужно будет указать имя пользователя и пароль в URL-адресе прокси.
Format:
http://<USERNAME>:<PASSWORD>@<PROXY_IP>:<PORT>
Пример:
# scraper.py
импорт httpx
proxy_url = "http://myuser:[email protected]:80"
с httpx.Client(proxy=proxy_url) в роли client:
response = client.get("https://httpbin.io/ip")
печать(response.text)
Замените myuser и mypass на ваши фактические учетные данные для прокси Bright Data.
Ротация прокси с помощью Httpx
Ротация прокси помогает избежать ограничений по частоте запросов или банов. Можно вести список и выбирать случайный прокси для каждого запроса.
Пример:
# scraper.py
импорт httpx
импорт 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)
с httpx.Client(proxy=random_proxy) в роли client:
response = client.get("https://httpbin.io/ip")
печать(response.text)
Каждый запрос будет проходить через случайно выбранный прокси.
Обработка сбоев с помощью логики повторных попыток
Некоторые прокси могут давать сбои. Добавьте логику повторных попыток, чтобы скрейпер работал без сбоев:
# scraper.py
импорт httpx
импорт случайно
импорт 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"
для попытка в ассортимент(5):
proxy = random.choice(proxies)
попробуйте:
с httpx.Client(proxy=proxy, timeout=5) в роли client:
response = client.get(url)
печать(response.text)
перерыв
кроме httpx.RequestError:
печать(попытка {attempt 1} сбой при работе с прокси {proxy}")
time.sleep(2)
Шаг 6: Асинхронные запросы через прокси
Httpx поддерживает асинхронные запросы с AsyncClient. Это полезно для высокоскоростного веб-скрейпинга.
Пример:
# scraper_async.py
импорт httpx
импорт asyncio
async def получить():
proxy_url = "http://216.137.184.253:80"
async с httpx.AsyncClient(proxy=proxy_url) в роли client:
response = ожидайте client.get("https://httpbin.io/ip")
печать(response.text)
asyncio.run(fetch())
Это можно масштабировать, запуская множество корутин параллельно.
Шаг 7: Используйте прокси Bright Data с Httpx
Бесплатные прокси Такие прокси полезны для тестирования, но медленные, небезопасные, ненадежные и часто блокируются.
Для production-скрейпинга используйте премиального провайдера прокси, например Яркие данные или IPRoyal.
Почему я выбрал Bright Data?
- Более 150 млн резидентских IP-адресов по всему миру
- Геотаргетинг по стране, городу или ASN
- Автоматическая ротация IP-адресов
- Высокая скорость и минимальная задержка
- Панель управления и API для управления прокси в реальном времени
Как использовать Bright Data с Httpx
После регистрации вы получите свои учетные данные для прокси.
Вот как подключить их к коду:
# scraper.py
импорт httpx
proxy_url = "http://username:[email protected]:33335"
с httpx.Client(proxy=proxy_url) в роли client:
response = client.get("https://httpbin.io/ip")
печать(response.text)
Замените username и password на ваши фактические учетные данные для прокси Bright Data.
Example Output
Каждый раз при запуске приведенного выше скрипта вы будете получать другой резидентский IP-адрес:
{
"origin": "178.62.45.183"
}
{
"origin": "191.101.54.225"
}
Bright Data автоматически выполняет ротацию IP-адресов, если вы настроите это в панели управления.
Бонус: Ротация заголовков и User-Agent
Чтобы еще больше снизить риск обнаружения, ротируйте заголовки, такие как User-Agent, чтобы имитировать разные браузеры.
Пример:
импорт httpx
импорт 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"
с httpx.Client(proxy=proxy, headers=headers) в роли client:
response = client.get("https://httpbin.io/headers")
печать(response.json())
Это имитирует запросы реального браузера, помогая оставаться незамеченным.
Заключение
Использование прокси с Httpx делает ваш веб-скрейпинг более эффективным и надежным. Теперь вы знаете, как настраивать базовые прокси, использовать учетные данные для входа, переключаться между разными прокси и работать с качественными резидентскими прокси. Вы также научились корректно перехватывать и обрабатывать ошибки. Эти навыки помогают избегать блокировок и дольше поддерживать работу скрейперов.
Теперь, когда вы знаете это, вы готовы свободнее исследовать веб и безопаснее собирать данные. Начните тестировать прокси уже сегодня и посмотрите, что сможете создать. С Httpx и Python мощные инструменты для веб-скрейпинга находятся всего в нескольких строках кода. Продолжайте экспериментировать и учиться!

