Node.js實現簡單的爬取

學習【node.js】也有幾天時間了,因此打算寫着練練手;索然我做爲一個後端的選手,寫起來還有那麼一絲熟悉的感受。emmm~~  ‘貨’很少講 ,開搞........javascript

首先是依賴選擇:html

 

代碼塊以下:java

//引入依賴
//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');

 

爬取路徑:node

 

代碼塊:(PS:這裏單獨拿出來是由於這個站的素材比較推薦,能夠上去瞅瞅~~)jquery

const url = 'https://unsplash.com/';

  

初步實現:後端

 網站的基本構成數組

 

這裏主要是咱們直接確認一下須要的【img】標籤,以及外面的【figure】,而後直接就能夠開工了....ide

核心代碼:函數

//方法對象
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.

相關文章
相關標籤/搜索