Daljinsko dohvaćanje HTML podataka i njihova raščlamba u Expressu za NodeJS

Isprobajte Naš Instrument Za Uklanjanje Problema

Daljinsko dohvaćanje HTML podataka i njihova raščlamba u Expressu za NodeJS

Jeste li ikada poželjeli dohvatiti udaljene HTML podatke na sličan način kovrča ili Wget koristeći neku pozadinsku web uslugu i raščlaniti je? Ako ste rekli ne, ne brinite, rekao sam točnu stvar sve dok me to nije izazvalo. Za izazov sam se odlučio koristiti Izraziti kao moj okvir i nekoliko knjižnica za pomoć u procesu dohvaćanja i raščlanjivanja.

napredna c++ pitanja za intervju

Odlučio sam koristiti HTTP i HTTPS knjižnice za dohvaćanje podataka i htmlparser2 za raščlanjivanje HTML podataka. Ovo su, naravno, samo neke od mnogih alternativa koje možete izabrati za takav zadatak.

Prije početka, pretpostavit ću da ste već instalirali Express.



Idemo naprijed i stvorimo novi Express projekt na našoj radnoj površini:

express ParseProject

Sada bi se knjižnice HTTP i HTTPS već trebale isporučiti s instalacijom NodeJS. Ako iz nekog razloga dođemo do zastoja, uvijek možete prisiliti instalaciju knjižnica s projektom kao vašim trenutnim radnim imenikom i sljedećim:

npm install http --save npm install https --save

Ne bih preporučio instaliranje gore navedenog osim ako sigurno ne znamo da već nisu dostupni.

Zatim instalirajmo htmlparser2 biblioteku za kretanje kroz naš HTML:

npm install htmlparser2 --save

Korištenjem | _+_ | zastava, dodaje referencu na te ovisnosti u našem paket.json datoteka.

Otvorite projekt rute/index.js datoteku jer ćemo ovdje izvršiti svo naše kodiranje. Neka vrh vaše datoteke izgleda otprilike ovako:

--save

Sada možemo izabrati da li ćemo sve naše kodiranje izvesti u glavnom | _+_ | rutu ili stvorite drugu rutu. Kreirat ću novu rutu pod nazivom | _+_ | koji će biti za dohvaćanje HTML podataka:

var express = require('express'); var http = require('http'); var https = require('https'); var htmlparser = require('htmlparser2'); var router = express.Router();

Kako bismo učinili naš kôd malo dinamičnijim, dopustit ćemo da se URL proslijedi kao GET parametar umjesto rada sa statičkom web lokacijom:

/

Dakle, što se događa u gornjem kodu? Provjeravamo je li a | _+_ | je proslijeđeno s parametrima upita. Ako nije, vratite pogrešku. Ako jest, tada ćemo koristiti regularni izraz za izdvajanje prefiksa URL -a, a zatim ga ukloniti s URL -a. To činimo jer ako URL koristi SSL, onda moramo koristiti HTTPS, a ne HTTP.

Ostatak nas vodi do sljedeće funkcije:

/fetch

U gornjoj funkciji dobivamo sve udaljene HTML podatke, a zatim pomoću htmlparser2 shvaćamo koji nazivi oznaka postoje i koliko od svakog naziva oznake postoji.

Tada odlučujemo vratiti sve te podatke.

Evo koda u cijelosti rute/index.js datoteku u slučaju da želite vidjeti sve zajedno:

router.get('/fetch', function(req, res, next) { });

Kako bi bilo isprobati ovu stvar? S projektom kao vašim trenutnim imenikom u naredbenom retku ili terminalu pokrenite sljedeće:

if(req.query.url === undefined) { res.send({message: 'url cannot be undefined'}); } var urlPrefix = req.query.url.match(/.*?:///g); req.query.url = req.query.url.replace(/.*?:///g, ''); var options = { hostname: req.query.url }; if(urlPrefix !== undefined && urlPrefix !== null && urlPrefix[0] === 'https://') { options.port = 443; https.get(options, function(result) { processResponse(result); }).on('error', function(e) { res.send({message: e.message}); }); } else { options.port = 80; http.get(options, function(result) { processResponse(result); }).on('error', function(e) { res.send({message: e.message}); }); }

Ovo će započeti vaš projekt na | _+_ | za gledanje. U svom web pregledniku pritisnite | _+_ | i vidjeti što će se dogoditi. Uz malo sreće trebali biste dobiti sve HTML podatke i informacije o oznakama.

Zaključak

Ako ste iz nekog razloga htjeli dobiti i raščlaniti HTML podatke s Expressom za NodeJS, mogli biste koristiti HTTP, HTTPS i htmlparser2 ovisnosti. Postoji mnogo alternativnih knjižnica koje mogu postići isto. Tada možemo stvoriti prilagođenu rutu i vratiti podatke kao JSON za odgovor sličan API-ju

#html #nodejs #node #Express #javascript

Vidi Također: