Volver al blog
Guías
Suciu DanLast updated on Mar 31, 20266 min read

Desbloquea sitios web y protege tu identidad con proxies y Axios Node.js

Desbloquea sitios web y protege tu identidad con proxies y Axios Node.js

¿Qué es Axios?

Axios es una popular biblioteca de cliente HTTP basada en promesas que permite realizar solicitudes HTTP en Node.js. Es ligera y fácil de usar, lo que la convierte en una excelente opción para proyectos de web scraping.

Axios admite una amplia gama de funciones, como proxies, conversión automática de datos JSON, soporte para cancelar solicitudes y soporte para interceptores, lo que te permite gestionar tareas como la autenticación y el manejo de errores.

¿Qué son los proxies?

Los proxies, también conocidos como servidores proxy, actúan como intermediarios entre un cliente (como un navegador web o un scraper) y un servidor de destino (como un sitio web).

El proxy recibe las solicitudes del cliente y las reenvía al servidor de destino. A continuación, el servidor de destino envía la respuesta al proxy, que a su vez la reenvía al cliente.

En el web scraping, puedes utilizar proxies para ocultar la dirección IP del scraper, de modo que el sitio web del que estás extrayendo datos no detecte ni bloquee la solicitud. Además, el uso de múltiples proxies puede ayudar a evitar la detección y el bloqueo.

Algunos proveedores de proxies ofrecen opciones de rotación de IP, por lo que puedes rotar los proxies para evitar ser bloqueado.

Requisitos previos

Para utilizar un proxy con Axios y Node.js, necesitarás tener Node.js y npm (Node Package Manager) instalados en tu ordenador. Si aún no lo has hecho, puedes descargarlos e instalarlos desde el sitio web de Node.js.

Una vez instalados Node.js y npm, abre el terminal, crea una nueva carpeta para el proyecto y ejecuta el comando `npm init`. Sigue las instrucciones y crea un archivo package.json básico.

Instala Axios con este comando:

npm install axios

Realizar una solicitud HTTP

Hagamos nuestra primera solicitud con Axios. Enviaremos una solicitud GET al punto final de ipify. La solicitud devolverá nuestra dirección IP.

Crea un archivo index.js y pega el siguiente 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()

})()

Empezamos importando la biblioteca axios y utilizamos el método get para enviar una solicitud al punto final api.ipify.org.

Puedes ejecutar el código utilizando el comando `node index.js` en la terminal. El resultado debería mostrar tu dirección IP. Comprueba el resultado accediendo a la URL en tu navegador.

Uso de proxies con Axios

Antes de escribir ningún código, ve al sitio web Free Proxy List y elige un proxy que esté lo más cerca posible de tu ubicación. En mi caso, elegiré un proxy de Alemania.

El método `get` de Axios admite un segundo parámetro llamado options. Dentro de este parámetro, podemos definir los detalles del proxy.

Nuestra solicitud GET anterior con un proxy tendrá este aspecto:

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

    proxy: {

        protocol: 'http',

        host: '217.6.28.219',

        port: 80

    }

})

Al ejecutar el código, verás que la dirección IP devuelta es diferente a la tuya. Esto se debe a que la solicitud se enruta a través de un servidor proxy, ocultando así tu dirección IP para que no sea detectada.

¿Y qué hay de la autenticación?

Al suscribirte a un servicio de proxy premium, recibirás un nombre de usuario y una contraseña para utilizarlos en tu aplicación con fines de autenticación.

El objeto `proxy` de Axios tiene una propiedad auth que puede recibir credenciales de autenticación. Un ejemplo de una solicitud GET utilizando esta configuración sería el siguiente:

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"

        }

    }

})

Configurar el proxy como variable de entorno

Una forma alternativa de configurar un proxy en Axios es estableciendo las variables de entorno `http_proxy` o `https_proxy`. Este método te permite omitir la configuración de los detalles del proxy dentro de los comandos de Axios, ya que se obtendrán automáticamente de las variables de entorno.

Para garantizar la compatibilidad entre plataformas, recomiendo instalar el paquete `cross-env`, que implementa un comando similar a `export` para Windows.

Instala el paquete globalmente con este comando:

npm install -g cross-env

Limpiemos el código de `axios.get` y dejémoslo en su versión inicial. El código debería tener este aspecto:

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

En lugar de simplemente ejecutar el código con `node index.js`, incluiremos la URL del proxy delante del comando de la siguiente manera:

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

El resultado del script debería ser la dirección IP del proxy, en lugar de la tuya. Para confirmarlo, puedes visitar la URL de ipify en tu navegador.

Rotación de proxies

Rotar proxies es una buena idea porque ayuda a evitar la detección y evita que los sitios web bloqueen tu dirección IP. Los sitios web pueden rastrear y bloquear direcciones IP que realizan demasiadas solicitudes en un corto periodo de tiempo, o aquellas asociadas con actividades de scraping.

Podemos utilizar el sitio web Free Proxy List para compilar una lista con proxies que podamos rotar con cada solicitud `axios`.

Ten en cuenta que la lista de proxies que puedas encontrar en el sitio web puede diferir de la lista que yo he recopilado. La lista que he creado tiene este aspecto:

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

    }

];

Muy bien, volvamos a incluir la propiedad `proxy` en la configuración de `axios`. Pero en lugar de utilizar un solo proxy, elegiremos uno al azar de nuestra lista de proxies. El código tendrá este aspecto:

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

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

})

Este es el contenido del archivo 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()

})()

Uso de proxies de WebScrapingAPI

Usar proxies premium de un servicio como WebScrapingAPI es mejor que usar proxies gratuitos porque son más fiables, más rápidos y ofrecen mayor seguridad. Los proxies premium tienen menos probabilidades de ser bloqueados por los sitios web y presentan una menor latencia.

Por el contrario, los proxies gratuitos pueden ser lentos, poco fiables, contener malware y son propensos a ser bloqueados por los sitios web.

¿Quieres probar WebScrapingAPI? No hay problema, solo tienes que registrarte para obtener nuestra prueba gratuita de 14 días y tendrás acceso a todas las funciones interesantes e incluso recibirás 5.000 créditos para probar.

Una vez que tengas una cuenta, dirígete al API Playground y selecciona la pestaña «Proxy Mode» en la sección «Code Samples»

Usemos la URL del proxy en nuestro código. La solicitud GET de axios tendrá este aspecto:

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]'

        }

    }

})

La propiedad `username` te permite habilitar o deshabilitar funciones específicas de la API. Ten en cuenta que también debes configurar tu clave de API en la propiedad `password`. Puedes consultar la documentación completa aquí.

Cada vez que ejecutes este código, recibirás una dirección IP diferente, ya que WebScrapingAPI rota las IP con cada solicitud. Puedes obtener más información sobre esta función leyendo la documentación sobre el modo proxy.

Además, tienes la opción de cambiar entre proxies de centro de datos y proxies residenciales. Encuentra más información sobre los diferentes tipos de proxies que ofrecemos visitando la documentación sobre proxies.

Conclusión

El uso de un proxy es un aspecto importante del web scraping, ya que te permite ocultar tu dirección IP y acceder a sitios web bloqueados. Axios es una potente biblioteca para extraer datos y, cuando se combina con un proxy fiable, puedes lograr una extracción de datos eficiente y rápida.

Al utilizar un servicio de proxy premium como WebScrapingAPI, tendrás acceso a una amplia gama de funciones, incluyendo la rotación de IP y la opción de cambiar entre proxies de centro de datos y residenciales.

Esperamos que este artículo te haya proporcionado una visión útil sobre el uso de un proxy con Axios y Node.js y cómo podría ser beneficioso para tus necesidades de scraping. No dudes en registrarte para obtener nuestra prueba gratuita de 14 días, para probar nuestro servicio y explorar todas las características y funcionalidades.

Acerca del autor
Suciu Dan, Cofundador @ WebScrapingAPI
Suciu DanCofundador

Suciu Dan es cofundador de WebScrapingAPI y escribe guías prácticas dirigidas a desarrolladores sobre el scraping web con Python, el scraping web con Ruby y las infraestructuras de proxy.

Empieza a crear

¿Estás listo para ampliar tu recopilación de datos?

Únete a más de 2000 empresas que utilizan WebScrapingAPI para extraer datos de la web a escala empresarial sin ningún gasto de infraestructura.