Como usar proxies com HTTPX

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

Hoje, aprenderemos como usar proxies com HTTPX. Um proxy fica entre o scraper e o site que você está tentando copiar. Seu scraper faz uma solicitação ao servidor proxy do 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 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 em sua documentação.

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 exige 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 a autenticação, nosso proxy_url fica assim: http://<username>:<password>@<proxy_url>:<port_number>. No exemplo abaixo, usamos zone e username para criar a parte do usuário da string de autenticação.

Estamos usando proxies de datacenter para nossa conexão básica.

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. Essa é a base para qualquer tipo de proxy que você queira configurar.

  • Primeiro, criamos nossas variáveis de configuração: username, zone e password (nome de usuário, zona e senha).
  • Nós os usamos para criar nosso 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 proxy.

Sua resposta deve ter um formato parecido com este:

{"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 os escolhemos aleatoriamente. No código abaixo, criamos uma lista de países. Quando fazemos uma solicitação, usamos random.choice() para usar um país aleatório da lista. Nosso proxy_url é formatado 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)

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

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

Como criar uma conexão de proxy alternativa

Nos exemplos acima, usamos somente datacenter e proxies gratuitos. Proxies gratuitos não são muito confiáveis. Os 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 o URL usando uma conexão de datacenter. Quando isso falha, mudamos para 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())

Esse exemplo é um pouco mais complicado do que os outros que abordamos 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 apresentar algumas das funcionalidades mais avançadas do HTTPX.
  • Primeiro, tentamos fazer nossa solicitação com o datacenter_proxy.
  • Se não obtivermos uma resposta adequada, tentaremos novamente a solicitação usando nosso residential_proxy. Observe também o sinalizador verify no código. Ao usar nossos proxies residenciais, você precisa baixar e usar nosso certificado SSL.
  • Assim que obtivermos uma resposta sólida, gravamos a página em um arquivo HTML. Podemos abrir esta página em nosso navegador e ver o que o proxy realmente acessou e enviou de volta para nós.

Se você tentar o código acima, sua saída e o arquivo HTML resultante devem ser muito parecidos com este.

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 nossos proxies residenciais oferecem uma excelente alternativa 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é mesmo os anti-bots mais difíceis. O Web Unlocker reconhece e resolve automaticamente todos os CAPTCHAs na página. Depois de passar pelos anti-bots, ele envia você de volta à página da web.
  • Scraping Browser: este produto tem ainda mais recursos. Na verdade, o Scraping Browser permite que você controle um navegador remoto com integração de proxy e um solucionador CAPTCHA automatizado.
  • APIs do Web Scraper: com essas APIs, fazemos a coleta para você. Tudo o que você precisa fazer é chamar a API e analisar os dados JSON que recebe na resposta.
  • Conjuntos de dados: explore nosso mercado de conjuntos de dados para encontrar centenas de conjuntos de dados pré-coletados ou solicitar/criar um personalizado. Você pode escolher uma taxa de atualização e filtrar somente os pontos de dados necessários.

Conclusão

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

Como você aprendeu, a Bright Data oferece o pacote completo para seus projetos de web scraping. Comece seu teste gratuito com os proxies da Bright Data hoje mesmo!

Não é necessário cartão de crédito