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 axiosFazer 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.




