Kom godt i gang med Web Scraping i JavaScript

Webskrabning er en af ​​de mest interessante ting i kodningsverdenen.

Hvad er webskrabning?

Hvorfor eksisterer det overhovedet?

Lad os finde ud af svarene.

Hvad er Web Scraping?

Webskrabning er en automatiseret opgave til at udtrække data fra websteder.

Der er mange anvendelser af web-skrabning. Udtrække priserne på produkter og sammenligne dem med forskellige e-handelsplatforme. Få et dagligt tilbud fra nettet. Opbygning af din egen søgemaskine som Google, Yahoo osv.. Listen fortsætter.

Du kan gøre mere, end du tror med web-skrabning. Når du får at vide, hvordan du udtrækker data fra hjemmesider, så kan du gøre, hvad du vil med dataene.

Programmet, som udtrækker data fra websteder, kaldes en webskraber. Du skal lære at skrive webskrabere i JavaScript.

Der er hovedsageligt to dele til webskrabning.

  • Hentning af data ved hjælp af anmodningsbiblioteker og en hovedløs browser.
  • Parsing af dataene for at udtrække den nøjagtige information, som vi ønsker fra dataene.

Lad os uden videre komme i gang.

Projektopsætning

Jeg antager, at du har Node installeret, hvis ikke, tjek NodeJS installationsvejledningen.

Vi kommer til at bruge pakkerne node-fetch og cheerio til web-scraping i JavaScript. Lad os sætte projektet op med npm til at arbejde med en tredjepartspakke.

Lad os hurtigt se trinene for at fuldføre vores opsætning.

  • Opret en mappe kaldet web_scraping og naviger til den.
  • Kør kommandoen npm init for at initialisere projektet.
  • Besvar alle spørgsmålene baseret på dine præferencer.
  • Installer nu pakkerne ved hjælp af kommandoen
npm install node-fetch cheerio

Lad os se glimt af de installerede pakker.

  Optælling af netværkstjenester ved hjælp af GoScan

node-hentning

Pakken node-fetch bringer window.fetch til node js-miljøet. Det hjælper med at lave HTTP-anmodningerne og få de rå data.

cheerio

Pakken cheerio bruges til at parse og udtrække den information, der er nødvendig, fra rådataene.

To pakker node-fetch og cheerio er gode nok til web-skrabning i JavaScript. Vi kommer ikke til at se alle metoder, som pakkerne tilbyder. Vi vil se strømmen af ​​webskrabning og de mest nyttige metoder i det flow.

Du vil lære web-skrabning ved at gøre det. Så lad os komme til arbejdet.

Scraping Cricket World Cup List

Her i dette afsnit skal vi lave en egentlig web-skrabning.

Hvad udvinder vi?

Med titlen på afsnittet tror jeg, du nemt ville gætte det. Ja, uanset hvad du tænker er korrekt. Lad os trække alle cricket verdensmesterskabsvindere og andenpladser indtil nu.

  • Opret en fil kaldet extract_cricket_world_cups_list.js i projektet.
  • Vi vil bruge Wikipedia Cricket World Cup side for at få den ønskede information.
  • Først skal du hente de rå data ved hjælp af node-fetch-pakken.
  • Nedenstående kode får rådata fra ovenstående Wikipedia-side.
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();

Vi fik de rå data fra URL’en. Nu er det tid til at udtrække den information, vi har brug for, fra de rå data. Lad os bruge pakken cheerio til at udtrække dataene.

  Sådan tjekker du, om din Chromecast stadig bliver opdateret

At udtrække data, der involverer HTML-tags med cheerio, er en cakewalk. Før vi går ind i de faktiske data, lad os se nogle eksempler på dataparsing ved hjælp af cheerio.

  • Parse HTML-data ved hjælp af metoden cheerio.load.
const parsedSampleData = cheerio.load(
      `<div id="container"><p id="title">I'm title</p></div>`
   );
  • Vi har analyseret ovenstående HTML-kode. Hvordan udtrækkes p-tag-indholdet fra det? Det er det samme som vælgerne i JavaScript DOM-manipulation.

console.log(parsedSampleData(“#title”).text());

Du kan vælge tags, som du vil. Du kan tjekke forskellige metoder fra cheerio officielle hjemmeside.

  • Nu er det tid til at udtrække verdensmesterskabslisten. For at udtrække informationen skal vi kende HTML-tags, som informationen ligger på siden. Gå til cricket verdensmesterskaber Wikipedia-side og inspicer siden for at få oplysninger om HTML-tags.

Her er den komplette kode.

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();

Og her er de skrabet data.

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

Fedt 😎, er det ikke?

  Optimer indhold og kopier med AI-drevne værktøjer

Skrabning skabelon

At få de rå data fra URL’en er almindeligt i alle web-skrabeprojekter. Den eneste del, der ændres, er at udtrække dataene i henhold til kravet. Du kan prøve nedenstående kode som skabelon.

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();

Konklusion

Du har lært, hvordan man skraber en webside. Nu er det din tur til at øve dig i kodning.

Jeg vil også foreslå, at du tjekker populære web-scraping-rammer for at udforske og cloud-baserede web-scraping-løsninger.

God kodning 🙂

Nydt at læse artiklen? Hvad med at dele med verden?