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!




