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 efetuar os pedidos. Neste artigo, vou mostrar-lhe como utilizar o Python com proxies e como alternar entre endereços IP de proxy 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 requests do Python também instalada
✅ Uma lista de IPs e portas de proxy
Para instalar o Python, terá de descarregar o programa de instalação 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 beneficiar das funcionalidades mais recentes e das atualizações de segurança.
Assim que o download estiver concluído, execute o programa de instalação 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 uma janela de comando ou um terminal e executando o comando `python --version`. Isto deverá mostrar 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 comando `pip freeze` irá apresentar todos os pacotes Python atualmente instalados e as respetivas versões. Verifique se o módulo `requests` consta dessa lista. Caso contrário, instale-o executando o seguinte comando:
$ pip install requestsConfiguração dos servidores proxy
Nesta secção, vou explicar como configurar proxies com o `python-requests`. Para começar, precisamos de um proxy que funcione 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 utilizar para testar este código, pode encontrar um proxy público gratuito na lista disponível em freeproxylists.net. Tenha em atenção que os proxies desse 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. É possível 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 possuem um certificado SSL. A ligação ao proxy será estabelecida através de HTTP em ambos os casos.
Para efetuar a autenticação num proxy, pode utilizar esta sintaxe:
http://user:pass@working-proxy:portVariáveis de ambiente
Se não pretender 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
\> definir
Desta forma, não precisa de definir nenhum proxy no seu código. Basta fazer o pedido e funcionará.
Como interpretar 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 disponibiliza 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-lhe o método `Session()` da biblioteca 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, basta 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 endereço IP e pela porta reais do seu proxy.
Como alternar os endereços IP dos proxies
Para evitar ser bloqueado por sites, é importante alternar os IPs dos proxies. Uma forma de o fazer é criar uma lista de IPs e portas de proxy e selecionar proxies aleatoriamente ao enviar pedidos.
Eis 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.
Também dispomos de um modo 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. Aqui está um exemplo de código que mostra como utilizar o nosso modo 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 estabelecer ligação ao modo proxy através de HTTPS, o seu código deve estar configurado para não verificar certificados SSL. Neste caso, a configuração seria `verify=False`, uma vez que está a trabalhar com o Python Requests.
Para levar
A utilização de proxies é uma forma eficaz de evitar ser bloqueado durante a extração de dados da Web. Ao alternar entre endereços IP de proxy e utilizar um conjunto de proxies, é possível 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 exigir muito tempo e dinheiro para 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 IP e a possibilidade de alternar entre proxies de centro de dados e residenciais.
Esperamos que este artigo lhe tenha ajudado a compreender melhor como utilizar um proxy com o HttpClient e como isso pode ajudá-lo nas suas necessidades de scraping. Inscreva-se na nossa versão de avaliação gratuita de 14 dias para testar o nosso serviço e conhecer todas as suas características e funcionalidades.




