Jei svetainė nepateikia geros API, kitas geriausias pasirinkimas yra nuskaityti jos turinį. „Cheerio“ ir „Express.js“ padės jums tai padaryti.
Žiniatinklio nuskaitymas yra metodas, leidžiantis gauti duomenis iš konkrečios svetainės. Svetainės naudoja HTML savo turiniui apibūdinti. Jei HTML yra švarus ir semantiškas, jį lengva naudoti norint rasti naudingų duomenų.
Paprastai naudosite žiniatinklio grandiklį, kad gautumėte ir stebėtumėte duomenis bei stebėtumėte būsimus jų pakeitimus.
„jQuery“ sąvokos, kurias verta žinoti prieš naudojant „Cheerio“.
„jQuery“ yra vienas populiariausių egzistuojančių „JavaScript“ paketų. Tai palengvina darbą su Dokumento objekto modelis (DOM), tvarkykite įvykius, animaciją ir kt. „Cheerio“ yra žiniatinklio rinkimo paketas, sukurtas remiantis „jQuery“ – bendra sintaksė ir API, tuo pačiu palengvinant HTML arba XML dokumentų analizavimą.
Prieš mokantis naudotis Cheerio, svarbu žinoti, kaip pasirinkti HTML elementus naudojant jQuery. Laimei, „jQuery“ palaiko daugumą CSS3 selektorių, todėl lengviau paimti elementus iš DOM. Pažvelkite į šį kodą:
$("#container");
Aukščiau esančiame kodo bloke jQuery pasirenka elementus su id iš „konteinerio“. Panašus įgyvendinimas naudojant įprastą seną „JavaScript“ atrodytų maždaug taip:
document.querySelectorAll("#container");
Palyginus paskutinius du kodų blokus, matote, kad buvęs kodo blokas yra daug lengviau skaitomas nei pastarasis. Tai yra „jQuery“ grožis.
„jQuery“ taip pat turi naudingų metodų, pvz tekstas (), html()ir daugiau, leidžiančių manipuliuoti HTML elementais. Yra keli metodai, kuriuos galite naudoti norėdami pereiti DOM, pvz tėvas (), broliai ir seserys (), ankstesnis (), ir Kitas().
The kiekvienas () jQuery metodas yra labai populiarus daugelyje Cheerio projektų. Tai leidžia kartoti objektus ir masyvus. Sintaksė, skirta kiekvienas () metodas atrodo taip:
$().each(<arrayorobject>, callback)
Aukščiau esančiame kodo bloke perskambink veikia kiekvienai masyvo arba objekto argumento iteracijai.
Įkeliamas HTML su Cheerio
Norėdami pradėti analizuoti HTML arba XML duomenis naudodami „Cheerio“, galite naudoti cheerio.load() metodas. Pažvelkite į šį pavyzdį:
const $ = cheerio.load('Hello, world!
');
console.log($('h1').text())
Šis kodo blokas naudoja jQuery tekstas () metodas nuskaito teksto turinį h1 elementas. Visa sintaksė įkelti () metodas atrodo taip:
load(content, options, mode)
The turinys parametras nurodo faktinius HTML arba XML duomenis, kuriuos perduodate įkelti () metodas. galimybės yra pasirenkamas objektas, galintis pakeisti metodo veikimą. Pagal numatytuosius nustatymus, įkelti () metodas pristato html, galva, ir kūnas elementų, jei jų trūksta. Jei norite sustabdyti šį elgesį, būtinai nustatykite režimu meluoti.
Hakerių naujienų rinkimas su Cheerio
Šiame projekte naudojamas kodas yra a GitHub saugykla ir jūs galite nemokamai naudotis pagal MIT licenciją.
Atėjo laikas sujungti viską, ko išmokote iki šiol, ir sukurti paprastą žiniatinklio grandiklį. „Hacker News“ yra populiari verslininkų ir novatorių svetainė. Tai taip pat puiki svetainė, kurioje galite panaudoti žiniatinklio rinkimo įgūdžius, nes ji greitai įkeliama, turi labai paprastą sąsają ir neteikia jokių skelbimų.
Įsitikinkite, kad turite Node.js ir Mazgo paketų tvarkyklė veikia jūsų mašinoje. Sukurkite tuščią aplanką, tada a package.json failą ir į failą įtraukite šį 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"
}
}
Tai atlikę atidarykite terminalą ir paleiskite:
npm i
Tai turėtų įdiegti reikiamas priklausomybes, kurių reikia grandikliui sukurti. Šie paketai apima „Cheerio“, skirtą HTML analizei, „ExpressJS“, skirtą serveriui sukurti, ir kaip kūrimo priklausomybę.Nodemon, programa, kuri klausosi pakeitimų projekte ir automatiškai iš naujo paleidžia serverį.
Daiktų nustatymas ir būtinų funkcijų kūrimas
Sukurti an index.js failą ir tame faile sukurkite pastovų kintamąjį pavadinimu „PORT“. Nustatyti UOSTAS iki 5500 (arba bet kurį pasirinktą skaičių), tada importuokite atitinkamai Cheerio ir Express paketus.
const PORT = 5500;
const cheerio = require("cheerio");
const express = require("express");
const app = express();
Tada apibrėžkite tris kintamuosius: url, html, ir baigtasPuslapis. Nustatyti url į Hacker News URL.
const url = 'https://news.ycombinator.com';
let html;
let finishedPage;
Dabar sukurkite funkciją, vadinamą getHeader () kuris grąžina tam tikrą HTML kodą, kurį turėtų pateikti naršyklė.
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>
`}
Sukurkite kitą funkciją getScript() kuris grąžina tam tikrą „JavaScript“, kad naršyklė veiktų. Įsitikinkite, kad įvedėte kintamąjį tipo kaip argumentas, kai tai vadini.
functiongetScript(type){
return`