Voltar ao blogue
Guias
Ștefan RăcilăLast updated on Mar 31, 20265 min read

Como utilizar um servidor proxy com o módulo requests do Python - Guia completo

Como utilizar um servidor proxy com o módulo requests do Python - Guia completo

Introdução

O web scraping é uma ferramenta poderosa que permite extrair informações valiosas de sites. No entanto, também pode sobrecarregar os servidores dos sites que está a rastrear, razão pela qual muitos sites bloqueiam endereços IP que fazem demasiados pedidos. Para evitar isso, pode utilizar proxies para fazer os pedidos. Neste artigo, vou mostrar-lhe como utilizar Python com proxies e como alternar os IPs dos proxies para evitar ser bloqueado.

Configuração

Antes de começarmos, terá de cumprir os seguintes pré-requisitos:

✅ Python instalado

✅ Alguma experiência com Python

✅ Biblioteca Python requests também instalada

✅ Uma lista de IPs e portas de proxy

Para instalar o Python, terá de descarregar o instalador do Python a partir do site oficial do Python: https://www.python.org/downloads/

Pode escolher a versão mais recente do Python 3. Recomenda-se utilizar a versão mais recente do Python para ter acesso às funcionalidades mais recentes e às atualizações de segurança.

Assim que o download estiver concluído, execute o instalador e siga as instruções para instalar o Python no seu computador. Durante o processo de instalação, certifique-se de que marca a opção para adicionar o Python ao PATH do seu sistema, o que lhe permitirá executar o Python a partir da linha de comandos.

Após a conclusão da instalação, pode verificar se o Python foi instalado corretamente abrindo um prompt de comando ou terminal e executando o comando `python --version`. Isto deverá exibir a versão do Python que instalou.

Pode verificar se o pacote `python-requests` está instalado abrindo o terminal e executando o seguinte comando:

$ pip freeze

O `pip` é um gestor de pacotes que deve vir incluído nas versões mais recentes do Python. Se, por qualquer motivo, precisar de instalar o `pip` separadamente, pode seguir as instruções deste guia.

O `pip freeze` irá exibir todos os pacotes Python atualmente instalados e as suas versões. Verifique se o módulo `requests` está presente nessa lista. Caso contrário, instale-o executando o seguinte comando:

$ pip install requests

Configuração dos proxies

Vou explicar nesta secção como configurar proxies com o `python-requests`. Para começar, precisamos de um proxy funcional e da URL para a qual queremos enviar o pedido.

Utilização básica

import requests

proxies = {

    'http': 'http://proxy_ip:proxy_port', 

    'https': 'http://secure_proxy_ip:proxy_port',

}

res = requests.get('https://httpbin.org/get', proxies=proxies)

Se não tiver nenhum proxy privado que possa usar para testar este código, pode encontrar um proxy público gratuito na lista em freeproxylists.net. Tenha em atenção que os proxies nesse site não se destinam a ser utilizados em qualquer ambiente de produção e podem não ser fiáveis.

O dicionário `proxies` deve ter exatamente a mesma estrutura apresentada no exemplo de código. Deve indicar um proxy a utilizar para ligações HTTP e outro para ligações HTTPS. Os proxies podem ser diferentes ou não. Pode utilizar o mesmo proxy para vários protocolos.

Repare também que utilizei o esquema HTTP no URL do proxy para ambas as ligações. Nem todos os proxies têm um certificado SSL. A ligação ao proxy será feita utilizando HTTP em ambos os casos.

Para autenticar-se num proxy, pode utilizar esta sintaxe:

http://user:pass@working-proxy:port

Variáveis de ambiente

Se não tenciona utilizar vários conjuntos de proxies, pode exportá-los como variáveis de ambiente.

Veja como exportar variáveis de ambiente no shell do Linux

$ export HTTP_PROXY='http://proxy_ip:proxy_port'

$ export HTTP_PROXYS='http://secure_proxy_ip:proxy_port'

Para verificar o ambiente, basta executar

$ env

Veja como exportar variáveis de ambiente no PowerShell

>_ $Env:HTTP_PROXY='http://proxy_ip:proxy_port'

>_ $Env:HTTP_PROXYS='http://secure_proxy_ip:proxy_port'

Para verificar o ambiente, basta executar

>_ Get-ChildItem -Path Env:

Veja como exportar variáveis de ambiente no Prompt de Comando

\> set HTTP_PROXY='http://proxy_ip:proxy_port'

\> set HTTP_PROXYS='http://secure_proxy_ip:proxy_port'

Para verificar o ambiente, basta executar

\> set

Desta forma, não precisa de definir quaisquer proxies no seu código. Basta fazer o pedido e funcionará.

Como ler a resposta?

Pode ler os seus dados de várias formas, mas na maioria dos casos irá querer lê-los como texto simples ou como uma cadeia de caracteres codificada em JSON.

Texto simples:

response = requests.get(url)

text_resp = response.text

JSON: para respostas no formato JSON, o pacote requests fornece um método integrado.

response = requests.get(url)

json_resp = response.json()

Sessões de proxy

Também poderá querer extrair dados de sites que utilizam sessões. Neste caso, terá de criar um objeto de sessão. Primeiro, crie uma variável chamada `session` e atribua-a ao método `Session()` do requests. Agora, tem de atribuir os proxies ao atributo `.proxies` da sessão. Em seguida, envie o seu pedido utilizando o objeto `session` já criado. Desta vez, só tem de passar o URL como argumento.

import requests

session = requests.Session()

session.proxies = {

    'http': 'http://proxy_ip:proxy_port',

    'https': 'http://secure_proxy_ip:proxy_port',

}

res = session.get('https://httpbin.org/get')

Certifique-se de substituir `proxy_ip` e `proxy_port` pelo IP e pela porta reais do seu proxy.

Como alternar IPs de proxy

Para evitar ser bloqueado por sites, é importante alternar os IPs dos seus proxies. Uma forma de o fazer é criar uma lista de IPs e portas de proxy e selecionar proxies aleatoriamente ao efetuar pedidos.

Aqui está um exemplo:

def proxy_request(url, **kwargs):

    while True:

        try:

            proxy = random.randint(0, len(ip_addresses) - 1)

            proxies = {

                'http': ip_addresses(proxy),

                'https': ip_addresses(proxy)

            }

           

            response = requests.get(url, proxies=proxies, timeout=5, **kwargs)

            print(f"Currently using proxy: { proxy['http'] }")

            break

        except:

            print("Error encoutered, changing the proxy...")

    return response

print(proxy_request('https://httpbin.org/get'))

Contrate um profissional

Embora seja possível gerir os seus próprios proxies utilizando Python, trata-se de um processo demorado e pode exigir muito tempo e dinheiro para obter um bom conjunto de proxies. Para poupar tempo e dinheiro, pode utilizar uma ferramenta profissional de scraping. A WebScrapingAPI possui funcionalidades integradas de gestão e rotação de proxies. Temos um conjunto de proxies verificados e de alta qualidade, que são mais fiáveis e podem poupar-lhe tempo e dinheiro a longo prazo.

Temos também um modo de proxy que pode experimentar gratuitamente. Para obter uma chave API gratuita, basta criar uma conta e iniciar o período de avaliação da WebScrapingAPI. Este é um exemplo de código sobre como utilizar o nosso modo de proxy:

import requests

def get_params(object):

    params = ''

    for key,value in object.items():

        if list(object).index(key) < len(object) - 1:

            params += f"{key}={value}."

        else:

            params += f"{key}={value}"

    return params

API_KEY = '<YOUR_API_KEY>'

TARGET_URL = 'http://httpbin.org/get'

PARAMETERS = {

    "proxy_type":"datacenter",

    "device":"desktop"

}

PROXY = {

    "http": f"http://webscrapingapi.{ get_params(PARAMETERS) }:{ API_KEY }@proxy.webscrapingapi.com:80",

    "https": f"https://webscrapingapi.{ get_params(PARAMETERS) }:{ API_KEY }@proxy.webscrapingapi.com:8000"

}

response = requests.get(

    url=TARGET_URL,

    proxies=PROXY,

    verify=False

)

print(response.text)

Tenha em atenção que, se pretender ligar-se ao modo proxy via https, o seu código deve estar configurado para não verificar certificados SSL. Neste caso, seria `verify=False`, uma vez que está a trabalhar com Python Requests.

Conclusão

A utilização de proxies é uma forma eficaz de evitar ser bloqueado durante o web scraping. Ao alternar os IPs dos proxies e utilizar um conjunto de proxies, pode reduzir as hipóteses de ser bloqueado e aumentar as hipóteses de sucesso. No entanto, gerir os seus próprios proxies pode ser complicado e pode demorar muito tempo e dinheiro a obter um bom conjunto de proxies.

Ao subscrever um serviço de proxy premium, como o WebScrapingAPI, terá acesso a uma variedade de funcionalidades, tais como a rotação de IPs e a capacidade de alternar entre proxies de datacenter e residenciais.

Esperamos que este artigo lhe tenha proporcionado uma melhor compreensão de como utilizar um proxy com o HttpClient e de como este pode ajudá-lo nas suas necessidades de scraping. Inscreva-se na nossa avaliação gratuita de 14 dias para testar o nosso serviço e conhecer todas as suas características e funcionalidades.

Sobre o autor
Ștefan Răcilă, Desenvolvedor Full Stack @ WebScrapingAPI
Ștefan RăcilăDesenvolvedor Full Stack

Stefan Racila é engenheiro de DevOps e Full Stack na WebScrapingAPI, onde desenvolve funcionalidades do produto e mantém a infraestrutura que garante a fiabilidade da plataforma.

Comece a construir

Pronto para expandir a sua recolha de dados?

Junte-se a mais de 2.000 empresas que utilizam a WebScrapingAPI para extrair dados da Web à escala empresarial, sem quaisquer custos de infraestrutura.