Сегодня мы научимся использовать прокси с 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
Преимущества продуктов 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