Node.js實現(xiàn)簡單的爬取的示例代碼
學習【node.js】也有幾天時間了,所以打算寫著練練手;索然我作為一個后端的選手,寫起來還有那么一絲熟悉的感覺。emmm~~ ‘貨'不多講 ,開搞........
首先是依賴選擇:

代碼塊如下:
//引入依賴
//https請求
const https = require('https');
//簡稱node版的jquery
const cheerio = require('cheerio');
//解決防止出現(xiàn)亂碼
const iconv = require('iconv-lite')
//http請求
const request = require("request");
//負責讀寫文件
const fs = require('fs');
//處理文件路徑
const path = require('path');
爬取路徑:

代碼塊:(PS:這里單獨拿出來是因為這個站的素材比較推薦,可以上去瞅瞅~~)
const url = 'https://unsplash.com/';
初步實現(xiàn):
網(wǎng)站的基本構成

這里主要是我們直接確認一下需要的【img】標簽,以及外面的【figure】,然后直接就可以開工了....
核心代碼:
//方法對象
const util = {
getsrc: function (url) {
https.get(url, res => {
const chunks = [];
res.on('data', chunk => {
// chunks里面存儲著網(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 });
//標簽遍歷
$("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ù)組 每個后面加.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);
});
});
},
//運行主函數(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ù)而導致數(shù)據(jù)丟失
request(src).pipe(fs.createWriteStream('./img/' + srcname)).on('close', callback);
});
}
}
//主函數(shù)
util.main();
然后就可以運行 node xxx.js 看運行結果。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
淺談Node新版本13.2.0正式支持ES Modules特性
這篇文章主要介紹了淺談Node新版本13.2.0正式支持ES Modules特性,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-11-11
npm dose not support Node.js v10.15
這篇文章主要給大家介紹了關npm dose not support Node.js v10.15.3的解決方法,文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-11-11
Node.js中使用mongoskin操作mongoDB實例
這篇文章主要介紹了Node.js中使用mongoskin操作mongoDB實例,Mongous是一個輕量級的nodejs mongodb驅動,需要的朋友可以參考下2014-09-09

