Voltar ao blogue

O que são proxies de ISP e como utilizá-los para a extração de dados da Web

O que são proxies de ISP e como utilizá-los para a extração de dados da Web

Os proxies são um aspeto muito importante da extração de dados da Web. Existem, essencialmente, três tipos de proxies. Existem proxies de centro de dados, residenciais e de ISP. Cada tipo tem os seus próprios casos de utilização. No entanto, há pouca ou nenhuma informação disponível sobre o que significam e quando os utilizar na extração de dados da Web. E são especialmente os proxies de ISP que são ignorados pelos escritores técnicos. É por isso que hoje vamos centrar a nossa atenção neste tipo de proxies. No final do artigo de hoje, deverá ter uma compreensão sólida sobre:

  • O que é um proxy em geral e como funciona
  • Qual é a definição de um proxy ISP e quais são as suas particularidades
  • Como e por que usar proxies ISP para web scraping

O que é um servidor proxy?

Em resumo, os proxies são middleware entre clientes e servidores. Um proxy atua como intermediário para pedidos de clientes que procuram recursos noutros servidores. O fluxo da relação cliente - proxy - servidor é mais ou menos assim:

  • Um cliente liga-se ao servidor proxy, solicitando algum serviço a um servidor de destino
  • O servidor proxy avalia o pedido, liga-se ao servidor de destino e obtém o serviço solicitado
  • Uma vez recebido, transfere o serviço de volta para o cliente, sem alterações.

Além disso, os proxies também são utilizados para:

  • aumentar a segurança
  • melhorar o desempenho da rede
  • filtrar o tráfego de rede
  • bloquear sites indesejados
  • contornar restrições geográficas no acesso à Internet

Qual é a definição de proxies ISP?

Como discutimos na introdução, existem principalmente três tipos de proxies. Para os dois primeiros, a definição é bastante simples. Os proxies de datacenter são proxies que pertencem a datacenters. O que significa que os seus endereços IP estão associados ao datacenter. Os proxies residenciais têm o endereço IP associado a uma localização física. Além disso, estes endereços IP estão registados em nome de um indivíduo ou organização específica.

Agora, no que diz respeito aos proxies ISP, existe alguma confusão. Em primeiro lugar, ISP significa Internet Service Provider (Fornecedor de Serviços de Internet). E, como pode imaginar, todos os IPs residenciais têm origem em ISPs. Bem, este pequeno aspeto responde parcialmente à questão. Os proxies ISP situam-se algures entre os proxies de centro de dados e os proxies residenciais.

Na maioria das vezes, irá verificar que um proxy ISP é, na verdade, um proxy residencial, alojado numa máquina do centro de dados. Por isso, estes proxies herdam vantagens dos outros dois. E a lista de benefícios inclui, na sua maioria (mas não se limita a):

  • Legitimidade do IP - a utilização de um endereço IP residencial reduz o risco de deteção de bots
  • Velocidade - hospedar o proxy num servidor de centro de dados aumenta o desempenho do serviço

Porquê utilizar proxies ISP para web scraping?

A utilização de proxies no web scraping é uma necessidade bastante comum. Mas antes de discutir os proxies ISP em particular, deixe-me explicar-lhe por que razão os proxies são importantes para o scraping. Para começar, vamos definir o que é o web scraping. Em termos gerais, o web scraping consiste em aceder a um servidor com o objetivo de extrair recursos. E isso é normalmente feito através de software automatizado. Além disso, o web scraping envolve tipicamente o envio de muitas solicitações ao servidor alvo num curto período de tempo.

Como pode imaginar, isto coloca uma grande carga no servidor. E é por isso que as plataformas web normalmente não ficam «contentes» com o facto de os scrapers acederem aos seus servidores. Para impedir o acesso de software automatizado, estas plataformas utilizam geralmente algum tipo de sistema de deteção e prevenção. E um dos métodos de deteção é tão básico quanto possível: verificar o endereço IP. É senso comum pensar que os endereços IP associados a centros de dados são mais propensos a hospedar bots.

E penso que isto responde bastante bem à questão. Se tivermos em conta as principais vantagens discutidas anteriormente, teremos uma compreensão mais ampla da resposta. Utilizamos principalmente proxies de ISP na extração de dados da Web para aumentar a nossa taxa de sucesso, mantendo ao mesmo tempo um desempenho ideal. Mas não é só isso. Vamos explorar outros cenários:

#1: Aceder a sites específicos de uma localização

Tenho a certeza de que já se deparou com sites que visam visitantes de localizações específicas. Em SEO, este conceito é conhecido como conteúdo específico de geolocalização. O que acontece é que os sites verificam primeiro a origem do endereço IP do cliente. E se corresponder ao seu padrão (digamos que é um site dos EUA que visa apenas clientes dos EUA), permitirá que o cliente se ligue. Se, por outro lado, o cliente for de um país estrangeiro, o site bloqueará o seu acesso.

No web scraping, este é um cenário muito comum. Assim, como solução alternativa, utilizaremos proxies desse país específico. Pode querer experimentar primeiro um proxy de datacenter. Se continuar a ser bloqueado, pode então experimentar proxies de ISP, que, mais uma vez, oferecem uma taxa de sucesso mais elevada.

#2: Envio de um grande número de pedidos

Quando queremos aceder a muitos recursos num servidor, podemos sobrecarregar esse servidor. E os servidores geralmente interpretam isso como abuso e bloqueiam o endereço IP que está a enviar todas essas solicitações. No web scraping, para evitar ser bloqueado, usaríamos um sistema rotativo que alterna entre proxies de ISP. Desta forma, o servidor «pensará» que há diferentes utilizadores residenciais a aceder a ele. Assim, as solicitações em massa não serão bloqueadas.

Como utilizar proxies de ISP para web scraping?

Existem basicamente dois tipos de web scrapers:

  • Baseados em clientes HTTP simples
  • Capazes de renderizar JavaScript

O primeiro tipo não é assim tão complexo e é normalmente mais rápido, uma vez que não requer a renderização de JavaScript. Não é diferente de enviar um comando `curl`. No entanto, a maioria dos sites modernos depende fortemente de JavaScript. Um bom exemplo é utilizar um cliente HTTP simples para fazer web scraping numa plataforma web construída com React ou Next JS. Em tais cenários, provavelmente receberá um ficheiro HTML que diz «por favor, ative o JavaScript». Aqui está um exemplo concreto de uma aplicação que criei com React:

~ » curl https://<REACT_APP>.com

...<body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>

Portanto, se quiser criar um scraper moderno, provavelmente precisará de utilizar uma versão automatizada de um navegador web. Isto irá ajudá-lo a renderizar JavaScript e também a realizar diferentes ações no seu alvo.

Normalmente, utilizo JavaScript e Puppeteer nos meus exemplos. Mas acho que, desta vez, vou mudar para a minha primeira e favorita linguagem de programação: Python. E a solução de eleição para webdrivers em Python é o Selenium. Vamos então ver como criar um scraper web com Selenium e proxies ISP:

#1: Criar um novo projeto

Primeiro, vamos criar um novo diretório que irá armazenar os nossos ficheiros. Em seguida, abra o projeto no seu IDE favorito (o meu é o Visual Studio Code) e abra um novo terminal. Para abrir um novo terminal a partir do VSCode, vá a Terminal > Novo terminal. Vamos criar um novo ambiente virtual dentro do projeto e ativá-lo:

~ » python3 -m venv env && source env/bin/activate

No seu projeto, vamos criar um novo ficheiro «scraper.py» e adicionar-lhe algum código. A estrutura básica de um scraper com Selenium, numa perspetiva de programação funcional, é:

from selenium import webdriver

def scrape_page(url):

   driver = webdriver.Chrome()

   driver.get(url)

   return driver.page_source

E é isso. Em 5 linhas de código:

  • Estamos a iniciar um navegador automatizado
  • Estamos a aceder ao nosso alvo
  • E estamos a recolher os seus recursos.

Mas lembre-se de que queremos usar proxies de ISP com o Selenium. De modo que o nosso navegador não seja o mais discreto, mas digamos que seja mais indetetável. Felizmente, as coisas são bastante simples em Python (e é por isso que adoro-o). Eis como introduzimos proxies no Selenium:

from selenium import webdriver

def scrape_page(url, proxy):

   options = webdriver.ChromeOptions()

   options.add_argument('--proxy-server=%s' % proxy)

   driver = webdriver.Chrome(options=options)

   driver.get(url)

   return driver.page_source

print(scrape_page('http://httpbin.org/ip', '75.89.101.60:80'))

Apenas adicionámos mais linhas dentro da função. A última serve para chamar a função. Se executar o script agora, provavelmente conseguiremos ver que o pedido tem origem em 75.89.101.60. Para efeitos deste exemplo, utilizei um servidor proxy gratuito disponível aqui. Mas se quiseres criar um scraper a sério, sugiro que procures fontes mais fiáveis. De preferência, fornecedores de proxy que também ofereçam proxies ISP.

Como verificar a origem de um endereço IP?

Existem algumas formas de verificar se um endereço IP tem origem num proxy de ISP. Mas, uma vez que hoje estamos a falar de DevOps, provavelmente deve familiarizar-se com a utilização do terminal. Hoje vou apresentar-lhe o `whois`.

Nos sistemas operativos Unix e similares, o `whois` está integrado. É um utilitário de linha de comando que permite aos utilizadores pesquisar informações sobre alvos. E os alvos podem ser nomes de domínio ou endereços IP. Então, vamos abrir uma nova janela de terminal e testar este comando.

Primeiro, vamos enviar um comando `curl` para a API oferecida pelo ipify.org. Desta forma, pode obter o seu próprio endereço IP e realizar o teste utilizando-o. Se não estiver familiarizado com o `curl`, basta consultar o meu artigo sobre como utilizar o curl.

~ » curl api.ipify.org

<IP_ADDRESS>

Agora que temos um endereço IP para testar, basta enviar o comando `whois`. Usei o meu próprio IP, mas sinta-se à vontade para substituir <IP_ADDRESS> pelo seu:

~ » whois <IP_ADDRESS>

...

inetnum: 82.78.XX.0 - 82.78.XX.XX

netname: RO-RESIDENTIAL

descr: RCS & RDS Residential CGN

descr: City: Bucuresti

remarks: INFRA-AW

country: RO

...

O resultado é mais extenso, mas queria que tivesse uma visão geral de como é fácil detetar um IP residencial. Existem também APIs públicas que rastreiam IPs de centros de dados, como a oferecida pela incolumitas.

Conclusões

Hoje explorámos tanto as competências de DevOps como de programação na criação de um web scraper. Para concluir, vou fazer-lhe uma pergunta simples. Podemos dizer que os proxies de ISP não são mais do que proxies de centros de dados, escondidos por trás de um endereço IP residencial? Acho que esta não é a definição mais precisa, mas descreve certamente muito bem estes proxies.

Na Web Scraping API, utilizamos tanto proxies residenciais como de centros de dados. Isto porque alguns alvos permitem tráfego não residencial, enquanto outros não. Se quiser saber mais sobre como pode utilizar proxies com a nossa API, consulte a nossa documentação.

Sobre o autor
Mihnea-Octavian Manolache, Desenvolvedor Full Stack @ WebScrapingAPI
Mihnea-Octavian ManolacheDesenvolvedor Full Stack

Mihnea-Octavian Manolache é engenheiro Full Stack e DevOps na WebScrapingAPI, onde desenvolve funcionalidades do produto e mantém a infraestrutura que garante o bom funcionamento 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.