Geekflare cuenta con el apoyo de nuestra audiencia. Podemos ganar comisiones de afiliados comprando enlaces en este sitio.
Comparte en:

Introducción a Web Scraping en JavaScript

web scraping
Escáner de seguridad de aplicaciones web Invicti – la única solución que ofrece verificación automática de vulnerabilidades con Proof-Based Scanning™.

El web scraping es una de las cosas más interesantes en el mundo de la codificación.

¿Qué es el web scraping?

¿Por qué existe?

Averigüemos las respuestas.

What is Web Scraping?

El web scraping es una tarea automatizada para extraer datos de sitios web.

Hay muchas aplicaciones de web scraping. Extraer los precios de los productos y compararlos con diferentes Plataformas de comercio electrónico. Obtener una cotización diaria de la web. Construyendo su propio motor de búsqueda como Google, Yahoo, etc., la lista continúa.

Puede hacer más de lo que piensa con el web scraping. Una vez que sepa cómo extraer los datos de los sitios web, puede hacer lo que quiera con los datos.

El programa que extrae los datos de los sitios web se denomina raspador web. Aprenderá a escribir web scrapers en JavaScript.

El raspado web consta principalmente de dos partes.

  • Obtener los datos mediante bibliotecas de solicitudes y un navegador sin cabeza.
  • Analizar los datos para extraer la información exacta que queremos de los datos.

Sin más preámbulos, comencemos.

Project Setup

Supongo que tiene Node instalado, si no, consulte el Guía de instalación de NodeJS.

Vamos a utilizar los paquetes node-fetch y cheerio para web scraping en JavaScript. Configuremos el proyecto con npm para que funcione con un paquete de terceros.

Veamos rápidamente los pasos para completar nuestra configuración.

  • Crea un directorio llamado web_scraping y navega hasta él.
  • Ejecuta el comando npm init para inicializar el proyecto.
  • Responda todas las preguntas según su preferencia.
  • Ahora, instale los paquetes usando el comando
npm install node-fetch cheerio

Veamos los destellos de los paquetes instalados.

búsqueda de nodo

El paquete node-fetch trae el window.fetch al entorno de node js. Ayuda a realizar las solicitudes HTTP y obtener los datos sin procesar.

¡hasta la vista

El paquete ¡hasta la vista se utiliza para analizar y extraer la información necesaria de los datos sin procesar.

Dos paquetes node-fetch y cheerio son lo suficientemente buenos para web scraping en JavaScript. No veremos todos los métodos que proporcionan los paquetes. Veremos el flujo de web scraping y los métodos más útiles en ese flujo.

Aprenderá a raspar web haciéndolo. Entonces, vayamos al trabajo.

Scraping Cricket World Cup List

Aquí, en esta sección, haremos un raspado web real.

¿Qué estamos extrayendo?

Por el título de la sección, creo que lo adivinarías fácilmente. Sí, lo que sea que estés pensando es correcto. Extraigamos a todos los ganadores y subcampeones de la copa mundial de cricket hasta ahora.

  • Crea un archivo llamado extract_cricket_world_cups_list.js en el proyecto.
  • Usaremos el Wikipedia Copa del mundo de críquet página para obtener la información deseada.
  • Primero, obtenga los datos sin procesar usando el node-fetch paquete.
  • El siguiente código obtiene los datos sin procesar de la página de Wikipedia anterior.
const fetch = require("node-fetch");

// function to get the raw data
const getRawData = (URL) => {
   return fetch(URL)
      .then((response) => response.text())
      .then((data) => {
         return data;
      });
};

// URL for data
const URL = "https://en.wikipedia.org/wiki/Cricket_World_Cup";

// start of the program
const getCricketWorldCupsList = async () => {
   const cricketWorldCupRawData = await getRawData(URL);
   console.log(cricketWorldCupRawData);
};

// invoking the main function
getCricketWorldCupsList();

Obtuvimos los datos sin procesar de la URL. Ahora es el momento de extraer la información que necesitamos de los datos sin procesar. Usemos el paquete cheerio para extraer los datos.

Extraer datos que involucran etiquetas HTML con cheerio es pan comido. Antes de entrar en los datos reales, veamos algunos ejemplos de análisis de datos usando cheerio.

  • Analizar los datos HTML usando cheerio.load el método.
const parsedSampleData = cheerio.load(
      `<div id="container"><p id="title">I'm title</p></div>`
   );
  • Hemos analizado el código HTML anterior. Cómo extraer el p etiquetar contenido de él? Es lo mismo que los selectores en la manipulación DOM de JavaScript.

console.log(parsedSampleData("#title").text());

Puede seleccionar las etiquetas que desee. Puede consultar diferentes métodos de la sitio web oficial de cheerio.

  • Ahora es el momento de extraer la lista de la copa del mundo. Para extraer la información, necesitamos conocer las etiquetas HTML que la información se encuentra en la página. Ve a la página de Wikipedia de la copa mundial de cricket e inspeccione la página para obtener información sobre las etiquetas HTML.

Aquí está el código completo.

const fetch = require("node-fetch");
const cheerio = require("cheerio");

// function to get the raw data
const getRawData = (URL) => {
   return fetch(URL)
      .then((response) => response.text())
      .then((data) => {
         return data;
      });
};

// URL for data
const URL = "https://en.wikipedia.org/wiki/Cricket_World_Cup";

// start of the program
const getCricketWorldCupsList = async () => {
   const cricketWorldCupRawData = await getRawData(URL);

   // parsing the data
   const parsedCricketWorldCupData = cheerio.load(cricketWorldCupRawData);

   // extracting the table data
   const worldCupsDataTable = parsedCricketWorldCupData("table.wikitable")[0]
      .children[1].children;

   console.log("Year --- Winner --- Runner");
   worldCupsDataTable.forEach((row) => {
      // extracting `td` tags
      if (row.name === "tr") {
         let year = null,
            winner = null,
            runner = null;

         const columns = row.children.filter((column) => column.name === "td");

         // extracting year
         const yearColumn = columns[0];
         if (yearColumn) {
            year = yearColumn.children[0];
            if (year) {
               year = year.children[0].data;
            }
         }

         // extracting winner
         const winnerColumn = columns[3];
         if (winnerColumn) {
            winner = winnerColumn.children[1];
            if (winner) {
               winner = winner.children[0].data;
            }
         }

         // extracting runner
         const runnerColumn = columns[5];
         if (runnerColumn) {
            runner = runnerColumn.children[1];
            if (runner) {
               runner = runner.children[0].data;
            }
         }

         if (year && winner && runner) {
            console.log(`${year} --- ${winner} --- ${runner}`);
         }
      }
   });
};

// invoking the main function
getCricketWorldCupsList();

Y aquí están los datos extraídos.

Year --- Winner --- Runner
1975 --- West Indies --- Australia
1979 --- West Indies --- England
1983 --- India --- West Indies
1987 --- Australia --- England
1992 --- Pakistan --- England
1996 --- Sri Lanka --- Australia
1999 --- Australia --- Pakistan
2003 --- Australia --- India
2007 --- Australia --- Sri Lanka
2011 --- India --- Sri Lanka
2015 --- Australia --- New Zealand
2019 --- England --- New Zealand

Genial 😎, ¿está en eso?

Scraping Template

Obtener los datos sin procesar de la URL es común en todos los proyectos de raspado web. La única parte que cambia es la extracción de datos según el requisito. Puede probar el siguiente código como plantilla.

const fetch = require("node-fetch");
const cheerio = require("cheerio");
const fs = require("fs");
// function to get the raw data
const getRawData = (URL) => {
   return fetch(URL)
      .then((response) => response.text())
      .then((data) => {
         return data;
      });
};
// URL for data
const URL = "https://example.com/";
// start of the program
const scrapeData = async () => {
   const rawData = await getRawData(URL);
   // parsing the data
   const parsedData = cheerio.load(rawData);
   console.log(parsedData);
   // write code to extract the data
   // here
   // ...
   // ...
};
// invoking the main function
scrapeData();

Conclusión

Ha aprendido a raspar una página web. Ahora es tu turno de practicar la codificación.

También te sugiero que revises los populares marcos de web scraping para explorar y soluciones de raspado web basadas en la nube.

Codificación feliz 🙂

Gracias a nuestros patrocinadores
Más lecturas interesantes sobre el desarrollo
Impulse su negocio
Algunas de las herramientas y servicios para ayudar a que su negocio crezca.
  • Invicti utiliza Proof-Based Scanning™ para verificar automáticamente las vulnerabilidades identificadas y generar resultados procesables en cuestión de horas.
    Prueba Invicti
  • Web scraping, proxy residencial, administrador de proxy, desbloqueador web, rastreador de motores de búsqueda y todo lo que necesita para recopilar datos web.
    Prueba Brightdata
  • Semrush es una solución de marketing digital todo en uno con más de 50 herramientas en SEO, redes sociales y marketing de contenido.
    Prueba Semrush
  • Intruder es un escáner de vulnerabilidades en línea que encuentra debilidades de ciberseguridad en su infraestructura, para evitar costosas filtraciones de datos.
    Intente Intruder