---
title: "Cómo usar servidores proxy en Node.js"
slug: nodejs-proxy-servers
date: 2024-02-08T07:23:21+00:00
modified: 2025-09-16T16:41:07+00:00
permalink: https://brightdata.es/blog/procedimientos/nodejs-proxy-servers
type: blog
---

[ Blog ](https://brightdata.es/blog "Blog") / [Procedimientos](https://brightdata.es/blog/procedimientos)







 [Procedimientos](https://brightdata.es/blog/procedimientos)

# Cómo usar servidores proxy en Node.js

 13 min de lectura





 [ ![White number one with a flame on top.](https://media.brightdata.es/2023/03/Favicon-2-1-50x50.png) ](https://brightdata.com/blog/authors/jakkie-koekemoer)

 [Jakkie Koekemoer

 ](https://brightdata.com/blog/authors/jakkie-koekemoer)





 ![](https://media.brightdata.es/2024/02/How-to-Use-Proxy-Servers-in-Node.js.svg)





La extracción de datos web («web scraping»), una técnica de recopilación de datos, suele verse obstaculizada por varios obstáculos, como la prohibición de la propiedad intelectual, el bloqueo geográfico y los problemas de privacidad. Por suerte, los servidores proxy pueden ayudarte a superar estos escollos. Sirven como intermediarios entre tu ordenador e Internet y gestionan las solicitudes con sus propias direcciones IP. Esta funcionalidad no solo ayuda a eludir las restricciones y prohibiciones relacionadas con la IP, sino que además facilita el acceso a contenido restringido geográficamente. Además, los servidores proxy son fundamentales para mantener el anonimato durante la extracción de datos web y proteger tu privacidad.

Utilizar servidores proxy también puede mejorar el rendimiento y la fiabilidad de las tareas de extracción de datos web. Al distribuir las solicitudes entre varios servidores, se aseguran de que ningún servidor soporte una carga excesiva, lo que optimiza el proceso.

En este tutorial, aprenderás a usar un servidor proxy en Node.js para tus proyectos de extracción de datos web.

## Requisitos previos

Antes de empezar este tutorial, es recomendable que tengas ciertos conocimientos de JavaScript y Node.js. Si aún no tienes instalado [Node.js](https://nodejs.org/en/) en tu ordenador, debes [instalarlo ahora](https://nodejs.org/).

También necesitas un editor de texto apto. Dispones de varias opciones, como Sublime Text. Este tutorial utiliza Visual Studio Code (VS Code). Es fácil de usar y está repleto de funciones que facilitan la codificación.

Para empezar, crea un nuevo directorio llamado `web-scraping-proxy` y, a continuación, inicializa tu proyecto Node.js. Abre tu terminal o intérprete de comandos («shell») y navega hasta tu nuevo directorio con los siguientes comandos:

```none
cd web-scraping-proxy
npm init -y

```

A continuación, debes instalar varios paquetes de Node.js para gestionar las solicitudes HTTP y analizar el HTML.

Asegúrate de estar en el directorio de tu proyecto y, a continuación, ejecuta lo siguiente:

```none
npm install axios playwright puppeteer http-proxy-agent
npx playwright install

```

Axios se usa para realizar solicitudes HTTP a fin de recuperar contenido web. Playwright y Puppeteer automatizan las interacciones del navegador, lo cual es esencial para la extracción de datos de sitios web dinámicos. Playwright es compatible con varios navegadores, mientras que Puppeteer se centra en Chrome o Chromium. Se utilizará la biblioteca `http-proxy-agent` para crear un agente proxy para las solicitudes HTTP.

El `npx playwright install` es necesario para instalar los controladores necesarios que utilizará la biblioteca `playwright`.

Una vez que hayas completado estos pasos, ya podrás sumergirte en el mundo de la extracción de datos web con Node.js.

## Configurar un proxy local para la extracción de datos web

Un primer paso esencial en la extracción de datos web es establecer un servidor proxy y, con este tutorial, utilizarás la herramienta de código abierto mitmproxy.

Para empezar, ve a la página de descargas de [mitmproxy](https://mitmproxy.org/downloads/#10.1.6/) y descarga la versión 10.1.6 adaptada a tu sistema operativo. Si necesitas ayuda durante la instalación, la guía de instalación de mitmproxy es un recurso práctico.

Tras instalar mitmproxy, ejecútalo introduciendo el siguiente comando en tu terminal:

```none
mitmproxy

```

Este comando abre una ventana en tu terminal que sirve de interfaz para mitmproxy:

![](https://media.brightdata.com/2024/02/6IbNqSi-1024x609.png)Para asegurarte de que el proxy está configurado correctamente, prueba a ejecutar una prueba. Abre una nueva ventana de terminal y ejecuta el siguiente comando:

```none
curl --proxy http://localhost:8080 "http://wttr.in/Paris?0"

```

Este comando obtiene el parte meteorológico de París. El resultado debería ser el siguiente:

```none
Weather report: Paris

                Overcast
       .--.     -2(-6) °C
    .-(    ).   ↙ 11 km/h
   (___.__)__)  10 km
                0.0 mm

```

Al volver a la ventana de mitmproxy, observarás que ha capturado la petición, lo que indica que tu proxy local funciona correctamente:

![](https://media.brightdata.com/2024/02/id5dc1K-1024x317.png)## Implementa un proxy en Node.js para la extracción de datos web

Ahora es el momento de pasar a las cuestiones prácticas de la extracción de datos web con Node.js. En esta sección, escribirás un script que extrae datos de un sitio web enviando solicitudes a través del servidor proxy local.

## Extrae datos de un sitio web con el método Fetch

Crea un nuevo archivo llamado `fetchScraping.js` en el directorio raíz de tu proyecto. Este archivo contendrá el código para extraer contenido de un sitio web, que en este caso es <https://toscrape.com/>.

En tu `fetchScraping.js`, introduce el siguiente código JavaScript. Este script usa el método `Fetch` para enviar solicitudes a través de tu servidor proxy:

```none
const fetch = require("node-fetch");
const HttpProxyAgent = require("http-proxy-agent");

async function fetchData(url) {
  try {
    const proxyAgent = new HttpProxyAgent.HttpProxyAgent(
      "http://localhost:8080"
    );
    const response = await fetch(url, { agent: proxyAgent });
    const data = await response.text();
    console.log(data); // Outputs the fetched data
  } catch (error) {
    console.error("Error fetching data:", error);
  }
}

fetchData("http://toscrape.com/");

```

Este fragmento de código define una función asincrónica `fetchData` que toma una URL y envía una solicitud a esa URL mediante `Fetch` mientras la enruta a través del proxy local. A continuación, imprime los datos de respuesta.

Para ejecutar tu script de extracción de datos web, abre tu terminal o intérprete de comandos («shell») y navega hasta el directorio raíz de tu proyecto, donde se encuentra el archivo `fetchScraping.js`. Ejecuta el script con este comando:

```none
node fetchScraping.js

```

Deberías ver el siguiente resultado en el terminal:

```none
…output omitted…
            <div class="row">
                <div class="col-md-1"></div>
                <div class="col-md-10">
                    <h2>Books</h2>
                    <p>A <a href="http://books.toscrape.com">fictional bookstore</a> that desperately wants to be scraped. It's a safe place for beginners learning web scraping and for developers validating their scraping technologies as well. Available at: <a href="http://books.toscrape.com">books.toscrape.com</a></p>
                    <div class="col-md-6">
                        <a href="http://books.toscrape.com"><img src="./img/books.png" class="img-thumbnail"></a>
                    </div>
                    <div class="col-md-6">
                        <table class="table table-hover">
                            <tr><th colspan="2">Details</th></tr>
                            <tr><td>Amount of items </td><td>1000</td></tr>
                            <tr><td>Pagination </td><td>&#10004;</td></tr>
                            <tr><td>Items per page </td><td>max 20</td></tr>
                            <tr><td>Requires JavaScript </td><td>&#10008;</td></tr>
                        </table>
                    </div>
                </div>
            </div>
…output omitted…

```

Este resultado es el contenido HTML de la página web `http://toscrape.com`. La visualización correcta de estos datos indica que tu script de extracción de datos web, enrutado a través del proxy local, funciona correctamente.

Ahora, vuelve a la ventana de `mitmproxy` y verás que la solicitud se ha registrado, lo que significa que tu solicitud pasó por tu proxy local:

![](https://media.brightdata.com/2024/02/xvgqkOB-1024x548.png)## Extrae datos de un sitio web con Playwright

En comparación con `Fetch`, Playwright es una herramienta avanzada que permite tener interacciones más dinámicas con las páginas web. Para usarlo, debes crear un nuevo archivo llamado `playwrightScraping.js` en tu proyecto. En este archivo, introduce el siguiente código JavaScript:

```none
const { chromium } = require("playwright");

(async () => {
  const browser = await chromium.launch({
    proxy: {
      server: "http://localhost:8080",
    },
  });
  const page = await browser.newPage();
  await page.goto("http://toscrape.com/");

  // Extract and log the entire HTML content
  const content = await page.content();
  console.log(content);

  await browser.close();
})();

```

Este código usa Playwright para lanzar una instancia del navegador Chromium configurada para usar tu servidor proxy local. A continuación, abre una nueva página en el navegador, navega hasta `http://toscrape.com` y espera a que se cargue la página. Tras extraer los datos necesarios, el navegador se cerrará.

Para ejecutar este script, asegúrate de estar en el directorio que contiene `playwrightScraping.js`. Abre tu terminal o intérprete de comandos («shell») y ejecuta el script de la siguiente manera:

```none
node playwrightScraping.js

```

Cuando ejecutes el script, Playwright iniciará un navegador Chromium, navegará hasta la URL especificada y ejecutará cualquier otro comando de extracción de datos web que hayas añadido. Este proceso utiliza el servidor proxy local, lo que te ayuda a evitar exponer tu dirección IP y a eludir posibles restricciones.

El resultado esperado será similar al anterior:

```none
…output omitted…
            <div class="row">
                <div class="col-md-1"></div>
                <div class="col-md-10">
                    <h2>Books</h2>
                    <p>A <a href="http://books.toscrape.com">fictional bookstore</a> that desperately wants to be scraped. It's a safe place for beginners learning web scraping and for developers validating their scraping technologies as well. Available at: <a href="http://books.toscrape.com">books.toscrape.com</a></p>
                    <div class="col-md-6">
                        <a href="http://books.toscrape.com"><img src="./img/books.png" class="img-thumbnail"></a>
                    </div>
                    <div class="col-md-6">
                        <table class="table table-hover">
                            <tr><th colspan="2">Details</th></tr>
                            <tr><td>Amount of items </td><td>1000</td></tr>
                            <tr><td>Pagination </td><td>&#10004;</td></tr>
                            <tr><td>Items per page </td><td>max 20</td></tr>
                            <tr><td>Requires JavaScript </td><td>&#10008;</td></tr>
                        </table>
                    </div>
                </div>
            </div>
…output omitted…

```

Como antes, verás que tu petición se registra en la ventana de `mitmproxy`.

## Extrae datos de un sitio web con Puppeteer

A continuación, extrae datos un sitio web con Puppeteer. Puppeteer es una potente herramienta que proporciona un alto nivel de control sobre un navegador Chrome o Chromium sin memoria. Este método es especialmente práctico para extraer datos de sitios web dinámicos que requieren renderizar en JavaScript.

Para empezar, crea un nuevo archivo en tu proyecto llamado `puppeteerScraping.js`. Este archivo contendrá el código Puppeteer para extraer datos de un sitio web utilizando el servidor proxy para las solicitudes.

Abre el archivo `puppeteerScraping.js` que acabas de crear e inserta el siguiente código JavaScript:

```none
    const puppeteer = require('puppeteer');

    (async () => {
        const browser = await puppeteer.launch({
            args: ['--proxy-server=http://localhost:8080']
        });
        const page = await browser.newPage();
        await page.goto('http://toscrape.com/');
        const content = await page.content();
        console.log(content); // Outputs the page HTML
        await browser.close();
    })();

```

En este código, inicializas Puppeteer para lanzar un navegador sin interfaz y especificas que debe usar tu servidor proxy local. El navegador abre una página nueva, navega hasta `http://toscrape.com`y, a continuación, recupera el contenido HTML de la página. Una vez que el contenido se haya registrado en la consola, se cierra la sesión del navegador.

Para ejecutar el script, navega hasta la carpeta que contiene `puppeteerScraping.js` en tu terminal o intérprete de comandos («shell»). Ejecuta el script con el siguiente comando:

```none
node puppeteerScraping.js

```

Tras ejecutar el script, Puppeteer abre la URL `http://toscrape.com/` a través del servidor proxy. Verás el contenido HTML de la página impresa en tu terminal. Esto indica que tu script de Puppeteer extrae datos correctamente la página web a través del proxy local.

Se espera obtener un resultado similar al de los anteriores y verás tu solicitud registrada en la ventana `mitmproxy`:

```none
…output omitted…
            <div class="row">
                <div class="col-md-1"></div>
                <div class="col-md-10">
                    <h2>Books</h2>
                    <p>A <a href="http://books.toscrape.com">fictional bookstore</a> that desperately wants to be scraped. It's a safe place for beginners learning web scraping and for developers validating their scraping technologies as well. Available at: <a href="http://books.toscrape.com">books.toscrape.com</a></p>
                    <div class="col-md-6">
                        <a href="http://books.toscrape.com"><img src="./img/books.png" class="img-thumbnail"></a>
                    </div>
                    <div class="col-md-6">
                        <table class="table table-hover">
                            <tr><th colspan="2">Details</th></tr>
                            <tr><td>Amount of items </td><td>1000</td></tr>
                            <tr><td>Pagination </td><td>&#10004;</td></tr>
                            <tr><td>Items per page </td><td>max 20</td></tr>
                            <tr><td>Requires JavaScript </td><td>&#10008;</td></tr>
                        </table>
                    </div>
                </div>
            </div>
…output omitted…

```

## Una mejor alternativa: el servidor proxy de Bright Data

Si quieres mejorar tus capacidades de extracción de datos web, prueba a usar Bright Data. El [servidor proxy](https://brightdata.es/proxy-types/proxy-servers) de Bright Data ofrece una solución avanzada para administrar tus solicitudes web.

Bright Data ofrece varios servidores proxy, como proxies residenciales, de ISP, de centros de datos y móviles, que te permiten acceder a cualquier sitio web desde diferentes ubicaciones geográficas. Asimismo, te permite emular diferentes agentes de usuario y mantener el anonimato.

Bright Data también ofrece la rotación de proxies, lo que mejora la eficiencia y el anonimato de tus actividades de extracción de datos web al cambiar automáticamente entre diferentes proxies para evitar que bloqueen tu IP.

Además, puedes usar el navegador Scraping de Bright Data, que es un navegador automático con funciones de desbloqueo integradas de elementos como CAPTCHA, cookies y huellas dactilares del navegador. También puedes aprovechar el Web Unlocker de Bright Data, que incluye algoritmos de aprendizaje automático para evitar bloqueos en los sitios web de destino y te permite recopilar datos sin que te bloqueen.

## Implementa Bright Data Proxy en un proyecto de Node.js

Para integrar un proxy de Bright Data en tu proyecto Node.js, debes registrarte para obtener una prueba gratuita. Cuando tu cuenta esté activa, inicia sesión, navega hasta **Proxies &amp; Scraping** **Infrastructure** y añade un nuevo proxy seleccionando **Residential Proxies**:

![](https://media.brightdata.com/2024/02/25ECeNq-1024x574.png)Conserva la configuración predeterminada y finaliza la creación de tu proxy residencial:

![](https://media.brightdata.com/2024/02/v73LFh1-1024x552.png)Una vez creado, toma nota de las credenciales del proxy, incluidos el host, el puerto, el nombre de usuario y la contraseña. Las necesitarás en el siguiente paso:

![](https://media.brightdata.com/2024/02/moqqnrg-1024x557.png)En tu proyecto, crea un archivo `scrapingWithBrightData.js` y añade el siguiente snippet, asegurándate de reemplazar el texto del marcador de posición por tus credenciales de proxy de Bright Data:

```none
    const axios = require('axios');

    async function fetchDataWithBrightData(url) {
        const proxyOptions = {
            proxy: {
                host: 'YOUR_BRIGHTDATA_PROXY_HOST',
                port: YOUR_BRIGHTDATA_PROXY_PORT,
                auth: {
                    username: 'YOUR_BRIGHTDATA_USERNAME',
                    password: 'YOUR_BRIGHTDATA_PASSWORD'
                }
            }
        };
        try {
            const response = await axios.get(url, proxyOptions);
            console.log(response.data); // Outputs the fetched data
        } catch (error) {
            console.error('Error:', error);
        }
    }

    fetchDataWithBrightData('http://lumtest.com/myip.json');

```

Este script configura `axios` para enrutar las solicitudes HTTP a través de tu proxy de Bright Data. Obtiene datos de una URL especificada mediante esta configuración de proxy. En este ejemplo, te diriges a `http://lumtest.com/myip.json` para ver las diferentes fuentes de servidores proxy según tu configuración de Bright Data.

Para ejecutar el script, navega hasta la carpeta que contiene `scrapingWithBrightData.js` en tu terminal o intérprete de comandos («shell»). A continuación, ejecuta el script con el siguiente comando:

```none
node scrapingWithBrightData.js

```

Una vez que ejecutes el comando, obtendrás la ubicación de tu dirección IP en la consola, que está relacionada principalmente con el servidor proxy de Bright Data.

El resultado previsto es similar al siguiente:

```none
{
  ip: '108.53.191.230',
  country: 'US',
  asn: { asnum: 701, org_name: 'UUNET' },
  geo: {
    city: 'Jersey City',
    region: 'NJ',
    region_name: 'New Jersey',
    postal_code: '07302',
    latitude: 40.7182,
    longitude: -74.0476,
    tz: 'America/New_York',
    lum_city: 'jerseycity',
    lum_region: 'nj'
  }
}

```

A continuación, si vuelves a ejecutar el script con Node.js `scrapingWithBrightData.js`, observarás que el servidor proxy de Bright Data utiliza una ubicación de dirección IP diferente. Esto confirma que Bright Data utiliza diferentes ubicaciones e IP cada vez que ejecutas tu script de extracción de datos web, lo que te permite eludir cualquier bloqueo o prohibición de IP de los sitios web objetivo.

El resultado será algo así:

```none
{
  ip: '93.85.111.202',
  country: 'BY',
  asn: {
    asnum: 6697,
    org_name: 'Republican Unitary Telecommunication Enterprise Beltelecom'
  },
  geo: {
    city: 'Orsha',
    region: 'VI',
    region_name: 'Vitebsk',
    postal_code: '211030',
    latitude: 54.5081,
    longitude: 30.4172,
    tz: 'Europe/Minsk',
    lum_city: 'orsha',
    lum_region: 'vi'
  }
}

```

La interfaz y la configuración sencillas de Bright Data facilitan el uso eficaz de sus potentes funciones de gestión de proxy, incluso para principiantes.

## Conclusión

En este artículo, has aprendido a usar proxies con Node.js. Sin soluciones de gestión de proxy adecuadas como Bright Data, es posible que te topes con problemas como prohibiciones de IP y acceso limitado a los sitios web de destino, lo que puede obstaculizar las tareas de extracción de datos web. También has aprendido lo fácil que es usar los proxies [de Bright Data](https://brightdata.es/proxy-types) para mejorar las tareas de extracción de datos web. Estos servidores no solo aportan solidez y eficacia a tu proceso de recopilación de datos, sino que también brindan la versatilidad requerida para diversos casos de extracción de datos.

Al poner en práctica estas habilidades, recuerda la importancia de operar dentro de los límites de las condiciones del sitio web y las leyes de privacidad de datos. Es fundamental extraer datos de manera responsable, respetando las reglas establecidas por los sitios web. Con los conocimientos que has adquirido, en particular las capacidades que ofrecen los proxies de Bright Data, ya estás listo para realizar una extracción de datos web ética y con éxito. ¡Feliz extracción de datos web!

Todo el código de este tutorial está disponible en este [repositorio de GitHub](https://github.com/See4Devs/web-scraping-nodejs-proxy).



Contactar ventasPrueba gratuita![google social icon](/wp-content/themes/brightdata/assets/images/ic_google.svg)









 Tabla de Contenidos













 [ ](https://news.ycombinator.com/submitlink?t=C%C3%B3mo+usar+servidores+proxy+en+Node.js&u=https://brightdata.es/blog/procedimientos/nodejs-proxy-servers) [ ](https://www.linkedin.com/shareArticle?mini=true&title=C%C3%B3mo+usar+servidores+proxy+en+Node.js&url=https://brightdata.es/blog/procedimientos/nodejs-proxy-servers) [ ](http://www.reddit.com/submit?title=C%C3%B3mo+usar+servidores+proxy+en+Node.js&url=https://brightdata.es/blog/procedimientos/nodejs-proxy-servers)







##  Usted también puede estar interesado en

 [ ![How to Set a Proxy in Node-Fetch blog image](https://media.brightdata.es/2023/10/How-to-Set-a-Proxy-in-Node-Fetch-1.svg) ](https://brightdata.es/blog/101-proxy/proxy-in-node-fetch "Cómo usar proxies con node-fetch")

 [Proxy 101



 ![White number one with a flame on top.](https://media.brightdata.es/2023/03/Favicon-2-1-50x50.png)

Ryan Peden





### Cómo usar proxies con node-fetch

Aprenda a configurar un proxy en Node-Fetch siguiendo esta guía paso a paso.



 18-Oct-2023

 10 min de lectura

 ](https://brightdata.es/blog/101-proxy/proxy-in-node-fetch)

 [ ![Web Scraping With JavaScript and Node.js Guide blog image](https://media.brightdata.es/2022/12/Web-Scraping-With-JavaScript-and-Node.js-Guide.svg) ](https://brightdata.es/blog/procedimientos/web-scraping-with-node-js "Raspado web con JavaScript y Node.JS")

 [Procedimientos



 ![Antonello Zanini](https://media.brightdata.es/2022/12/Antonello-Zanini-2-50x50.jpg)

Antonello Zanini

Technical Writer





### Raspado web con JavaScript y Node.JS

Vamos explicar por qué JavaScript de frontend no es la mejor opción para el raspado web y te enseñaremos a crear un raspador de Node.js desde cero.



 28-Dec-2022

 20 min de lectura

 ](https://brightdata.es/blog/procedimientos/web-scraping-with-node-js)
