Configurar o ambiente
Antes de começarmos, vamos certificar-nos de que temos todas as ferramentas necessárias à mão. Primeiro, descarregue e instale a versão mais recente do Python a partir do site oficial.
Para este tutorial, vamos utilizar 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 iremos escrever 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 um pedido GET
Vamos começar por enviar um pedido GET simples. 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
Vais reparar que o resultado é o teu endereço IP real e que, independentemente do número de vezes que executares 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 endereço IP diferente sempre que executar o 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 proxy 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, tendo em conta que mesmo os melhores proxies podem, por vezes, ser instáveis, é recomendável tratar as 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('Não foi possível ligar ao proxy')
Se conseguiu encontrar um proxy gratuito que funcione, depois de 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
Vamos agora ver como podemos utilizar 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, vamos supor 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 definido diretamente no código ou lido a partir de um ficheiro, à sua escolha. Com 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 workers, 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 alargado para vários URLs, com um valor de tempo limite específico para cada um.
Ao executar o script, devem ser enviadas várias solicitações GET em simultâneo, cujo resultado serão diferentes endereços IP (se os proxies gratuitos estiverem a funcionar).
Aumentar a escala
Quando se trata de começar a alternar proxies, existem algumas práticas recomendadas essenciais que podem ajudar a garantir que a rotação de proxies seja o mais eficaz possível. Aqui ficam 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, muitas vezes não são fiáveis e podem até pôr 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 raspar
Antes de começar a extrair dados, é aconselhável testar a rotação de proxies para se certificar de que está a funcionar como previsto. Isto irá ajudá-lo a identificar e resolver quaisquer problemas antes que estes causem complicações mais à frente.
Utilizar a rotação do user-agent
A rotação do endereço IP é uma forma eficaz de contornar as medidas anti-scraping, mas não é a única técnica em que deve confiar. Combinar a rotação de IP com a rotação do 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 pesquisar bem 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 endereços IP e localizações, bem como funcionalidades como a rotação automática de IP e a 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 mundo do web scraping. Uma boa API de scraping irá gerir a rotação de proxies por si e proporcionar-lhe uma interface intuitiva e fácil de utilizar para aceder aos dados de que necessita.
O seu mecanismo de rotação de proxies evita completamente os bloqueios, e a sua base de conhecimento alargada permite aleatorizar os dados do navegador, de modo a 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 através de um proxy. O pedido será simplesmente redirecionado para a API, enquanto o seu script beneficia da rotação de proxies.
Conclusão
Em resumo, saber como alternar proxies é uma técnica essencial para a extração de dados da Web, e o Python facilita a sua implementação. Ao seguir os passos descritos neste guia, adquiriu conhecimentos que vão desde a utilização de um proxy numa única solicitação até à forma de acelerar o processo de alternância de proxies.
Além disso, descobriu algumas dicas adicionais sobre a rotação de proxies no que diz respeito ao aumento da escala do 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 necessários para o fazer como um profissional. Boa sorte com o scraping!




