Voltar ao blogue
Guias
Suciu DanLast updated on Mar 31, 20266 min read

Desbloqueie sites e proteja a sua identidade com proxies e o Axios Node.js

Desbloqueie sites e proteja a sua identidade com proxies e o Axios Node.js

O que é o Axios?

O Axios é uma biblioteca de cliente HTTP popular, baseada em promessas, que permite efetuar pedidos HTTP no Node.js. É leve e fácil de usar, tornando-se uma excelente escolha para projetos de web scraping.

O Axios suporta uma vasta gama de funcionalidades, tais como proxies, conversão automática de dados JSON, suporte para cancelamento de pedidos e suporte para interceptores, o que permite lidar com tarefas como autenticação e tratamento de erros.

O que são proxies?

Os proxies, também conhecidos como servidores proxy, atuam como intermediários entre um cliente (como um navegador web ou um scraper) e um servidor de destino (como um site).

O proxy recebe pedidos do cliente e reencaminha-os para o servidor de destino. O servidor de destino envia então a resposta de volta ao proxy, que, por sua vez, a reenvia ao cliente.

No web scraping, pode utilizar proxies para ocultar o endereço IP do scraper, para que o site que está a scraper não detete e bloqueie a solicitação. Além disso, a utilização de vários proxies pode ajudar a evitar a deteção e o bloqueio.

Alguns fornecedores de proxies oferecem opções de rotação de IP, pelo que pode alternar os proxies para evitar ser bloqueado.

Pré-requisitos

Para utilizar um proxy com o Axios e o Node.js, terá de ter o Node.js e o npm (Node Package Manager) instalados no seu computador. Se ainda não o fez, pode descarregá-los e instalá-los a partir do site do Node.js.

Depois de instalar o Node.js e o npm, abra o terminal, crie uma nova pasta para o projeto e execute o comando `npm init`. Siga as instruções e crie um ficheiro package.json base.

Instale o axios utilizando este comando:

npm install axios

Fazer uma solicitação HTTP

Vamos fazer a nossa primeira solicitação com o Axios. Enviaremos uma solicitação GET para o endpoint do ipify. A solicitação retornará o nosso endereço IP.

Crie um ficheiro index.js e cole o seguinte código:

// Import axios

const axios = require('axios');

(async () => {

    // For storing the response

    let res

    try {

   	 // Make a GET request with Axios

   	 res = await axios.get('https://api.ipify.org?format=json')

   	 // Log the response data

   	 console.log(res.data)

    } catch(err) {

   	 // Log the error

   	 console.log(err)

    }

    // Exit the process

    process.exit()

})()

Começamos por importar a biblioteca axios e utilizamos o método get para enviar uma solicitação ao endpoint api.ipify.org.

Pode executar o código utilizando o comando `node index.js` no terminal. O resultado deverá apresentar o seu endereço IP. Verifique o resultado acedendo à URL no seu navegador.

Usar proxies com o Axios

Antes de escrevermos qualquer código, aceda ao site Free Proxy List e escolha um proxy que esteja mais próximo da sua localização. No meu caso, vou escolher um proxy para a Alemanha.

O método `get` do Axios suporta um segundo parâmetro chamado options. Dentro deste parâmetro, podemos definir os detalhes do proxy.

A nossa solicitação GET anterior com um proxy ficará assim:

res = await axios.get('https://api.ipify.org?format=json', {

    proxy: {

        protocol: 'http',

        host: '217.6.28.219',

        port: 80

    }

})

Ao executar o código, irá verificar que o endereço IP devolvido é diferente do seu. Isto acontece porque a solicitação é encaminhada através de um servidor proxy, ocultando assim o seu endereço IP da deteção.

E quanto à autenticação?

Ao subscrever um serviço de proxy premium, receberá um nome de utilizador e uma palavra-passe para utilizar na sua aplicação para autenticação.

O objeto `proxy` do Axios possui uma propriedade auth que pode receber credenciais de autenticação. Um exemplo de uma solicitação GET usando esta configuração ficaria assim:

res = await axios.get('https://api.ipify.org?format=json', {

    proxy: {

        protocol: 'http',

        host: '217.6.28.219',

        port: 80,

        auth: {

            username: "PROVIDED_USER",

            password: "PROVIDED_PASSWORD"

        }

    }

})

Definir o proxy como uma variável de ambiente

Uma forma alternativa de configurar um proxy no Axios é definindo as variáveis de ambiente `http_proxy` ou `https_proxy`. Este método permite-lhe evitar a configuração de detalhes do proxy nos comandos do Axios, uma vez que estes serão obtidos automaticamente a partir das variáveis de ambiente.

Para compatibilidade multiplataforma, recomendo a instalação do pacote `cross-env`, que implementa um comando semelhante ao `export` para o Windows.

Instale o pacote globalmente utilizando este comando:

npm install -g cross-env

Vamos limpar o código `axios.get` e levá-lo à versão inicial. O código deve ficar assim:

res = await axios.get('https://api.ipify.org?format=json')

Em vez de simplesmente executar o código com `node index.js`, vamos incluir o URL do proxy à frente do comando da seguinte forma:

cross-env https_proxy=http://217.6.28.219:80/ node index.js

A saída do script deve ser o endereço IP do proxy, em vez do seu próprio. Para confirmar isto, pode visitar a URL do ipify no seu navegador.

Proxies rotativos

A rotação de proxies é uma boa ideia porque ajuda a evitar a deteção e impede que os sites bloqueiem o seu endereço IP. Os sites podem rastrear e bloquear endereços IP que façam demasiados pedidos num curto período de tempo, ou aqueles associados a atividades de scraping.

Podemos usar o site Free Proxy List para compilar uma lista com proxies que podemos alternar a cada pedido `axios`.

Tenha em atenção que a lista de proxies que poderá encontrar no site pode diferir da lista que compilei. A lista que criei tem o seguinte aspeto:

const proxiesList = [

    {

   	 protocol: 'http',

   	 host: '217.6.28.219',

   	 port: 80

    },

    {

   	 protocol: 'http',

   	 host: '103.21.244.152',

   	 port: 80

    },

    {

   	 protocol: 'http',

   	 host: '45.131.4.28',

   	 port: 80

    }

];

Muito bem, vamos então colocar a propriedade `proxy` de volta na configuração do `axios`. Mas, em vez de usar apenas um proxy, vamos escolher um aleatoriamente da nossa lista de proxies. O código ficará assim:

res = await axios.get('https://api.ipify.org?format=json', {

    proxy: proxiesList[Math.floor(Math.random() * proxiesList.length)]

})

Este é o conteúdo do ficheiro index.js:

// Import axios

const axios = require('axios');

const proxiesList = [

    {

   	 protocol: 'http',

   	 host: '217.6.28.219',

   	 port: 80

    },

    {

   	 protocol: 'http',

   	 host: '172.67.180.244',

   	 port: 80

    },

    {

   	 protocol: 'http',

   	 host: '45.131.4.28',

   	 port: 80

    }

];

(async () => {

    // For storing the response

    let res

    try {

   	 // Make a GET request with Axios

   	 res = await axios.get('https://api.ipify.org?format=json', {

   		 proxy: proxiesList[Math.floor(Math.random() * proxiesList.length)]

   	 })

   	 // Log the response data

   	 console.log(res.data)

    } catch(err) {

   	 // Log the error

   	 console.log(err)

    }

    // Exit the process

    process.exit()

})()

Utilizar proxies da WebScrapingAPI

Usar proxies premium de um serviço como o WebScrapingAPI é melhor do que usar proxies gratuitos, porque são mais fiáveis, mais rápidos e oferecem maior segurança. Os proxies premium têm menos probabilidades de serem bloqueados pelos sites e apresentam menor latência.

Em contrapartida, os proxies gratuitos podem ser lentos, pouco fiáveis, conter malware e são propensos a serem bloqueados por sites.

Quer experimentar a WebScrapingAPI? Não há problema, basta inscrever-se na nossa versão de avaliação gratuita de 14 dias e terá acesso a todas as funcionalidades fantásticas e até receberá 5.000 créditos para experimentar.

Assim que tiver uma conta, aceda ao API Playground e selecione o separador «Proxy Mode» na secção «Code Samples»

Vamos usar o URL do proxy no nosso código. A solicitação GET do axios ficará assim:

res = await axios.get('https://api.ipify.org?format=json', {

    proxy: {

        host: 'proxy.webscrapingapi.com',

        port: 80,

        auth: {

            username: 'webscrapingapi.render_js=0.device=desktop.proxy_type=datacenter',

            password: '[YOUR_API_KEY]'

        }

    }

})

A propriedade `username` permite ativar ou desativar funcionalidades específicas da API. Tenha em mente que também deve definir a sua chave API na propriedade `password`. Pode consultar a documentação completa aqui.

Sempre que executar este código, receberá um endereço IP diferente, uma vez que a WebScrapingAPI alterna os IPs a cada pedido. Pode saber mais sobre esta funcionalidade lendo a documentação sobre o Modo Proxy.

Além disso, tem a opção de alternar entre proxies de datacenter e residenciais. Encontre mais informações sobre os diferentes tipos de proxies que oferecemos, visitando a documentação sobre proxies.

Conclusão

A utilização de um proxy é um aspeto importante do web scraping, uma vez que permite ocultar o seu endereço IP e aceder a sites bloqueados. O Axios é uma biblioteca poderosa para a extração de dados e, quando combinado com um proxy fiável, permite uma extração de dados eficiente e rápida.

Ao utilizar um serviço de proxy premium como o WebScrapingAPI, terá acesso a uma vasta gama de funcionalidades, incluindo rotação de IP e a opção de alternar entre proxies de datacenter e residenciais.

Esperamos que este artigo lhe tenha proporcionado uma compreensão útil sobre a utilização de um proxy com o Axios e o Node.js e como isso pode ser benéfico para as suas necessidades de scraping. Sinta-se à vontade para se inscrever na nossa avaliação gratuita de 14 dias, para testar o nosso serviço e explorar todos os recursos e funcionalidades.

Sobre o autor
Suciu Dan, Co-fundador @ WebScrapingAPI
Suciu DanCo-fundador

Suciu Dan é cofundador da WebScrapingAPI e escreve guias práticos, voltados para programadores, sobre web scraping em Python, web scraping em Ruby e infraestruturas de proxy.

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.