Kezdő lépések a webes kaparással JavaScriptben

A webkaparás az egyik legérdekesebb dolog a kódolási világban.

Mi az a webkaparás?

Miért létezik egyáltalán?

Nézzük meg a válaszokat.

Mi az a webkaparás?

A webkaparás egy automatizált feladat, amellyel adatokat nyerhetünk ki a webhelyekről.

A webkaparásnak számos alkalmazása létezik. A termékek árának kinyerése és összehasonlítása különböző e-kereskedelmi platformokkal. Napi ajánlat beszerzése az internetről. Saját keresőmotor, például Google, Yahoo stb. építése, a lista folytatódik.

A webkaparással többet tehet, mint gondolná. Miután megtanulta, hogyan lehet adatokat kinyerni a webhelyekről, bármit megtehet az adatokkal.

A webhelyekről adatokat kinyerő programot webkaparónak nevezik. Meg fog tanulni webkaparókat írni JavaScriptben.

A hálókaparásnak alapvetően két része van.

  • Az adatok lekérése kéréskönyvtárak és fej nélküli böngésző segítségével.
  • Az adatok elemzése a kívánt pontos információ kinyeréséhez az adatokból.

Minden további nélkül kezdjük.

Projekt beállítása

Feltételezem, hogy a Node telepítve van, ha nem, nézze meg a NodeJS telepítési útmutatóját.

A node-fetch és a cheerio csomagokat fogjuk használni a webkaparáshoz JavaScriptben. Állítsuk be a projektet az npm-mel, hogy működjön egy harmadik féltől származó csomaggal.

Lássuk gyorsan a telepítés befejezésének lépéseit.

  • Hozzon létre egy web_scraping nevű könyvtárat, és navigáljon hozzá.
  • Futtassa az npm init parancsot a projekt inicializálásához.
  • Válaszoljon minden kérdésre preferenciája alapján.
  • Most telepítse a csomagokat a paranccsal
npm install node-fetch cheerio

Lássuk a telepített csomagok pillantását.

node-fetch

A node-fetch csomag a window.fetch fájlt a node js környezetbe hozza. Segít a HTTP-kérésekben és a nyers adatok beszerzésében.

  A 13 legjobb hosting platform az Egyesült Királyság és az európai piac számára

viszlátot mond

A csomag viszlátot mond a nyers adatokból szükséges információk elemzésére és kinyerésére szolgál.

Két csomag, a node-fetch és a cheerio elég jó a webes kaparáshoz JavaScriptben. Nem fogunk látni minden módszert, amelyet a csomagok biztosítanak. Látni fogjuk a webkaparás folyamatát és a folyamat leghasznosabb módszereit.

Megtanulod a webkaparást azáltal. Szóval, térjünk a munkára.

Kaparás krikett világbajnokság lista

Ebben a részben tényleges webkaparást fogunk végezni.

Mit vonunk ki?

A rész címe alapján szerintem könnyen kitalálnád. Igen, bármire is gondolsz, az igaz. Nézzük ki az összes krikett világkupa győztest és második helyezettet.

  • Hozzon létre egy extract_cricket_world_cups_list.js nevű fájlt a projektben.
  • Használni fogjuk a Wikipédia krikett világbajnokság oldalt a kívánt információk eléréséhez.
  • Először szerezze be a nyers adatokat a node-fetch csomag segítségével.
  • Az alábbi kód a fenti Wikipédia oldal nyers adatait kapja.
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();

A nyers adatokat az URL-ből kaptuk. Most itt az ideje, hogy a nyers adatokból kinyerjük a szükséges információkat. Használjuk a cheerio csomagot az adatok kinyerésére.

A HTML-címkéket tartalmazó adatok cheerio-val történő kinyerése nem más, mint a torta. Mielőtt rátérnénk a tényleges adatokra, lássunk néhány minta adatelemzést a cheerio használatával.

  • Elemezze a HTML-adatokat a cheerio.load módszerrel.
const parsedSampleData = cheerio.load(
      `<div id="container"><p id="title">I'm title</p></div>`
   );
  • Elemeztük a fenti HTML kódot. Hogyan lehet kinyerni belőle a p tag tartalmát? Ez ugyanaz, mint a JavaScript DOM-manipuláció választói.
  Mi az a Kodi? Minden, amit a TV streaming alkalmazásról tudni kell

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

A címkéket tetszés szerint választhatja ki. Megnézheti a különböző módszereket a cheerio hivatalos weboldala.

  • Most itt az ideje, hogy kivonjuk a világbajnokság listáját. Az információ kinyeréséhez ismernünk kell a HTML-címkéket, amelyek az oldalon találhatók. Menj a krikett világbajnokság Wikipédia oldala és ellenőrizze az oldalt a HTML-címkék információinak megtekintéséhez.

Itt a teljes kód.

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

És itt vannak a kikapart adatok.

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

Klassz 😎, igaz?

  Hogyan lehet kikapcsolni az Instagramon láthatót

Kaparás sablon

A nyers adatok lekérése az URL-ből minden webkaparási projektben gyakori. Az egyetlen változás az adatok követelmény szerinti kinyerése. Kipróbálhatja az alábbi kódot sablonként.

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

Következtetés

Megtanulta, hogyan kell weboldalt kaparni. Most rajtad a sor, hogy gyakorold a kódolást.

Azt is javaslom, hogy tekintse meg a népszerű web-lekaparási keretrendszereket, és fedezze fel a felhőalapú web-lekaparási megoldásokat.

Boldog kódolást 🙂

Élvezettel olvasta a cikket? Mit szólnál a világgal való megosztáshoz?