Kui veebisait ei paku head API-d, on teie järgmine parim valik selle sisu kraapida. Cheerio ja Express.js aitavad teil seda teha.
Veebi kraapimine on tehnika, mis võimaldab hankida andmeid konkreetselt veebisaidilt. Veebisaidid kasutavad oma sisu kirjeldamiseks HTML-i. Kui HTML on puhas ja semantiline, on seda lihtne kasutada kasulike andmete leidmiseks.
Tavaliselt kasutate andmete hankimiseks ja jälgimiseks ning nende tulevaste muudatuste jälgimiseks veebikaabitsat.
jQuery kontseptsioonid, mida tasub enne Cheerio kasutamist teada
jQuery on üks populaarsemaid JavaScripti pakette. See muudab rakendusega töötamise lihtsamaks Dokumendiobjekti mudel (DOM), hallata sündmusi, animatsioone ja palju muud. Cheerio on veebikraapimise pakett, mis põhineb jQueryl – jagab sama süntaksit ja API-d, hõlbustades samal ajal HTML- või XML-dokumentide sõelumist.
Enne Cheerio kasutamise õppimist on oluline teada, kuidas jQuery abil HTML-elemente valida. Õnneks toetab jQuery enamikku CSS3 valijaid, mis hõlbustab DOM-ist elementide haaramist. Vaadake järgmist koodi:
$("#container");
Ülaltoodud koodiplokis valib jQuery elemendid nupuga id "konteinerist". Sarnane teostus tavalist vana JavaScripti kasutades näeks välja umbes selline:
document.querySelectorAll("#container");
Võrreldes kahte viimast koodiplokki, näete, et esimest koodiplokki on palju lihtsam lugeda kui viimast. See on jQuery ilu.
jQuery pakub ka selliseid kasulikke meetodeid nagu tekst(), html()ja palju muud, mis võimaldavad HTML-elementidega manipuleerida. DOM-i läbimiseks saate kasutada mitmeid meetodeid, näiteks vanem(), õed-vennad (), eelmine()ja järgmine ().
The iga() jQuery meetod on paljudes Cheerio projektides väga populaarne. See võimaldab teil korrata objekte ja massiive. Süntaks jaoks iga() meetod näeb välja selline:
$().each(<arrayorobject>, callback)
Ülaltoodud koodiplokis helista tagasi töötab iga massiivi või objekti argumendi iteratsiooni jaoks.
HTML-i laadimine koos Cheerioga
HTML- või XML-andmete sõelumise alustamiseks Cheerioga saate kasutada cheerio.load() meetod. Vaadake seda näidet:
const $ = cheerio.load('Hello, world!
');
console.log($('h1').text())
See koodiplokk kasutab jQueryt tekst() meetod otsib teksti sisu h1 element. Täielik süntaks laadige () meetod näeb välja selline:
load(content, options, mode)
The sisu parameeter viitab tegelikele HTML- või XML-andmetele, mille edastate laadige () meetod. valikuid on valikuline objekt, mis võib meetodi käitumist muuta. Vaikimisi on laadige () meetod tutvustab html, peaja keha elemente, kui need puuduvad. Kui soovite selle käitumise peatada, veenduge, et see oleks määratud režiimis valeks.
Häkkeriuudiste kraapimine koos Cheerioga
Selles projektis kasutatav kood on saadaval a GitHubi hoidla ja seda saate MIT-i litsentsi alusel tasuta kasutada.
On aeg ühendada kõik seni õpitu ja luua lihtne veebikaabits. Hacker News on populaarne veebisait ettevõtjatele ja uuendajatele. See on ka ideaalne veebisait oma veebikraapimise oskuste kasutamiseks, kuna see laadib kiiresti, sellel on väga lihtne liides ja see ei esita reklaame.
Veenduge, et teil oleks Node.js ja Sõlme paketihaldur töötab teie masinal. Looge tühi kaust ja seejärel a package.json faili ja lisage faili sisse järgmine JSON:
{
"name": "web-scraper",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "nodemon index.js"
},
"author": "",
"license": "MIT",
"dependencies": {
"cheerio": "^1.0.0-rc.12",
"express": "^4.18.2"
},
"devDependencies": {
"nodemon": "^3.0.1"
}
}
Pärast seda avage terminal ja käivitage:
npm i
See peaks installima kaabitsa ehitamiseks vajalikud sõltuvused. Need paketid sisaldavad Cheerio HTML-i sõelumiseks, ExpressJS serveri loomiseks ja arendussõltuvusenaNodemon, utiliit, mis kuulab muudatusi projektis ja taaskäivitab serveri automaatselt.
Asjade seadistamine ja vajalike funktsioonide loomine
Loo an index.js faili ja looge selles failis konstantne muutuja nimega "PORT". Määra PORT 5500-ni (või mis tahes valitud numbrini), seejärel importige vastavalt Cheerio ja Expressi paketid.
const PORT = 5500;
const cheerio = require("cheerio");
const express = require("express");
const app = express();
Järgmisena määratlege kolm muutujat: url, htmlja lõpetatud leht. Määra url Hacker Newsi URL-ile.
const url = 'https://news.ycombinator.com';
let html;
let finishedPage;
Nüüd looge funktsioon nimega getHeader() mis tagastab HTML-i, mille brauser peaks renderdama.
functiongetHeader(){
return`
"display: flex; flex-direction: column; align-items: center;">
"text-transform: capitalize">Scraper News</h1>
"display: flex; gap: 10px; align-items: center;">
"/" id="news" onClick='showLoading()'>Home</a>
"/best" id="best" onClick='showLoading()'>Best</a>
"/newest" id="newest" onClick='showLoading()'>Newest</a>
"/ask" id="ask" onClick='showLoading()'>Ask</a>
"/jobs" id="jobs" onClick='showLoading()'>Jobs</a>
</div>
class="loading" style="display: none;">Loading...</p>
</div>
`}
Looge teine funktsioon getScript() mis tagastab brauseri käivitamiseks JavaScripti. Veenduge, et sisestate muutuja tüüp argumendina, kui seda nimetate.
functiongetScript(type){
return`