Ja vietne nenodrošina labu API, nākamā labākā izvēle ir nokasīt tās saturu. Cheerio un Express.js palīdzēs jums to izdarīt.
Web nokasīšana ir paņēmiens, kas ļauj iegūt datus no konkrētas vietnes. Vietnes izmanto HTML, lai aprakstītu to saturu. Ja HTML ir tīrs un semantisks, to ir viegli izmantot, lai atrastu noderīgus datus.
Parasti izmantosiet tīmekļa skrāpi, lai iegūtu un pārraudzītu datus un izsekotu turpmākajām izmaiņām tajos.
jQuery jēdzieni, ko vērts zināt pirms Cheerio lietošanas
jQuery ir viena no populārākajām JavaScript pakotnēm. Tas atvieglo darbu ar Dokumenta objekta modelis (DOM), apstrādājiet notikumus, animāciju un daudz ko citu. Cheerio ir tīmekļa kopēšanas pakotne, kas ir balstīta uz jQuery — ar to pašu sintakse un API, vienlaikus atvieglojot HTML vai XML dokumentu parsēšanu.
Pirms apgūstat Cheerio lietošanu, ir svarīgi zināt, kā ar jQuery atlasīt HTML elementus. Par laimi, jQuery atbalsta lielāko daļu CSS3 atlasītāju, kas atvieglo elementu satveršanu no DOM. Apskatiet šādu kodu:
$("#container");
Iepriekš esošajā koda blokā jQuery atlasa elementus ar id no "konteinera". Līdzīga ieviešana, izmantojot parasto veco JavaScript, izskatītos apmēram šādi:
document.querySelectorAll("#container");
Salīdzinot pēdējos divus kodu blokus, jūs varat redzēt, ka pirmais koda bloks ir daudz vieglāk lasāms nekā pēdējais. Tas ir jQuery skaistums.
jQuery ir arī tādas noderīgas metodes kā teksts (), html(), un citas, kas ļauj manipulēt ar HTML elementiem. Ir vairākas metodes, kuras varat izmantot, lai šķērsotu DOM, piemēram vecāks(), brāļi un māsas (), iepriekšējais(), un Nākamais().
The katrs() jQuery metode ir ļoti populāra daudzos Cheerio projektos. Tas ļauj atkārtot objektus un masīvus. Sintakse katrs() metode izskatās šādi:
$().each(<arrayorobject>, callback)
Iepriekš esošajā koda blokā atzvani darbojas katrai masīva vai objekta argumenta iterācijai.
Notiek HTML ielāde ar Cheerio
Lai sāktu HTML vai XML datu parsēšanu ar Cheerio, varat izmantot cheerio.load() metodi. Apskatiet šo piemēru:
const $ = cheerio.load('Hello, world!
');
console.log($('h1').text())
Šis koda bloks izmanto jQuery teksts () metode izgūst teksta saturu h1 elements. Pilna sintakse slodze () metode izskatās šādi:
load(content, options, mode)
The saturu parametrs attiecas uz faktiskajiem HTML vai XML datiem, kurus nododat slodze () metodi. iespējas ir neobligāts objekts, kas var mainīt metodes darbību. Pēc noklusējuma slodze () metode ievieš html, galvu, un ķermeni elementi, ja to trūkst. Ja vēlaties pārtraukt šo darbību, noteikti iestatiet to režīmā uz nepatiesu.
Hakeru ziņu nokasīšana ar Cheerio
Šajā projektā izmantotais kods ir pieejams a GitHub repozitorijs un to varat izmantot bez maksas saskaņā ar MIT licenci.
Ir pienācis laiks apvienot visu, ko esat apguvis līdz šim, un izveidot vienkāršu tīmekļa skrāpi. Hacker News ir populāra vietne uzņēmējiem un novatoriem. Tā ir arī lieliska vietne, kurā izmantot savas tīmekļa skrāpēšanas prasmes, jo tā tiek ātri ielādēta, tai ir ļoti vienkāršs interfeiss un tajā netiek rādītas reklāmas.
Pārliecinieties, vai jums ir Node.js un Mezglu pakotņu pārvaldnieks darbojas jūsu mašīnā. Izveidojiet tukšu mapi, pēc tam a pack.json failu un failā pievienojiet šādu 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ēc tam atveriet termināli un palaidiet:
npm i
Tam vajadzētu instalēt skrāpja izveidošanai nepieciešamās atkarības. Šajās pakotnēs ietilpst Cheerio HTML parsēšanai, ExpressJS servera izveidei un kā izstrādes atkarība.Nodemon, utilīta, kas uzklausa izmaiņas projektā un automātiski restartēs serveri.
Lietu iestatīšana un nepieciešamo funkciju izveide
Izveidojiet an index.js failu un šajā failā izveidojiet nemainīgu mainīgo ar nosaukumu "PORT". Iestatīt PORTA līdz 5500 (vai jebkuram jūsu izvēlētam numuram), pēc tam importējiet attiecīgi Cheerio un Express pakotnes.
const PORT = 5500;
const cheerio = require("cheerio");
const express = require("express");
const app = express();
Pēc tam definējiet trīs mainīgos: url, html, un pabeigta lapa. Iestatīt url uz Hacker News URL.
const url = 'https://news.ycombinator.com';
let html;
let finishedPage;
Tagad izveidojiet funkciju ar nosaukumu getHeader() kas atgriež kādu HTML, kas pārlūkprogrammai ir jāatveido.
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>
`}
Izveidojiet citu funkciju getScript() kas atgriež kādu JavaScript, lai pārlūkprogramma darbotos. Noteikti ievadiet mainīgo veids kā argumentu, kad jūs to saucat.
functiongetScript(type){
return`