Voltar ao blogue
Guias
Raluca PenciucLast updated on Mar 31, 20266 min read

Domine o Web Scraping: Como alternar proxies em Python

Domine o Web Scraping: Como alternar proxies em Python

Na era digital atual, o uso do web scraping tornou-se cada vez mais popular. No entanto, com esta crescente popularidade, vem também um maior escrutínio por parte de sites e serviços que não querem que os seus dados sejam extraídos.

Se pretende automatizar as suas tarefas de extração de dados, pode ter-se deparado com a necessidade de utilizar proxies para mascarar o seu endereço IP. No entanto, utilizar o mesmo proxy durante um longo período de tempo pode facilmente levar ao seu bloqueio. É aqui que a rotação de proxies entra em cena.

Neste artigo, vamos explorar como rodar proxies em Python, incluindo a instalação dos pré-requisitos necessários, a utilização de um único proxy e o aumento da velocidade durante a rotação dos proxies. Também discutiremos algumas dicas sobre como tirar o máximo partido dos seus esforços de rotação de proxies.

No final deste guia, será capaz de rodar proxies como um profissional e garantir que os seus esforços de web scraping passam despercebidos. Vamos começar!

Configurar o ambiente

Antes de começarmos, vamos certificar-nos de que temos as ferramentas necessárias à disposição. Primeiro, descarregue e instale a versão mais recente do Python, a partir do site oficial.

Para este tutorial, utilizaremos o Visual Studio Code como nosso Ambiente de Desenvolvimento Integrado (IDE), mas pode utilizar qualquer outro IDE à sua escolha. Crie uma nova pasta para o seu projeto e um novo ficheiro index.py, onde escreveremos o nosso código.

Agora abra o terminal e execute o seguinte comando para instalar o pacote necessário para enviar pedidos:

pip install requests

E é tudo! Podemos começar a programar.

Proxificar uma solicitação GET

Vamos começar por enviar uma simples solicitação GET. No ficheiro index.py recém-criado, escreva o seguinte código:

import requests

response = requests.get('https://api.ipify.org/?format=json')

print(response.text)

E agora execute o script utilizando o seguinte comando:

py index.py

Irá notar que o resultado é o seu endereço IP real e que, independentemente do número de vezes que executar o script, este apresentará sempre o mesmo resultado.

O objetivo deste guia é mostrar-lhe como pode ocultar o seu endereço IP real e como obter um IP diferente a cada execução do script. É aqui que os proxies entram em cena. Encontrá-los-á na seguinte estrutura:

http://proxy_username:proxy_password@proxy_host:proxy_port

O protocolo pode ser “http”, “https”, “socks4” ou “socks5”, enquanto “proxy_username” e “proxy_password” são opcionais.

O código atualizado deve ficar assim:

import requests

proxy_schema = {

    "http": "http://proxy_username:proxy_password@proxy_host:proxy_port",

    "https": "https://proxy_username:proxy_password@proxy_host:proxy_port"

}

URL = 'https://api.ipify.org/?format=json'

response = requests.get(URL, proxies=proxy_schema)

print(response.text)

Pode substituir o modelo de proxy por um real, fornecido por um serviço de proxy gratuito, apenas para efeitos de teste. Vale a pena referir, no entanto, que estes não são fiáveis e devem ser utilizados apenas para fins de teste.

De qualquer forma, considerando que mesmo os melhores proxies podem, por vezes, ser instáveis, é uma boa prática lidar com exceções no nosso código:

try:

    URL = 'https://api.ipify.org/?format=json'

    response = requests.get(URL, proxies=proxy_schema, timeout=30)

    print(response.text)

except:

    print('Unable to connect to the proxy')

Se conseguiu encontrar um proxy gratuito que funcione, após executar o código deverá notar que o resultado mudou, uma vez que já não é o seu endereço IP real.

Alternar os proxies

Agora vamos ver como podemos usar vários proxies para tornar as nossas solicitações anónimas. Ao mesmo tempo, iremos gerir a velocidade do nosso script. Enviaremos as solicitações de forma assíncrona, utilizando a biblioteca “concurrent.futures”.

Primeiro, digamos que temos a seguinte lista de proxies (ou conjunto de proxies):

proxy_pool = [

    "http://191.5.0.79:53281",

    "http://202.166.202.29:58794",

    "http://51.210.106.217:443",

    "http://5103.240.161.109:6666"

]

Isto pode ser codificado diretamente ou lido a partir de um ficheiro, à sua escolha. Usando isto, podemos escrever o seguinte código:

from concurrent.futures import ThreadPoolExecutor

with ThreadPoolExecutor(max_workers=8) as pool:

    for response in list(pool.map(scrape_job, proxy_pool)):

        pass

Inicializamos um conjunto de threads com um máximo de 8 trabalhadores, para executar a função “scrape_job” (a ser definida em breve), que receberá como parâmetro um elemento da lista “proxy_pool”.

Agora, a função “scrape_job” representará o código que escrevemos anteriormente, com um pequeno ajuste:

def scrape_job(proxy):

    try:

        URL = 'https://api.ipify.org/?format=json'

        proxy_scheme = {

            "http": proxy,

        	"https": proxy

    	  }

    	  response = requests.get(URL, proxies=proxy_scheme, timeout=30)

    	  print(response.text)

    except:

        print('Unable to connect to the proxy')

A variável “proxy_scheme” será agora atribuída dinamicamente, de acordo com o proxy que enviarmos como parâmetro. O script pode ser ainda mais ampliado para múltiplas URLs, com um valor de timeout específico para cada uma.

A execução do script deverá enviar múltiplas solicitações GET ao mesmo tempo, cujo resultado serão diferentes endereços IP (se os proxies gratuitos estiverem a funcionar).

Escalabilidade

Quando se trata de começar a rodar proxies, existem algumas práticas recomendadas fundamentais que podem ajudar a garantir que a sua rotação de proxies seja o mais eficaz possível. Aqui estão algumas dicas a ter em conta:

Os proxies gratuitos são uma má ideia

Embora os serviços de proxy gratuitos possam parecer uma opção económica, são frequentemente pouco fiáveis e podem até colocar em risco os seus esforços de scraping. Considere investir num serviço de proxy premium que ofereça um nível mais elevado de segurança e fiabilidade.

Teste antes de fazer o scraping

Antes de começar a fazer scraping, é uma boa ideia testar a rotação de proxies para garantir que está a funcionar como pretendido. Isto irá ajudá-lo a identificar e corrigir quaisquer falhas antes que causem problemas mais à frente.

Utilize a rotação do user-agent

A rotação do seu endereço IP é uma forma eficaz de contornar medidas anti-scraping, mas não é a única técnica em que deve confiar. Combinar a rotação de IP com a rotação de user-agent, que altera a assinatura do navegador, pode tornar ainda mais difícil para os sites detetarem e bloquearem o seu scraper.

Serviços de proxy premium

Nem todos os serviços de proxy são iguais, por isso é importante fazer a sua pesquisa e escolher um fornecedor que ofereça um elevado nível de segurança e fiabilidade. Procure um serviço que ofereça uma vasta gama de IPs e localizações, bem como funcionalidades como rotação automática de IP e navegação anónima.

Utilize uma API de web scraping

Utilizar uma API de web scraping pode ser uma excelente forma de simplificar o processo de rotação de proxies, especialmente se for novo no web scraping. Uma boa API de scraper irá gerir a rotação de proxies por si e fornecer-lhe uma interface limpa e fácil de utilizar para aceder aos dados de que necessita.

O seu mecanismo de rotação de proxies evita bloqueios por completo, e a sua base de conhecimento alargada permite randomizar os dados do navegador para que pareça um utilizador real.

No entanto, se preferir continuar a utilizar o seu próprio scraper, ou se o seu caso de utilização for demasiado complexo, também tem a opção de aceder à API como proxy. O pedido será simplesmente redirecionado para a API, enquanto o seu script beneficia da rotação de proxies.

Conclusão

Resumindo, saber como rodar proxies é uma técnica essencial para o web scraping, e o Python facilita a sua implementação. Ao seguir os passos descritos neste guia, obteve insights desde o proxying de um único pedido até como acelerar o processo de rotação de proxies.

Além disso, descobriu algumas dicas adicionais sobre a rotação de proxies quando se trata de expandir o seu projeto.

Lembre-se de que uma rotação eficaz de proxies pode aumentar significativamente o sucesso dos seus projetos de web scraping, e este guia forneceu-lhe as ferramentas e os conhecimentos para o fazer como um profissional. Boa sorte com o scraping!

Sobre o autor
Raluca Penciuc, Desenvolvedor Full-Stack @ WebScrapingAPI
Raluca PenciucDesenvolvedor Full-Stack

Raluca Penciuc é programadora Full Stack na WebScrapingAPI, onde desenvolve scrapers, aperfeiçoa estratégias de evasão e procura formas fiáveis de reduzir a deteção nos sites-alvo.

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.