🥳Únase a la Comunidad Scrapeless y Solicite su prueba gratuita para acceder a nuestro potente kit de herramientas de Web Scraping.
Volver al blog

Cómo realizar solicitudes HTTP en Node.js con la API Node-Fetch?

Sophia Martinez
Sophia Martinez

Specialist in Anti-Bot Strategies

20-Jan-2025

Nuestros sitios web actuales suelen depender de docenas de recursos diferentes, como una colección monolítica de imágenes, CSS, fuentes, JavaScript, datos JSON, etc. Sin embargo, el primer sitio web del mundo estaba escrito solo en HTML.

JavaScript, como un excelente lenguaje de scripting del lado del cliente, ha jugado un papel importante en la evolución de los sitios web. Con la ayuda de los objetos XMLHttpRequest o XHR, JavaScript puede lograr la comunicación entre clientes y servidores sin recargar la página.

Sin embargo, este proceso dinámico se ve desafiado por la API Fetch. ¿Qué es la API Fetch? ¿Cómo usar la API Fetch en Node.js? ¿Por qué la API Fetch es una mejor opción?

¡Empieza a obtener respuestas de este artículo ahora!

¿Qué son las solicitudes HTTP en Node.js?

En Node.js, las solicitudes HTTP son una parte fundamental de la creación de aplicaciones web o la interacción con servicios web. Permiten que un cliente (como un navegador u otra aplicación) envíe datos a un servidor o solicite datos de un servidor. Estas solicitudes utilizan el Protocolo de Transferencia de Hipertexto (HTTP), que es la base de la comunicación de datos en la web.

  1. Solicitud HTTP: Una solicitud HTTP es enviada por un cliente a un servidor, normalmente para recuperar datos (como una página web o una respuesta de API) o para enviar datos al servidor (como enviar un formulario).
  2. Métodos HTTP: Las solicitudes HTTP suelen incluir un método, que indica qué acción quiere que el servidor realice el cliente. Los métodos HTTP comunes incluyen:
  • GET: Solicitar datos del servidor.
  • POST: Enviar datos al servidor (por ejemplo, enviar un formulario).
  • PUT: Actualizar datos existentes en el servidor.
  • DELETE: Eliminar datos del servidor.
  1. Módulo HTTP de Node.js: Node.js proporciona un módulo http integrado para manejar las solicitudes HTTP. Este módulo permite crear un servidor HTTP, escuchar solicitudes y responder a ellas.

¿Por qué Node.js es ideal para el scraping web y la automatización?

Node.js se ha convertido en una de las tecnologías preferidas para tareas de scraping web y automatización debido a sus características únicas, su robusto ecosistema y su arquitectura asincrónica y no bloqueante.

¿Por qué Node.js es ideal para el scraping web y la automatización? ¡Vamos a averiguarlo!

  1. E/S asincrónica y no bloqueante
  2. Velocidad y eficiencia
  3. Rico ecosistema de bibliotecas y frameworks
  4. Manejo de contenido dinámico con navegadores sin cabeza
  5. Compatibilidad multiplataforma
  6. Procesamiento de datos en tiempo real
  7. Sintaxis simple para un desarrollo rápido
  8. Soporte para rotación de proxy y antidetección

¿Qué es la API Node-Fetch?

Node-fetch es un módulo ligero que lleva la API Fetch al entorno Node.js. Simplifica el proceso de realizar solicitudes HTTP y manejar respuestas.

La API Fetch está construida alrededor de Promises y es adecuada para operaciones asincrónicas como extraer datos de un sitio web, interactuar con una API RESTful o automatizar tareas.

¿Cómo usar la API Fetch en Node.JS?

La API Fetch es una interfaz moderna basada en promesas diseñada para manejar solicitudes de red de una manera más eficiente y flexible en comparación con el objeto XMLHttpRequest tradicional.

Es compatible de forma nativa en los navegadores contemporáneos, lo que significa que no hay necesidad de bibliotecas o plugins adicionales. En esta guía, exploraremos cómo utilizar la API Fetch para realizar solicitudes GET y POST, así como cómo gestionar las respuestas y los errores de forma eficaz.

💬 Nota: Si Node.js no está instalado en su ordenador, necesita instalarlo primero. Puede descargar el paquete de instalación de Node.js adecuado para su sistema operativo aquí. La versión recomendada de Node.js es la 18 y superior.

Paso 1. Inicializa tu proyecto Node.js

Si aún no has creado un proyecto, puedes crear uno nuevo con el siguiente comando:

Bash Copy
mkdir fetch-api-tutorial
cd fetch-api-tutorial
npm init -y

Abre el archivo package.json, añade el campo type y establécelo en module:

JSON Copy
{
  "name": "fetch-api-tutorial",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "type": "module",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

Paso 2. Descarga e instala la biblioteca node-fetch

Esta es una biblioteca para usar la API Fetch en Node.js. Puedes instalar la biblioteca node-fetch con el siguiente comando:

Bash Copy
npm install node-fetch

Una vez completada la descarga, podemos empezar a usar la API Fetch para enviar solicitudes de red. Crea un nuevo archivo index.js en el directorio raíz del proyecto y añade el siguiente código:

JavaScript Copy
import fetch from 'node-fetch';

fetch('https://jsonplaceholder.typicode.com/posts')
  .then((response) => response.json())
  .then((data) => console.log(data))
  .catch((error) => console.error(error));

Ejecuta el siguiente comando para ejecutar el código:

Bash Copy
node index.js

Veremos la siguiente salida:

output

Paso 3. Usa la API Fetch para enviar una solicitud POST

¿Cómo usar la API Fetch para enviar la solicitud POST? Consulta el siguiente método. Crea un nuevo archivo post.js en el directorio raíz del proyecto y añade el siguiente código:

JavaScript Copy
import fetch from 'node-fetch';

const postData = {
  title: 'foo',
  body: 'bar',
  userId: 1,
};

fetch('https://jsonplaceholder.typicode.com/posts', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify(postData),
})
  .then((response) => response.json())
  .then((data) => console.log(data))
  .catch((error) => console.error(error));

Analicemos este código:

  • Primero definimos un objeto llamado postData, que contiene los datos que queremos enviar.
  • Luego usamos la función fetch para enviar una solicitud POST a https://jsonplaceholder.typicode.com/posts, pasando un objeto de configuración como segundo parámetro.
  • El objeto de configuración contiene el method de la solicitud, los headers de la solicitud y el body de la solicitud.

Ejecuta el siguiente comando para ejecutar el código:

Bash Copy
node post.js

La salida que puedes ver:

output

Paso 4. Manejo de los resultados y errores de la respuesta de la API Fetch

Necesitamos crear un nuevo archivo response.js en el directorio raíz del proyecto y agregar el siguiente código:

JavaScript Copy
import fetch from 'node-fetch';

fetch('https://jsonplaceholder.typicode.com/posts-response')
  .then((response) => {
    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`);
    }
    return response.json();
  })
  .then((data) => console.log(data))
  .catch((error) => console.error(error));

En el código anterior, primero rellenamos una dirección URL incorrecta para activar un error HTTP. Luego verificamos el código de estado de la respuesta resultante en el método then y lanzamos un error si el código de estado no es 200. Finalmente, capturamos el error en el método catch y lo imprimimos.

Ejecuta el siguiente comando para ejecutar el código:

Bash Copy
node response.js

Después de ejecutar el código, verás la siguiente salida:

salida

3 desafíos comunes en el Web Scraping

1. CAPTCHAs

Los CAPTCHAs (Completely Automated Public Turing tests to tell Computers and Humans Apart) están diseñados para evitar que los sistemas automatizados, como los web scrapers, accedan a los sitios web. Normalmente requieren que los usuarios demuestren que son humanos resolviendo rompecabezas, identificando objetos en imágenes o introduciendo caracteres distorsionados.

2. Contenido dinámico

Muchos sitios web modernos utilizan frameworks de JavaScript como React, Angular o Vue.js para cargar contenido dinámicamente. Esto significa que el contenido que ves en el navegador a menudo se renderiza después de que se carga la página, lo que dificulta el scraping con métodos tradicionales que se basan en HTML estático.

3. Bloqueos de IP

Los sitios web a menudo implementan medidas para detectar y bloquear las actividades de scraping, uno de los métodos más comunes es el bloqueo de IP. Esto ocurre cuando se envían demasiadas solicitudes desde la misma dirección IP en un corto período, lo que hace que el sitio web marque y bloquee esa IP.

Kit de herramientas de scraping Scrapeless - Herramienta de scraping eficiente

Scrapeless es una de las mejores herramientas de scraping integrales debido a su capacidad para evitar bloqueos de sitios web en tiempo real, incluyendo bloqueos de IP, desafíos de CAPTCHA y renderizado de JavaScript. Admite funciones avanzadas como rotación de IP, gestión de huellas dactilares TLS y resolución de CAPTCHA, lo que lo hace ideal para el scraping web a gran escala.

¿Cómo mejora Scrapeless los proyectos de scraping web de Node.js?

Su fácil integración con Node.js y su alta tasa de éxito para evitar la detección hacen de Scrapeless una opción fiable y eficiente para evitar las defensas modernas contra bots, asegurando operaciones de scraping fluidas e ininterrumpidas.

Ventajas de usar un kit de herramientas de scraping como Scrapeless en lugar del scraping manual

  1. Manejo eficiente de los bloqueos de sitios web: Scrapeless puede evitar las defensas comunes contra el scraping, como bloqueos de IP, CAPTCHAs y renderizado de JavaScript en tiempo real, que el scraping manual no puede manejar de manera eficiente.
  2. Fiabilidad y tasa de éxito: Scrapeless utiliza funciones avanzadas como rotación de IP y gestión de huellas dactilares TLS para evitar la detección, asegurando una mayor tasa de éxito y un scraping ininterrumpido en comparación con el scraping manual.
  3. Fácil integración y automatización: Se integra perfectamente con Node.js y automatiza todo el flujo de trabajo de scraping, lo que ahorra tiempo y reduce el error humano en comparación con la recopilación manual de datos.

Solo sigue algunos pasos sencillos, puedes integrar Scrapeless en tu proyecto Node.js.

¡Es hora de seguir desplazándote! ¡Lo siguiente será más maravilloso!

Integración del kit de herramientas de scraping Scrapeless en tu proyecto Node.js

Antes de empezar, necesitas registrar una cuenta Scrapeless. También puedes consultar el sitio web oficial para obtener más información sobre Scrapeless.

Paso 1. Accede a la API de scraping Scrapeless en Node.js

Necesitamos ir al Panel de control de Scrapeless, hacer clic en el menú "API de scraping" a la izquierda y luego seleccionar un servicio que quieras usar.

Aquí podemos usar el servicio "Amazon"

Amazon api

Al entrar en la página de la API de Amazon, podemos ver que Scrapeless nos ha proporcionado parámetros predeterminados y ejemplos de código en tres idiomas:

  • Python
  • Go
  • Node.js

Aquí elegimos Node.js y copiamos el ejemplo de código a nuestro proyecto:

Node.js

Los ejemplos de código Node.js de Scrapeless utilizan el módulo http de forma predeterminada. Podemos usar el módulo node-fetch para reemplazar el módulo http, para que podamos usar la API Fetch para enviar solicitudes de red.

Primero, crea un archivo scraping-api-amazon.js en nuestro proyecto, y luego reemplaza los ejemplos de código proporcionados por Scrapeless con los siguientes ejemplos de código:

JavaScript Copy
import fetch from 'node-fetch';

class Payload {
  constructor(actor, input) {
    this.actor = actor;
    this.input = input;
  }
}

async function sendRequest() {
  const host = 'api.scrapeless.com';
  const url = `https://${host}/api/v1/scraper/request`;
  const token = ''; // Tu token de API

  const inputData = {
    action: 'product',
    url: 'https://www.amazon.com/dp/B0BQXHK363',
  };

  const payload = new Payload('scraper.amazon', inputData);

  try {
    const response = await fetch(url, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'x-api-token': token,
      },
      body: JSON.stringify(payload),
    });

    if (!response.ok) {
      throw new Error(`HTTP Error: ${response.status}`);
    }

    const body = await response.text();
    console.log('body', body);
  } catch (error) {
    console.error('Error:', error);
  }
}

sendRequest();

Ejecuta el código ejecutando el siguiente comando:

Bash Copy
node scraping-api-amazon.js 

Veremos los resultados devueltos por la API de Scrapeless. Aquí simplemente los imprimimos. Puedes procesar los resultados devueltos según tus necesidades.

returned results

Paso 2. Aprovechamiento del desbloqueador web para evitar medidas comunes contra el scraping

Scrapeless proporciona un servicio de desbloqueador web que puede ayudarte a evitar medidas comunes contra el scraping, como la omisión de CAPTCHA, el bloqueo de IP, etc. El servicio de desbloqueador web puede ayudarte a resolver algunos problemas comunes de rastreo y hacer que tus tareas de rastreo sean más fluidas.

Para verificar la efectividad del servicio de desbloqueador web, primero podemos usar el comando curl para acceder a un sitio web que requiere un CAPTCHA, y luego usar el servicio de desbloqueador web de Scrapeless para acceder al mismo sitio web para ver si el CAPTCHA se puede omitir correctamente.

  1. Usa el comando curl para acceder a un sitio web que requiere un código de verificación, como https://identity.getpostman.com/login:
Bash Copy
curl https://identity.getpostman.com/login

Al observar los resultados devueltos, podemos ver que este sitio web está conectado al mecanismo de verificación de Cloudflare, y necesitamos ingresar el código de verificación para continuar accediendo al sitio web.

Cloudflare verification mechanism
  1. Usamos el servicio de desbloqueador web de Scrapeless para acceder al mismo sitio web:
Click the Web unlocker
  • Copia el ejemplo de código Node.js a nuestro proyecto

Aquí creamos un nuevo archivo web-unlocker.js. Todavía necesitamos usar el módulo node-fetch para enviar solicitudes de red, por lo que necesitamos reemplazar el módulo http en el ejemplo de código proporcionado por Scrapeless con el módulo node-fetch:

JavaScript Copy
import fetch from 'node-fetch';

class Payload {
  constructor(actor, input, proxy) {
    this.actor = actor;
    this.input = input;
    this.proxy = proxy;
  }
}

async function sendRequest() {
  const host = 'api.scrapeless.com';
  const url = `https://${host}/api/v1/unlocker/request`;
  const token = ''; // Tu token de API

  const inputData = {
    url: 'https://identity.getpostman.com/login',
    method: 'GET',
    redirect: false,
  };

  const proxy = {
    country: 'ANY',
  };

  const payload = new Payload('unlocker.webunlocker', inputData, proxy);

  try {
    const response = await fetch(url, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'x-api-token': token,
      },
      body: JSON.stringify(payload),
    });

    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`);
    }

    const body = await response.text();
    console.log('body', body);
  } catch (error) {
    console.error('Error:', error);
  }
}

sendRequest();

Ejecuta el siguiente comando para ejecutar el script:

JavaScript Copy
web-unlocker.js
run the script
Scrapeless Web unlocker successfully bypassed CAPTCHA

¡Mira! El desbloqueador web de Scrapeless omitió correctamente el código de verificación, y podemos ver que los resultados devueltos contienen el contenido de la página web que necesitamos.

Preguntas frecuentes

P1. Node-Fetch vs Axios: ¿cuál es mejor para el scraping web?

Para facilitar tu elección, Axios y la API Fetch tienen las siguientes diferencias:

  1. La API Fetch utiliza la propiedad body de la solicitud, mientras que Axios utiliza la propiedad data.
  2. Con Axios, puedes enviar datos JSON directamente, mientras que la API Fetch necesita convertirse en una cadena.
  3. Axios puede procesar JSON directamente. La API Fetch requiere llamar primero al método response.json() para obtener una respuesta en formato JSON.
  4. Para Axios, el nombre de la variable de datos de respuesta debe ser data; para la API Fetch, el nombre de la variable de datos de respuesta puede ser cualquiera.
  5. Axios permite una fácil monitorización y actualización del progreso utilizando eventos de progreso. No hay un método directo en la API Fetch.
  6. La API Fetch no admite interceptores, mientras que Axios sí.
  7. La API Fetch permite respuestas en streaming, mientras que Axios no.

P2. ¿Es node fetch estable?

La característica más notable de Node. js v21 es la estabilización de la API Fetch.

P3. ¿Es la API Fetch mejor que AJAX?

Para proyectos nuevos, se recomienda usar la API Fetch debido a sus características modernas y su simplicidad. Sin embargo, si necesitas admitir navegadores muy antiguos o estás manteniendo código heredado, Ajax podría ser necesario.

Conclusiones

La adición de la API Fetch en Node.js es una característica largamente esperada. El uso de la API Fetch en Node.js puede asegurar que tu trabajo de scraping se realice fácilmente. Sin embargo, es inevitable encontrar serios bloqueos de red cuando se usa la API Node Fetch.

¿Quieres solucionar completamente las prohibiciones de IP y CAPTCHA? Asegúrate de usar Scrapeless para evitar fácilmente la monitorización del sitio web y el bloqueo de IP.

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.

Artículos más populares

Catalogar