Comenzando con Axios en Node.js: Una guía para principiantes

Senior Web Scraping Engineer
Todo lo que sabemos es que manejar las solicitudes HTTP de manera eficiente es crucial, y una herramienta que facilita esto es Axios. Ya sea que esté recuperando datos de API, enviando datos a servidores o simplemente raspando contenido de sitios web, Axios es una gran herramienta para optimizar el proceso.
Profundicemos en qué es Axios, cómo funciona y exploremos algunas formas prácticas de usarlo de manera efectiva en Node.js.
¿Qué es Axios en Node.js?
Axios es un cliente HTTP basado en promesas diseñado para entornos JavaScript del lado del cliente y del lado del servidor. Con Axios, puedes realizar solicitudes HTTP desde el navegador en aplicaciones de frontend y desde el servidor en aplicaciones de Node.js. Axios transforma automáticamente los datos JSON y maneja muchas de las complejidades del manejo de solicitudes y respuestas, lo que hace que sea simple trabajar con API y manejar datos.
Axios se creó originalmente como un cliente HTTP basado en navegador, pero se ha vuelto increíblemente popular del lado del servidor, especialmente con Node.js. Con su sintaxis simple y sus amplias opciones de personalización, Axios se ha convertido en una de las bibliotecas preferidas por los desarrolladores de todo el mundo.
Características clave de Axios:
-
Basado en promesas: Dado que Axios se basa en promesas, permite un código más limpio y manejable utilizando la sintaxis
async/await
. Este enfoque facilita la escritura de código asíncrono sin el infierno de las devoluciones de llamada, lo que hace que tu código sea más legible y mantenible. -
Transformación automática de datos: Axios transforma automáticamente los datos JSON, simplificando el proceso de envío y recepción de datos en formato JSON. Cuando envía una solicitud o recibe una respuesta en formato JSON, analiza y serializa los datos automáticamente, permitiéndote trabajar directamente con objetos JavaScript.
-
Compatibilidad del lado del cliente y del servidor: Axios funciona tanto en el lado del cliente (en el navegador) como en el lado del servidor (en Node.js), lo que lo hace versátil tanto para el desarrollo de frontend como de backend. Cuando se usa en Node.js, Axios simplifica la realización de solicitudes HTTP a API, la realización de la obtención de datos de servidor a servidor y más.
-
Interceptores integrados: Axios admite interceptores de solicitud y respuesta, que son útiles para manejar tareas como registro, manejo de errores, autenticación o agregar encabezados antes de que se envíen las solicitudes o se procesen las respuestas.
-
Configuración personalizable: Axios permite una amplia personalización. Por ejemplo, puedes establecer valores predeterminados globales como encabezados o URL base, lo que facilita la configuración para diferentes entornos.
-
Manejo de errores: Axios proporciona un mecanismo robusto de manejo de errores que te permite detectar errores en función del código de estado devuelto. Puedes manejar los errores del cliente y del servidor de manera diferente, lo que facilita la gestión del manejo de las respuestas.
Casos de uso comunes para Axios en Node.js
-
Obtener datos de API: Axios se utiliza comúnmente en Node.js para obtener datos de API, lo que lo hace ideal para construir aplicaciones RESTful, especialmente cuando necesitas interactuar con servicios de terceros o microservicios.
-
Raspado web: Axios se puede usar para obtener contenido HTML de sitios web cuando se realiza el raspado web, especialmente para sitios estáticos. Combinado con herramientas como Cheerio, permite analizar HTML para extraer datos relevantes.
-
Manejo de autenticación: Axios se utiliza con frecuencia en Node.js para interactuar con servicios de autenticación, como enviar credenciales a una API para autenticación y manejar tokens.
-
Subidas/descargas de archivos: Es capaz de manejar datos binarios también, por lo que puedes usarlo para subir o descargar archivos desde un servidor.
¿Tienes problemas con los desafíos del raspado web y los bloqueos constantes en los proyectos en los que estás trabajando?
Intenta usar Scrapeless para que la extracción de datos sea fácil y eficiente, todo en una poderosa herramienta. ¡Pruébalo gratis hoy!
Ejemplo de uso en Node.js
A continuación, se muestra un ejemplo del uso de Axios en Node.js para realizar una solicitud GET:
javascript
const axios = require('axios');
async function fetchData() {
try {
const response = await axios.get('https://jsonplaceholder.typicode.com/posts');
console.log(response.data);
} catch (error) {
console.error('Error fetching data:', error.message);
}
}
fetchData();
Este código demuestra la simplicidad de realizar solicitudes con Axios en Node.js. response.data
contiene los datos reales de la API, mientras que error.message
maneja cualquier error que pueda ocurrir, ofreciendo un enfoque simplificado para el manejo de solicitudes.
¿Es Axios del lado del servidor o del lado del cliente?
Axios es un cliente HTTP versátil que funciona en ambientes de servidor y cliente. Así es como encaja en cada uno:
- Del lado del servidor (Node.js): En Node.js, Axios puede realizar solicitudes HTTP desde el servidor backend. Esta función se utiliza comúnmente para la comunicación de servidor a servidor, la recuperación de datos de API de terceros y el raspado de sitios web.
- Del lado del cliente (navegador): En las aplicaciones de frontend, Axios maneja las solicitudes HTTP, como la recuperación y publicación de datos hacia/desde API.
Al usar Axios, obtienes una API unificada para manejar las solicitudes HTTP tanto del cliente como del servidor, lo que hace que el código sea más reutilizable y reduce la necesidad de aprender diferentes métodos de solicitud para el frontend y el backend.
¿Es Axios un módulo de Node?
Sí, Axios es un módulo de Node. Es una biblioteca independiente, lo que significa que puedes instalarla fácilmente a través de npm o yarn en cualquier proyecto de Node.js. No está incluido con Node.js de forma predeterminada, pero puede integrarse en cualquier proyecto instalándolo como una dependencia.
Para instalar Axios, puedes usar el siguiente comando en tu terminal:
bash
npm install axios
Después de la instalación, puedes importar Axios en la parte superior de tu script con:
javascript
const axios = require('axios');
Este módulo es ligero, rápido y está diseñado para manejar solicitudes HTTP sin agregar mucha complejidad a tu proyecto.
¿Cómo instalar Axios en Terminal?
Para instalar Axios en tu entorno Node.js, abre tu terminal y navega al directorio raíz de tu proyecto. Ejecuta el siguiente comando:
bash
npm install axios
O si prefieres Yarn, puedes usar:
bash
yarn add axios
Una vez instalado, puedes usarlo inmediatamente en tu proyecto requiriéndolo o importándolo, como se muestra en la sección anterior. Esta instalación agregará Axios como una dependencia a tu proyecto, permitiéndote usar sus métodos para manejar las solicitudes HTTP de manera eficiente.
Cómo usar Axios en el raspado web
Para usar Axios de manera efectiva en el raspado web, sigue estos pasos para una guía completa, desde configurar Axios hasta manejar desafíos y analizar los datos. A continuación, se muestra un desglose de cómo usar Axios en el raspado web:
1. Configurar Axios para el raspado web
Primero, asegúrate de tener Node.js y Axios instalados en tu proyecto. Puedes instalar Axios ejecutando:
bash
npm install axios
Con Axios instalado, está listo para usarse para realizar solicitudes HTTP a sitios web.
2. Uso básico para obtener el contenido de la página web
Cuando se realiza el raspado web, el objetivo principal es obtener el contenido HTML de una página web. A continuación, se muestra cómo puedes realizar una simple solicitud GET a un sitio web utilizando Axios:
javascript
const axios = require('axios');
async function fetchHTML(url) {
try {
const response = await axios.get(url);
return response.data; // Contenido HTML de la página
} catch (error) {
console.error(`Error fetching HTML: ${error.message}`);
}
}
fetchHTML('https://example.com').then(html => console.log(html));
En este código, fetchHTML
envía una solicitud GET a la URL proporcionada y devuelve el contenido HTML. Esta es la base para raspar datos de sitios web estáticos.
3. Analizar el contenido HTML
Para extraer información específica del HTML, usa una biblioteca de análisis como Cheerio. Cheerio te permite consultar HTML usando sintaxis similar a jQuery, lo que facilita la orientación de los elementos. Instálalo ejecutando:
bash
npm install cheerio
A continuación, se muestra cómo podrías usar Cheerio junto con Axios para raspar datos de una página web:
javascript
const axios = require('axios');
const cheerio = require('cheerio');
async function scrapeWebsite(url) {
try {
const { data } = await axios.get(url);
const $ = cheerio.load(data);
// Ejemplo: Extraer todos los títulos de los artículos
const titles = [];
$('h2.article-title').each((i, element) => {
titles.push($(element).text());
});
console.log('Scraped Titles:', titles);
} catch (error) {
console.error(`Error scraping website: ${error.message}`);
}
}
scrapeWebsite('https://example.com/articles');
En este ejemplo, Axios recupera el HTML y Cheerio lo analiza para extraer los títulos de los artículos (h2.article-title
en este caso). Puedes ajustar los selectores para orientar diferentes elementos en la página.
4. Manejar encabezados y agentes de usuario
Algunos sitios web bloquean las solicitudes de clientes que no son del navegador. Para imitar un navegador real, incluye encabezados como User-Agent
en tu solicitud Axios. A continuación, se muestra cómo configurar los encabezados:
javascript
const axios = require('axios');
async function fetchWithHeaders(url) {
try {
const response = await axios.get(url, {
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36'
}
});
return response.data;
} catch (error) {
console.error(`Error with headers: ${error.message}`);
}
}
fetchWithHeaders('https://example.com').then(html => console.log(html));
Agregar encabezados puede ayudar a evitar que el sitio bloquee tu solicitud. El encabezado User-Agent
hace que tu solicitud parezca provenir de un navegador real.
5. Tratar con páginas renderizadas por JavaScript
Axios es ideal para sitios estáticos, pero no puede ejecutar JavaScript. Si estás raspando sitios con mucho JavaScript, usa Puppeteer o Playwright para renderizar la página completamente. Para soluciones solo con Axios, concéntrate en el contenido estático o busca fuentes de datos alternativas como API.
6. Manejo de errores y limitación de frecuencia
El manejo de errores es esencial en el raspado web para administrar problemas como límites de frecuencia o solicitudes bloqueadas. A continuación, se muestra un ejemplo con un mecanismo básico de reintento:
javascript
const axios = require('axios');
async function fetchWithRetries(url, retries = 3) {
for (let i = 0; i < retries; i++) {
try {
const response = await axios.get(url);
return response.data;
} catch (error) {
console.error(`Attempt ${i + 1} failed: ${error.message}`);
if (i === retries - 1) throw error;
}
}
}
fetchWithRetries('https://example.com').then(html => console.log(html));
7. Almacenar o procesar los datos
Una vez que tengas los datos, guárdalos en un archivo o base de datos para su posterior análisis. Por ejemplo, puedes usar fs
para guardar datos en un archivo JSON:
javascript
const fs = require('fs');
const axios = require('axios');
const cheerio = require('cheerio');
async function scrapeAndSave(url) {
try {
const { data } = await axios.get(url);
const $ = cheerio.load(data);
const results = [];
// Raspar datos específicos
$('h2.article-title').each((i, element) => {
results.push($(element).text());
});
fs.writeFileSync('data.json', JSON.stringify(results, null, 2));
console.log('Data saved to data.json');
} catch (error) {
console.error(`Error saving data: ${error.message}`);
}
}
scrapeAndSave('https://example.com/articles');
En este ejemplo, los datos raspados se guardan en data.json
, que puedes cargar más tarde para su análisis.
8. Manejar desafíos comunes
- Detección de bots: Agregar encabezados y manejar cookies puede hacer que las solicitudes parezcan más legítimas.
- Limitación de frecuencia: Usa retrasos entre las solicitudes o implementa un mecanismo de reintento para evitar saturar el servidor.
- IPs bloqueadas: Rota las IPs o usa servicios proxy para evitar ser bloqueado cuando se raspen sitios con medidas agresivas contra el raspado.
Conclusión
En esta guía, hemos cubierto lo esencial del uso de Axios en Node.js para el raspado web. Aprendiste sobre el papel de Axios como un módulo de Node.js, cómo instalarlo y configurarlo, y exploraste técnicas prácticas como agregar encabezados, usar Cheerio para analizar HTML y manejar desafíos comunes del raspado web como la detección de bots y la gestión de errores.
Para los desarrolladores que trabajan con integraciones de API, raspado web o recopilación de datos, Axios ofrece un enfoque potente, flexible y eficiente para realizar solicitudes HTTP y manejar las respuestas. Si bien es ideal para contenido estático, combinar Axios con herramientas como Puppeteer o Playwright puede ayudar a superar las limitaciones con contenido dinámico.
Con estas estrategias, estás equipado para usar Axios de manera efectiva, convirtiéndolo en una adición versátil al conjunto de herramientas de cualquier desarrollador. Experimenta con diferentes configuraciones para optimizar tus llamadas a la API y proyectos de raspado web para obtener confiabilidad y eficiencia.
En Scrapeless, solo accedemos a datos disponibles públicamente y cumplimos estrictamente con las leyes, regulaciones y políticas de privacidad del sitio web aplicables. El contenido de este blog es sólo para fines de demostración y no implica ninguna actividad ilegal o infractora. No ofrecemos garantías y renunciamos a toda responsabilidad por el uso de la información de este blog o enlaces de terceros. Antes de realizar cualquier actividad de scraping, consulte a su asesor legal y revise los términos de servicio del sitio web de destino u obtenga los permisos necesarios.