Como Usar Proxies Com HTTPX

Aprenda configurações de proxy HTTPX com exemplos para proxies não autenticados, autenticados, rotativos e de fallback.
7 min de leitura
How To Use Proxies With HTTPX blog image

Hoje, vamos aprender como usar proxies com HTTPX. Um proxy fica entre seu scraper e o site que você está tentando raspar. Seu scraper faz uma solicitação ao servidor proxy para o site de destino. O proxy então busca o site de destino e o retorna ao seu scraper.

Como Usar Proxies Não Autenticados

Em resumo, todas as nossas solicitações vão para um proxy_url. Abaixo está um exemplo usando um proxy não autenticado. Isso significa que não estamos usando um nome de usuário ou senha. Este exemplo foi inspirado pela documentação deles.

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)

Como Usar Proxies Autenticados

Quando um proxy requer um nome de usuário e senha, ele é chamado de proxy “autenticado”. Essas credenciais são usadas para autenticar sua conta e fornecer uma conexão com o proxy.

Com autenticação, nosso proxy_url fica assim: http://<username>:<password>@<proxy_url>:<port_number>. No exemplo abaixo, usamos tanto nossa zone quanto nosso username para criar a parte do usuário da string de autenticação.

Estamos usando proxies de datacenter para nossa conexão base.

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)

O código acima é bem simples. Esta é a base para qualquer tipo de proxy que você queira configurar.

  • Primeiro, criamos nossas variáveis de configuração: username, zone e password.
  • Usamos essas variáveis para criar nossa proxy_url: f"http://brd-customer-{username}-zone-{zone}:{password}@brd.superproxy.io:33335".
  • Fazemos uma solicitação à API para obter informações gerais sobre nossa conexão de proxy.

Sua resposta deve se parecer com isto.

{"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"}}

Como Usar Proxies Rotativos

Quando usamos proxies rotativos, criamos uma lista de proxies e escolhemos entre eles aleatoriamente. No código abaixo, criamos uma lista de countries. Quando fazemos uma solicitação, usamos random.choice() para usar um país aleatório da lista. Nossa proxy_url é formatada para se adequar ao país.

O exemplo abaixo cria uma pequena lista de proxies rotativos.

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)

Este exemplo realmente não é tão diferente do primeiro. Aqui estão as principais diferenças.

  • Criamos um array de países: ["us", "gb", "au", "ca"].
  • Em vez de fazer uma única solicitação, fazemos várias. Cada vez que criamos uma nova solicitação, usamos random.choice(countries) para escolher um país aleatório cada vez que criamos nossa proxy_url.

Como Criar uma Conexão de Proxy de Fallback

Nos exemplos acima, usamos apenas proxies de datacenter e proxies gratuitos. Proxies gratuitos não são muito confiáveis. Proxies de datacenter tendem a ser bloqueados em sites mais difíceis.

Neste exemplo, criamos uma função chamada safe_get(). Quando chamamos essa função, primeiro tentamos obter a URL usando uma conexão de datacenter. Quando isso falha, nós recorremos à nossa conexão residencial.

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())

Este exemplo é um pouco mais complicado do que os outros que tratamos neste artigo.

  • Agora temos dois conjuntos de variáveis de configuração, um para nossa conexão de datacenter e outro para nossa conexão residencial.
  • Desta vez, usamos uma sessão AsyncClient() para introduzir algumas das funcionalidades mais avançadas do HTTPX.
  • Primeiro, tentamos fazer nossa solicitação com o datacenter_proxy.
  • Se não conseguirmos obter uma resposta adequada, tentamos novamente a solicitação usando nosso residential_proxy. Observe também a flag verify no código. Ao usar nossos proxies residenciais, você precisa baixar e usar nosso certificado SSL.
  • Uma vez que obtivemos uma resposta sólida, escrevemos a página em um arquivo HTML. Podemos abrir essa página em nosso navegador e ver o que o proxy realmente acessou e nos enviou de volta.

Se você tentar o código acima, sua saída e o arquivo HTML resultante devem se parecer muito com isto.

trying with datacenter
response failed
trying with residential
response successful
Captura de tela da página inicial da Amazon

Como os Produtos da Bright Data Ajudam

Como você provavelmente notou ao longo deste artigo, nossos proxies de datacenter são muito acessíveis e nossas proxies residenciais fornecem um excelente fallback para quando os proxies de datacenter não funcionam. Também fornecemos várias outras ferramentas para ajudar com suas necessidades de coleta de dados.

  • Web Unlocker: Supere até os anti-bots mais difíceis. O Web Unlocker reconhece e resolve automaticamente quaisquer CAPTCHAs na página. Uma vez que passa pelos anti-bots, ele envia de volta a página da web.
  • Scraping Browser: Este produto tem ainda mais recursos. O Scraping Browser realmente permite que você controle um navegador remoto com integração de proxy e um solucionador automático de CAPTCHA.
  • APIs de Web Scraper: Com essas APIs, fazemos o scraping para você. Tudo o que você precisa fazer é chamar a API e analisar os dados JSON que você recebe na resposta.
  • Conjuntos de dados: Explore nosso marketplace de conjuntos de dados para encontrar centenas de conjuntos de dados pré-coletados, ou solicite/crie um personalizado. Você pode escolher uma taxa de atualização e filtrar apenas os pontos de dados de que precisa.

Conclusão

Quando você combina HTTPX com nossos proxies, você obtém uma maneira privada, eficiente e confiável de raspar a web. Se você quiser rotacionar proxies, é tão simples quanto usar a biblioteca random integrada do Python. Com uma combinação de proxies de datacenter e residenciais, você pode construir uma conexão redundante que supera a maioria dos sistemas de bloqueio.

Como você aprendeu, a Bright Data oferece o pacote completo para seus projetos de scraping de dados. Comece a usar os proxies da Bright Data hoje mesmo!