Node.js實現簡單的爬取
阿新 • • 發佈:2019-06-25
學習【node.js】也有幾天時間了,所以打算寫著練練手;索然我作為一個後端的選手,寫起來還有那麼一絲熟悉的感覺。emmm~~ ‘貨’不多講 ,開搞........
首先是依賴選擇:
程式碼塊如下:
//引入依賴 //https請求 const https = require('https'); //簡稱node版的jquery const cheerio = require('cheerio'); //解決防止出現亂碼 const iconv = require('iconv-lite') //http請求 const request = require("request"); //負責讀寫檔案 const fs = require('fs'); //處理檔案路徑 const path = require('path');
爬取路徑:
程式碼塊:(PS:這裡單獨拿出來是因為這個站的素材比較推薦,可以上去瞅瞅~~)
const url = 'https://unsplash.com/';
初步實現:
網站的基本構成
這裡主要是我們直接確認一下需要的【img】標籤,以及外面的【figure】,然後直接就可以開工了....
核心程式碼:
//方法物件 const util = { getsrc: function (url) { https.get(url, res => { const chunks = []; res.on('data', chunk => { // chunks裡面儲存著網頁的html內容 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 }) } }); //遍歷陣列 每個後面加.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); }); }); }, //執行主函式 main: function () { console.log("------start--------"); util.getsrc(url); }, //下載圖片函式 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); //儲存資料,這裡是防止未來得及記錄資料又開始讀取資料而導致資料丟失 request(src).pipe(fs.createWriteStream('./img/' + srcname)).on('close', callback); }); } } //主函式 util.main();
然後就可以執行 node xxx.js 看執行結果。
END Initial entry into the front end, the inadequacies, please bear with me.