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.
Tartalomjegyzék
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.
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.
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?
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?