Как использовать прокси с HTTPX

Изучите настройки прокси-сервера HTTPX с примерами неаутентифицированных, аутентифицированных, ротируемых и резервных прокси.
3 min read
How To Use Proxies With HTTPX blog image

Сегодня мы научимся использовать прокси с HTTPX. Прокси-сервер находится между вашим парсером и сайтом, парсинг которого вы пытаетесь выполнить. Ваш парсер отправляет запрос на прокси-сервер для целевого сайта. Затем прокси-сервер загружает целевой сайт и возвращает его вашему парсеру.

Как использовать неаутентифицированные прокси

Таким образом, все наши запросы отправляются по адресу proxy_url. Ниже приведен пример использования неаутентифицированного прокси-сервера. Это означает, что мы не используем имя пользователя или пароль. Этот пример был вдохновлен их документацией .

import httpx

proxy_url = "http://localhost:8030"


with httpx.Client(proxy=proxy_url) as client:
    ip_info = client.get("https://geo.brdtest.com/mygeo.json")
    print(ip_info.text)

Как использовать аутентифицированные прокси

Когда прокси-серверу требуются имя пользователя и пароль, он называется «аутентифицированным» прокси-сервером. Эти учетные данные используются для аутентификации вашей учетной записи и подключения к прокси-серверу.

При аутентификации наш proxy_url выглядит следующим образом: http://<username>:<password>@<proxy_url>:<port_number>. В приведенном ниже примере мы используем зону и имя пользователя для создания пользовательской части строки аутентификации.

Мы используем прокси для центров обработки данных для нашего базового соединения.

import httpx

username = "your-username"
zone = "your-zone-name"
password = "your-password"

proxy_url = f"http://brd-customer-{username}-zone-{zone}:{password}@brd.superproxy.io:33335"

ip_info = httpx.get("https://geo.brdtest.com/mygeo.json", proxy=proxy_url)

print(ip_info.text)

Приведенный выше код довольно прост. Это основа для любого прокси-сервера, который вы хотите настроить.

  • Сначала мы создаем переменные конфигурации: имя пользователя, зона и пароль.
  • Мы используем их для создания нашего proxy_url: f"http://brd-customer-{username}-zone-{zone}:{password}@brd.superproxy.io:33335".
  • Мы отправляем запрос в API, чтобы получить общую информацию о нашем прокси-соединении.

Ваш ответ должен выглядеть примерно так.

{"country":"US","asn":{"asnum":20473,"org_name":"AS-VULTR"},"geo":{"city":"","region":"","region_name":"","postal_code":"","latitude":37.751,"longitude":-97.822,"tz":"America/Chicago"}}

Как использовать ротируемые прокси

При использовании ротируемых прокси мы создаем список прокси и выбираем их случайным образом. В приведенном ниже коде мы создаем список стран. Когда мы делаем запрос, мы используем random.choice(), чтобы использовать случайную страну из списка. Наш proxy_url отформатирован в соответствии со страной.

В приведенном ниже примере создан небольшой список ротируемых прокси-серверов.

import httpx
import asyncio
import random


countries = ["us", "gb", "au", "ca"]
username = "your-username"
proxy_url = "brd.superproxy.io:33335"

datacenter_zone = "your-zone"
datacenter_pass = "your-password"


for random_proxy in countries:
    print("----------connection info-------------")
    datacenter_proxy = f"http://brd-customer-{username}-zone-{datacenter_zone}-country-{random.choice(countries)}:{datacenter_pass}@{proxy_url}"

    ip_info = httpx.get("https://geo.brdtest.com/mygeo.json", proxy=datacenter_proxy)

    print(ip_info.text)

Этот пример совсем не отличается от вашего первого. Вот основные отличия.

  • Мы создаем массив стран: ["us", "gb", "au", "ca"].
  • Вместо того, чтобы делать один запрос, мы делаем несколько запросов. Каждый раз, когда мы создаем новый запрос, мы используем random.choice(countries) для выбора случайной страны при каждом создании proxy_url.

Как создать резервное прокси-соединение

В приведенных выше примерах мы использовали только центры обработки данных и бесплатные прокси. Бесплатные прокси не очень надежны. Прокси-серверы центров обработки данных обычно блокируются более сложными сайтами.

В этом примере мы создаем функцию под названием safe_get(). Когда мы вызываем эту функцию, мы сначала пытаемся получить URL-адрес, используя соединение с центром обработки данных. Когда это не удается, мы возвращаемся к подключению резидентного прокси.

import httpx
from bs4 import BeautifulSoup
import asyncio


country = "us"
username = "your-username"
proxy_url = "brd.superproxy.io:33335"

datacenter_zone = "datacenter_proxy1"
datacenter_pass = "datacenter-password"

residential_zone = "residential_proxy1"
residential_pass = "residential-password"

cert_path = "/home/path/to/brightdata_proxy_ca/New SSL certifcate - MUST BE USED WITH PORT 33335/BrightData SSL certificate (port 33335).crt"


datacenter_proxy = f"http://brd-customer-{username}-zone-{datacenter_zone}-country-{country}:{datacenter_pass}@{proxy_url}"

residential_proxy = f"http://brd-customer-{username}-zone-{residential_zone}-country-{country}:{residential_pass}@{proxy_url}"

async def safe_get(url: str):
    async with httpx.AsyncClient(proxy=datacenter_proxy) as client:
        print("trying with datacenter")
        response = await client.get(url)
        if response.status_code == 200:
            soup = BeautifulSoup(response.text, "html.parser")
            if not soup.select_one("form[action='/errors/validateCaptcha']"):
                print("response successful")
                return response
    print("response failed")
    async with httpx.AsyncClient(proxy=residential_proxy, verify=cert_path) as client:
        print("trying with residential")
        response = await client.get(url)
        print("response successful")
        return response

async def main():
    url = "https://www.amazon.com"
    response = await safe_get(url)
    with open("out.html", "w") as file:
        file.write(response.text)

asyncio.run(main())

Этот пример немного сложнее других, которые мы рассмотрели в этой статье.

  • Теперь у нас есть два набора конфигурационных переменных: один для подключения к нашему прокси центра обработки данных, а другой для подключения к резидентному прокси.
  • На этот раз мы используем сеанс asyncClient(), чтобы представить некоторые из более продвинутых функций HTTPX.
  • Сначала мы попытаемся сделать запрос с помощью datacenter_proxy.
  • Если мы не получили правильного ответа, мы повторяем запрос, используя residential_proxy. Также обратите внимание на флаг verify в коде. При использовании наших резидентных прокси вам необходимо загрузить и использовать наш SSL-сертификат.
  • Получив надежный ответ, мы записываем страницу в HTML-файл. Мы можем открыть эту страницу в браузере и посмотреть, к чему прокси-сервер действительно получил доступ и что нам вернул.

Если вы попробуете приведенный выше код, выходные данные и полученный HTML-файл должны выглядеть примерно так.

trying with datacenter
response failed
trying with residential
response successful
Скриншот домашней страницы Amazon

Преимущества продуктов Bright Data

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

  • Web Unlocker: обходите даже самых сложных антиботов. Web Unlocker автоматически распознает и устраняет любые капчи на странице. Пройдя через антиботов, вы вернетесь на веб-страницу.
  • Scraping Browser: этот продукт имеет еще больше возможностей. Scraping Browser фактически позволяет управлять удаленным браузером с помощью интеграции прокси и автоматического решателя капч.
  • API Web Scraper: с помощью этих API мы выполняем парсинг за вас. Все, что вам нужно сделать, это вызвать API и проанализировать данные JSON, которые вы получите в ответе.
  • Наборы данных: изучите нашу торговую площадку наборов данных, чтобы найти сотни предварительно собранных наборов данных или запросить/создать собственный набор данных. Вы можете выбрать частоту обновления и отфильтровать только нужные вам элементы данных.

Заключение

Объединяя HTTPX с нашими прокси-серверами, вы получаете конфиденциальный, эффективный и надежный способ веб-парсинга. Если вы хотите ротировать прокси, просто используйте встроенную библиотеку Python random. Комбинируя прокси-серверы для центров обработки данных и резидентные прокси-серверы, можно создать резервное соединение, позволяющее обойти большинство блокирующих систем.

Как вы узнали, Bright Data предлагает полный пакет для ваших проектов по веб-парсингу. Начните бесплатную пробную версию прокси Bright Data уже сегодня!

No credit card required