Komme i gang med nettskraping i JavaScript

Nettskraping er en av de mest interessante tingene i kodeverdenen.

Hva er nettskraping?

Hvorfor finnes det i det hele tatt?

La oss finne ut svarene.

Hva er nettskraping?

Nettskraping er en automatisert oppgave for å trekke ut data fra nettsteder.

Det er mange bruksområder for nettskraping. Trekke ut prisene på produkter og sammenligne dem med forskjellige e-handelsplattformer. Få et daglig tilbud fra nettet. Bygg din egen søkemotor som Google, Yahoo, etc.. Listen fortsetter.

Du kan gjøre mer enn du tror med nettskraping. Når du får vite hvordan du trekker ut dataene fra nettsteder, kan du gjøre hva du vil med dataene.

Programmet som trekker ut dataene fra nettsteder kalles en nettskraper. Du skal lære å skrive nettskrapere i JavaScript.

Det er hovedsakelig to deler til nettskraping.

  • Hente dataene ved hjelp av forespørselsbiblioteker og en hodeløs nettleser.
  • Parsing av dataene for å trekke ut den nøyaktige informasjonen vi ønsker fra dataene.

La oss uten videre komme i gang.

Prosjektoppsett

Jeg antar at du har Node installert, hvis ikke sjekk ut NodeJS-installasjonsveiledningen.

Vi skal bruke pakkene node-fetch og cheerio for web-skraping i JavaScript. La oss sette opp prosjektet med npm for å jobbe med en tredjepartspakke.

La oss raskt se trinnene for å fullføre oppsettet vårt.

  • Lag en katalog kalt web_scraping og naviger til den.
  • Kjør kommandoen npm init for å initialisere prosjektet.
  • Svar på alle spørsmålene basert på dine preferanser.
  • Installer nå pakkene ved å bruke kommandoen
npm install node-fetch cheerio

La oss se glimt av de installerte pakkene.

  11 beste Magento-hosting for nettbutikken din

node-henting

Pakken node-fetch bringer window.fetch til node js-miljøet. Det hjelper å lage HTTP-forespørslene og få rådataene.

cheerio

Pakken cheerio brukes til å analysere og trekke ut informasjonen som er nødvendig fra rådataene.

To pakker node-fetch og cheerio er gode nok for nettskraping i JavaScript. Vi kommer ikke til å se alle metodene som pakkene tilbyr. Vi vil se flyten av nettskraping og de mest nyttige metodene i den flyten.

Du vil lære nettskraping ved å gjøre det. Så la oss komme til arbeidet.

Scraping Cricket World Cup List

Her i denne delen skal vi gjøre faktisk nettskraping.

Hva henter vi ut?

Med tittelen på delen tror jeg du lett kan gjette det. Ja, hva du enn tenker er riktig. La oss trekke ut alle cricket-verdenscupvinnere og andrevinnere til nå.

  • Lag en fil kalt extract_cricket_world_cups_list.js i prosjektet.
  • Vi vil bruke Wikipedia Cricket World Cup side for å få ønsket informasjon.
  • Først får du rådataene ved å bruke node-fetch-pakken.
  • Koden nedenfor henter rådataene fra Wikipedia-siden ovenfor.
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 fikk rådataene fra URL-en. Nå er det på tide å trekke ut informasjonen vi trenger fra rådataene. La oss bruke pakken cheerio til å trekke ut dataene.

  7 Amazon prissporere å kjøpe til rett tid

Å trekke ut data som involverer HTML-tagger med cheerio er en cakewalk. Før vi går inn på de faktiske dataene, la oss se noen eksempeldataparsing ved hjelp av cheerio.

  • Parse HTML-dataene ved å bruke metoden cheerio.load.
const parsedSampleData = cheerio.load(
      `<div id="container"><p id="title">I'm title</p></div>`
   );
  • Vi har analysert HTML-koden ovenfor. Hvordan trekke ut p-tag-innholdet fra det? Det er det samme som velgerne i JavaScript DOM-manipulasjon.

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

Du kan velge taggene som du vil. Du kan sjekke ut forskjellige metoder fra cheerio offisielle nettsted.

  • Nå er det på tide å trekke ut verdenscuplisten. For å trekke ut informasjonen, må vi kjenne HTML-taggene som informasjonen ligger på siden. Gå til cricket verdenscup Wikipedia-side og inspiser siden for å få informasjon om HTML-tagger.

Her er den komplette koden.

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 skrapte dataene.

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

Kult 😎, er det ikke sant?

  Gjør iPhone "sikkerhets"-apper faktisk noe?

Skrapemal

Å hente rådata fra URL-en er vanlig i alle nettskrapingsprosjekter. Den eneste delen som endres er å trekke ut dataene i henhold til kravet. Du kan prøve koden nedenfor som en mal.

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

Konklusjon

Du har lært hvordan du skraper en nettside. Nå er det din tur til å øve på koding.

Jeg vil også foreslå å sjekke ut populære nettskrapingsrammer for å utforske og skybaserte nettskrapingløsninger.

Lykke til med koding 🙂

Likte du å lese artikkelen? Hva med å dele med verden?