Om en webbplats misslyckas med att tillhandahålla ett bra API, är din näst bästa insats att skrapa dess innehåll. Cheerio och Express.js hjälper dig att göra just det.

Webbskrapning är en teknik som gör det möjligt att få data från en viss webbplats. Webbplatser använder HTML för att beskriva sitt innehåll. Om HTML-koden är ren och semantisk är det lätt att använda den för att hitta användbar data.

Du kommer vanligtvis att använda en webbskrapa för att hämta och övervaka data och spåra framtida ändringar av den.

jQuery-koncept värda att veta innan du använder Cheerio

jQuery är ett av de mest populära JavaScript-paketen som finns. Det gör det lättare att arbeta med Document Object Model (DOM), hantera händelser, animationer och mer. Cheerio är ett paket för webbskrapning som bygger ovanpå jQuery – som delar samma syntax och API, samtidigt som det gör det lättare att analysera HTML- eller XML-dokument.

Innan du lär dig hur man använder Cheerio är det viktigt att veta hur man väljer HTML-element med jQuery. Tack och lov stöder jQuery de flesta CSS3-väljare vilket gör det lättare att ta tag i element från DOM. Ta en titt på följande kod:

instagram viewer

$("#container");

I kodblocket ovan väljer jQuery elementen med id av "behållare". En liknande implementering med vanlig gammal JavaScript skulle se ut ungefär så här:

document.querySelectorAll("#container");

Om du jämför de två sista kodblocken kan du se att det förra kodblocket är mycket lättare att läsa än det senare. Det är det fina med jQuery.

jQuery har också användbara metoder som text(), html(), och mer som gör det möjligt att manipulera HTML-element. Det finns flera metoder du kan använda för att korsa DOM, som förälder(), syskon(), föregående(), och Nästa().

De varje() metoden i jQuery är mycket populär i många Cheerio-projekt. Det låter dig iterera över objekt och arrayer. Syntaxen för varje() metoden ser ut så här:

$().each(<arrayorobject>, callback)

I kodblocket ovan, ring tillbaka körs för varje iteration av array- eller objektargumentet.

Laddar HTML med Cheerio

För att börja analysera HTML- eller XML-data med Cheerio kan du använda cheerio.load() metod. Ta en titt på detta exempel:

const $ = cheerio.load('

Hello, world!

'
);
console.log($('h1').text())

Detta kodblock använder jQuery text() metoden hämtar textinnehållet i h1 element. Den fullständiga syntaxen för ladda() metoden ser ut så här:

load(content, options, mode)

De innehåll parametern hänvisar till den faktiska HTML- eller XML-data som du skickar ladda() metod. alternativ är ett valfritt objekt som kan ändra metodens beteende. Som standard är ladda() metod introducerar html, huvud, och kropp element om de saknas. Om du vill stoppa detta beteende, se till att du ställer in läge till falskt.

Skrapar hackernyheter med Cheerio

Koden som används i detta projekt är tillgänglig i en GitHub-förråd och är gratis för dig att använda under MIT-licensen.

Det är dags att kombinera allt du har lärt dig hittills och skapa en enkel webbskrapa. Hacker News är en populär webbplats för entreprenörer och innovatörer. Det är också en perfekt webbplats att utnyttja dina webbskrapningsfärdigheter på eftersom den laddas snabbt, har ett mycket enkelt gränssnitt och inte visar några annonser.

Se till att du har Node.js och den Node Package Manager körs på din maskin. Skapa en tom mapp och sedan en package.json fil och lägg till följande JSON i filen:

{
"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"
}
}

Efter att ha gjort det, öppna terminalen och kör:

npm i

Detta bör installera de nödvändiga beroenden du behöver för att bygga skrapan. Dessa paket inkluderar Cheerio för att analysera HTML, ExpressJS för att skapa servern och - som ett utvecklingsberoende -Nodemon, ett verktyg som lyssnar efter förändringar i projektet och automatiskt startar om servern.

Ställa in saker och skapa de nödvändiga funktionerna

Skapa en index.js fil, och i den filen, skapa en konstant variabel som heter "PORT". Uppsättning HAMN till 5500 (eller vilket nummer du än väljer), importera sedan Cheerio- respektive Express-paketen.

const PORT = 5500;
const cheerio = require("cheerio");
const express = require("express");
const app = express();

Definiera sedan tre variabler: url, html, och färdig sida. Uppsättning url till Hacker News URL.

const url = 'https://news.ycombinator.com';
let html;
let finishedPage;

Skapa nu en funktion som heter getHeader() som returnerar lite HTML som webbläsaren ska rendera.

functiongetHeader(){
return`

Skapa en annan funktion getScript() som returnerar lite JavaScript för webbläsaren att köra. Se till att du skickar in variabeln typ som ett argument när man kallar det.

functiongetScript(type){
return`