Node.js實(shí)現(xiàn)簡單的爬取的示例代碼
學(xué)習(xí)【node.js】也有幾天時(shí)間了,所以打算寫著練練手;索然我作為一個(gè)后端的選手,寫起來還有那么一絲熟悉的感覺。emmm~~ ‘貨'不多講 ,開搞........
首先是依賴選擇:
代碼塊如下:
//引入依賴 //https請求 const https = require('https'); //簡稱node版的jquery const cheerio = require('cheerio'); //解決防止出現(xiàn)亂碼 const iconv = require('iconv-lite') //http請求 const request = require("request"); //負(fù)責(zé)讀寫文件 const fs = require('fs'); //處理文件路徑 const path = require('path');
爬取路徑:
代碼塊:(PS:這里單獨(dú)拿出來是因?yàn)檫@個(gè)站的素材比較推薦,可以上去瞅瞅~~)
const url = 'https://unsplash.com/';
初步實(shí)現(xiàn):
網(wǎng)站的基本構(gòu)成
這里主要是我們直接確認(rèn)一下需要的【img】標(biāo)簽,以及外面的【figure】,然后直接就可以開工了....
核心代碼:
//方法對象 const util = { getsrc: function (url) { https.get(url, res => { const chunks = []; res.on('data', chunk => { // chunks里面存儲(chǔ)著網(wǎng)頁的html內(nèi)容 chunks.push(chunk); }); res.on('end', e => { let ALL = []; //編碼格式 let html = iconv.decode(Buffer.concat(chunks), 'utf8'); let $ = cheerio.load(html, { decodeEntities: false }); //標(biāo)簽遍歷 $("figure img").each(function (idex, elent) { let $elent = $(elent); let $srcset = $elent.attr("srcset"); if ($srcset != undefined) { let src = ($srcset.split(',').pop()).split('?')[0]; ALL.push({ src: src }) } }); //遍歷數(shù)組 每個(gè)后面加.jpg ALL.forEach(item => { util.downloadimg(item.src, path.basename(item.src) + ".jpg", function () { console.log(path.basename(item.src) + ".jpg"); }); }) }); res.on('error', e => { console.log('Error: ' + e.message); }); }); }, //運(yùn)行主函數(shù) main: function () { console.log("------start--------"); util.getsrc(url); }, //下載圖片函數(shù) downloadimg: function (src, srcname, callback) { //http請求 request.head(src, function (err, res, body) { if (err) { console.log('err:' + err); return false; } console.log('res: ' + res); //保存數(shù)據(jù),這里是防止未來得及記錄數(shù)據(jù)又開始讀取數(shù)據(jù)而導(dǎo)致數(shù)據(jù)丟失 request(src).pipe(fs.createWriteStream('./img/' + srcname)).on('close', callback); }); } } //主函數(shù) util.main();
然后就可以運(yùn)行 node xxx.js 看運(yùn)行結(jié)果。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
nodejs使用express獲取get和post傳值及session驗(yàn)證的方法
這篇文章主要介紹了nodejs使用express獲取get和post傳值及session驗(yàn)證的方法,結(jié)合實(shí)例形式分析了nodejs使用express實(shí)現(xiàn)獲取get和post傳值及session驗(yàn)證功能的具體操作步驟與注意事項(xiàng),需要的朋友可以參考下2017-11-11Nodejs實(shí)現(xiàn)圖片上傳、壓縮預(yù)覽、定時(shí)刪除功能
本文分步驟給大家介紹了Nodejs實(shí)現(xiàn)圖片的上傳、壓縮預(yù)覽、定時(shí)刪除功能,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-10-10在Node.js中實(shí)現(xiàn)獲取用戶頻道信息的功能
在構(gòu)建社交或視頻分享平臺(tái)時(shí),允許用戶查看其他用戶的頻道信息是一個(gè)基本需求,本文將介紹如何在Node.js應(yīng)用中,使用Express框架和Mongoose庫來實(shí)現(xiàn)這一功能,文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下2024-04-04nodejs實(shí)現(xiàn)郵箱發(fā)送驗(yàn)證碼功能
開發(fā)個(gè)人網(wǎng)站時(shí),注冊頁面可以使用郵箱驗(yàn)證,于是記錄一下如何用nodejs/express服務(wù)器實(shí)現(xiàn)郵箱發(fā)送驗(yàn)證碼,不僅可以在郵箱注冊時(shí)使用,還可以拓展用于各種安全驗(yàn)證,本文給大家介紹了使用nodejs實(shí)現(xiàn)郵箱發(fā)送驗(yàn)證碼功能,需要的朋友可以參考下2024-07-07