Introducción al Web Scraping con Node.js (JavaScript)

Raspando, Jan-08-20225 minutos de lectura

¿Busca formas de aprovechar las nuevas tecnologías? La extracción web o web scraping le ofrece una forma de recopilar datos web estructurados de forma automatizada. Por ejemplo, el web scraping se utiliza en el mundo del comercio electrónico para controlar los precios de los servicios y productos de la competencia. Otros casos de uso del web scraping

Índice

¿Busca formas de aprovechar las nuevas tecnologías? La extracción web o web scraping le ofrece una forma de recopilar datos web estructurados de forma automatizada. Por ejemplo, el web scraping se utiliza en el mundo del comercio electrónico para controlar los precios de los servicios y productos de la competencia. A continuación se exponen otros casos de uso del web scraping.

  • Búsqueda de tendencias en las redes sociales
  • Recopilación de datos de otro sitio web para utilizarlos en el suyo propio
  • Extracción de direcciones de correo electrónico de sitios web que publican correos electrónicos públicos
  • Búsqueda de imágenes de productos y datos de ventas en tiendas en línea

Aprenderás cómo hacer web scraping con Node.js. Pero primero, veremos qué es Node.js. Es una plataforma del lado del servidor de código abierto para desarrollar aplicaciones del lado del servidor y de red. Su librería es muy rápida en la ejecución de código porque sus aplicaciones no almacenan ningún dato en el buffer. Simplemente emiten los datos en trozos. A continuación se presentan algunas de las áreas en las que podemos utilizar Node.js.

  • Aplicaciones de flujo de datos
  • Aplicaciones de una sola página
  • Aplicaciones con límite de entrada/salida
  • Aplicaciones en tiempo real con uso intensivo de datos

¿Por qué usar Node.js para Web Scraping?

A continuación se presentan las razones para utilizar Node.js para web scraping.

Fácil de aprender - Javascript es un lenguaje de programación popular utilizado por los desarrolladores frontend. Pueden aprender rápidamente y utilizar Node.js en el backend ya que es un Javascript simple. Por lo tanto, no tienen que poner un esfuerzo extra en el aprendizaje de Node.js.

Lenguaje de programación único - Puede utilizar Node.js para escribir aplicaciones del lado del servidor en Javascript. En resumen, los desarrolladores de Node.js utilizan Javascript para escribir aplicaciones web tanto frontend como backend. No necesitan utilizar ningún otro lenguaje de programación del lado del servidor. Así, pueden desplegar fácilmente aplicaciones web porque casi todos los navegadores web soportan Javascript. 

Escalabilidad - Los desarrolladores de Node.js pueden escalar fácilmente las aplicaciones en sentido horizontal y vertical. Pueden añadir nodos adicionales a los sistemas existentes para escalar las aplicaciones horizontalmente. Pueden escalar verticalmente las aplicaciones añadiendo recursos adicionales a los nodos individuales. 

Alto rendimiento - Node.js utiliza el motor V8 Javascript de Google para interpretar el código Javascript ya que lo compila directamente en el código máquina. Por lo tanto, puede implementar eficazmente el código utilizando este motor. 

Almacenamiento en caché: los desarrolladores también pueden almacenar en caché módulos individuales utilizando el entorno de ejecución de código abierto de Node.js. El almacenamiento en caché permite que las aplicaciones carguen las páginas web más rápido, por lo que los desarrolladores no tienen que reutilizar los códigos.   

Web Scraping con Node.js

Para el web scraping usando Node.js, usaremos los siguientes dos módulos npm .

cheerio - Es una tecnología Javascript utilizada para extraer datos de sitios web. Ayuda a seleccionar, editar y ver elementos DOM.

request-promise - Es un cliente HTTP simple que puede utilizar para realizar llamadas HTTP rápidas y sencillas.

Configuración del proyecto

Tienes que crear una nueva carpeta de proyecto. Crear un archivo index.js dentro de esa carpeta. Luego tienes que instalar las dependencias. Para ello, abra su línea de comandos y escriba el siguiente comando. 

npm install --save request request-promise cheerio

Tienes que requerir el request-promise y cheerio en tu archivo index.js usando el siguiente código.

const rp = require('solicitud-promesa');
constcheerio = require('cheerio');

Establecer solicitud

Ya sabes que request-promise es una 'petición' de cliente con soporte Promise. En otras palabras, acepta un objeto como entrada y devuelve una promesa. 

const options = {
 uri: `https://www.yourURLhere.com`,
 transform: function (body) {
   return cheerio.load(body);
 }
};

En el código anterior, el objeto options tiene que hacer dos cosas.

  • Pasando la dirección URL, que desea raspar
  • Carga el HTML devuelto usando cheerio para que puedas usarlo.

La clave uri en el código es el sitio web que desea raspar.

La clave de transformación carga el cuerpo devuelto en cheerio usando request-promise antes de devolvérnoslo.

Solicitar

Puede hacer su solicitud utilizando el código que figura a continuación.

rp(OPTIONS)
   .then(function (data) {
       // REQUEST SUCCEEDED: DO SOMETHING
   })
   .catch(function (err) {
       // REQUEST FAILED: ERROR OF SOME KIND
   });

En el código anterior pasamos el objeto options a request-promise. A continuación, esperamos a ver si nuestra solicitud tiene éxito o falla. 

Ahora, creamos nuestra propia versión del código en la que utilizamos funciones de flecha como se muestra a continuación.

rp(options)
 .then(($) => {
   console.log($);
 })
 .catch((err) => {
   console.log(err);
 });

Tienes que sustituir la uri del marcador de posición por el sitio web que quieres raspar. A continuación, puede abrir la consola y escriba lo siguiente en el archivo index.js.

{ [Function: initialize]
 fn:
  initialize {
    constructor: [Circular],
    _originalRoot:
     { type: 'root',
       name: 'root',
       namespace: 'http://www.w3.org/1999/xhtml',
       attribs: {},
       ...

Así es como puedes hacer tu primer scrape usando Node.js. Aquí está el código completo que hicimos hasta ahora.

const rp = require('request-promise');
const cheerio = require('cheerio');
const options = {
  uri: `https://www.google.com`,
  transform: function (body) {
    return cheerio.load(body);
  }
};

rp(options)
  .then(($) => {
    console.log($);
  })
  .catch((err) => {
    console.log(err);
  });

Utilizar los datos

Puedes usar cheerio para extraer los datos que quieras. La implementación del selector de cheerio es casi la misma que la de jQuery. Puede usar el método selector para recorrer y seleccionar elementos en el documento. También puede usarlo para obtener y establecer datos. Por ejemplo, usted quiere raspar el siguiente HTML de un sitio web.

 id="ciudades">
 class="large">Europa
 id="medium">Turquía
 class="small">Salem

Podemos usar '# ' para seleccionar id's, '.' para seleccionar clases. Los elementos se pueden seleccionar por sus nombres de etiqueta como se muestra a continuación.

$('.grande').text()
// Europa
$('#medium').text()
// Turquía
$('li[class=small]').html()

Podemos utilizar la función each() para iterar a través de múltiples elementos. Podemos devolver el texto interior del elemento de la lista utilizando el mismo código HTML que se muestra arriba.

$('li').each(function(i, elem) {
 cities[i] = $(this).text();
});

Así es como puedes scrapear datos de sitios web utilizando Node.js. También puedes utilizar métodos adicionales para extraer los datos de los elementos hijos de una lista o el HTML de un sitio web.

La importancia de utilizar Node.js con proxies

Ya sabes que los proxies actúan como intermediarios entre los clientes que solicitan recursos y el servidor que los proporciona. Existen tres tipos diferentes de proxies, como se muestra a continuación.

Proxy residencial - Este proxy contiene direcciones IP del proveedor de servicios de Internet (ISP) local, por lo que el sitio web de destino no puede determinar si se trata de una persona real o del scraper que navega por el sitio web. 

Datacenter Proxy - Este tipo de proxy es de un proveedor de servicios en la nube y es utilizado por un gran número de personas porque es más barato que los proxies residenciales.

Proxy móvil - Los proxies móviles son IPs de dispositivos móviles privados y funcionan igual que los proxies residenciales. Los proporcionan los operadores de redes móviles y son muy caros. 

Puedes utilizar un proxy para el web scraping utilizando el módulo requests de Python. Primero, tienes que importar el módulo requests. Luego, tienes que crear un grupo de proxies e iterarlos. Puedes utilizar requests.get() para enviar la petición GET pasando un proxy como parámetro a la URL, como se muestra a continuación.

import requests
proxy = 'http://114.121.248.251:8080'
url = 'https://ipecho.net/plain'
# Sending a GET request to the url and
# passing the proxy as a parameter.
page = requests.get(url,
                   proxies={"http": proxy, "https": proxy})
 # Printing the content of the requested url.
print(page.text)

Obtendrá el siguiente resultado.

Conclusión sobre Web Scraping usando Node.js

Hasta ahora, hemos discutido que se puede extraer datos estructurados de sitios web utilizando el método automatizado llamado web scraping. Usted puede raspar los sitios web utilizando diferentes lenguajes, pero en este artículo, hemos aprendido a utilizar Node.js para recopilar datos de sitios web. Todo lo que tenemos que hacer es añadir código en el archivo index.js de la carpeta del proyecto. Después de configurar el proyecto, podemos configurar y hacer la solicitud para extraer los datos. Además, podemos utilizar los datos para diversos fines. Usted sabe que no es seguro para raspar sitios web. Por lo tanto, usted tiene que utilizar proxies para recopilar datos de su sitio web deseado. Puede utilizar proxies residenciales o de centro de datos, pero es preferible utilizar los proxies residenciales, ya que son rápidos y no pueden ser detectados fácilmente.