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:
- Kako se rugati GraphQL API-ima s json-graphql-poslužiteljem
- Hyper V vs VMware VS VirtualBox: Što je najbolje za sastanke s Virtualizat
- Vanjske tablice SQL Server PolyBase s Azure Blob Storage
- Waldo Anticheat: Strojno učenje za otkrivanje ciljanja u videoisječcima
- Izradite decentralizirani protokol razmjene poput PancakeSwap -a na pametnom lancu Binance