Als een website geen goede API biedt, is de volgende beste gok om de inhoud ervan te schrapen. Cheerio en Express.js helpen je daarbij.

Webscraping is een techniek die het mogelijk maakt om gegevens van een bepaalde website te verkrijgen. Websites gebruiken HTML om hun inhoud te beschrijven. Als de HTML schoon en semantisch is, is het gemakkelijk om deze te gebruiken om nuttige gegevens te vinden.

Meestal gebruikt u een webschraper om gegevens te verkrijgen en te controleren en om toekomstige wijzigingen daarin bij te houden.

jQuery-concepten die het waard zijn om te weten voordat u Cheerio gebruikt

jQuery is een van de meest populaire JavaScript-pakketten die er bestaan. Het maakt het werken met de Documentobjectmodel (DOM), gebeurtenissen, animaties en meer afhandelen. Cheerio is een pakket voor webscraping dat voortbouwt op jQuery en dezelfde syntaxis en API deelt, terwijl het eenvoudiger wordt om HTML- of XML-documenten te ontleden.

Voordat je Cheerio leert gebruiken, is het belangrijk om te weten hoe je HTML-elementen selecteert met jQuery. Gelukkig ondersteunt jQuery de meeste CSS3-selectors, waardoor het gemakkelijker wordt om elementen uit de DOM te halen. Bekijk de volgende code eens:

instagram viewer

$("#container");

In het bovenstaande codeblok selecteert jQuery de elementen met de ID kaart van "houder". Een vergelijkbare implementatie met gewoon oud JavaScript zou er ongeveer zo uitzien:

document.querySelectorAll("#container");

Als je de laatste twee codeblokken vergelijkt, kun je zien dat het eerste codeblok veel gemakkelijker te lezen is dan het laatste. Dat is het mooie van jQuery.

jQuery heeft ook handige methoden zoals tekst(), html(), en meer die het mogelijk maken om HTML-elementen te manipuleren. Er zijn verschillende methoden die u kunt gebruiken om de DOM te doorkruisen, zoals ouder(), broers of zussen(), vorige(), En volgende().

De elk() methode in jQuery is erg populair in veel Cheerio-projecten. Hiermee kunt u objecten en arrays herhalen. De syntaxis voor de elk() methode ziet er zo uit:

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

In het codeblok hierboven, Bel terug wordt uitgevoerd voor elke iteratie van het array- of objectargument.

HTML laden met Cheerio

Om te beginnen met het parseren van HTML- of XML-gegevens met Cheerio, kunt u de cheerio.load() methode. Kijk eens naar dit voorbeeld:

const $ = cheerio.load('

Hello, world!

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

Dit codeblok maakt gebruik van de jQuery tekst() methode haalt de tekstinhoud op van het h1 element. De volledige syntaxis voor de laden() methode ziet er zo uit:

load(content, options, mode)

De inhoud parameter verwijst naar de daadwerkelijke HTML- of XML-gegevens die u doorgeeft laden() methode. opties is een optioneel object dat het gedrag van de methode kan wijzigen. Standaard is de laden() methode introduceert html, hoofd, En lichaam elementen als ze ontbreken. Als u dit gedrag wilt stoppen, moet u ervoor zorgen dat u instelt modus tot vals.

Hackernieuws schrapen met Cheerio

De code die in dit project wordt gebruikt, is beschikbaar in een GitHub-opslagplaats en is gratis voor u om te gebruiken onder de MIT-licentie.

Het is tijd om alles wat je tot nu toe hebt geleerd te combineren en een eenvoudige webschraper te maken. Hacker News is een populaire website voor ondernemers en innovators. Het is ook een perfecte website om uw webscraping-vaardigheden te benutten, omdat deze snel laadt, een zeer eenvoudige interface heeft en geen advertenties weergeeft.

Zorg ervoor dat je Node.js hebt en de Node-pakketbeheerder draaien op uw machine. Maak een lege map aan en vervolgens a pakket.json bestand en voeg de volgende JSON toe aan het bestand:

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

Open daarna de terminal en voer uit:

npm i

Dit zou de nodige afhankelijkheden moeten installeren die je nodig hebt om de scraper te bouwen. Deze pakketten bevatten Cheerio voor het ontleden van de HTML, ExpressJS voor het maken van de server en, als ontwikkelingsafhankelijkheid,Nodemon, een hulpprogramma dat luistert naar veranderingen in het project en start de server automatisch opnieuw op.

Dingen instellen en de benodigde functies creëren

Creëer een index.js bestand en maak in dat bestand een constante variabele met de naam "PORT". Set HAVEN tot 5500 (of welk nummer u ook kiest), importeer vervolgens respectievelijk de Cheerio- en Express-pakketten.

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

Definieer vervolgens drie variabelen: url, html, En voltooide pagina. Set url naar de Hacker News-URL.

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

Maak nu een functie genaamd getHeader() dat retourneert wat HTML die de browser zou moeten weergeven.

functiongetHeader(){
return`

Maak een andere functie getScript() dat retourneert wat JavaScript zodat de browser kan worden uitgevoerd. Zorg ervoor dat u de variabele doorgeeft type als argument als je het noemt.

functiongetScript(type){
return`