基於node.js的爬蟲框架 node-crawler簡單嘗試

百度爬蟲這個詞語,通常出現的都是python相關的資料。node

py也有不少爬蟲框架,好比scrapy,Portia,Crawley等。python

以前我我的更喜歡用C#作爬蟲。git

隨着對nodejs的熟悉。發現作這種事情仍是用腳本語言適合多了,至少不用寫那麼多的實體類。並且腳本通常使用比較簡單。  github


 

在github上搜索node+spider,排名第一的就是node-crawler npm

github:https://github.com/bda-research/node-crawler
併發

簡單使用

npm 安裝:框架

npm install crawler

new一個crawler對象scrapy

var c = new Crawler({
    // 在每一個請求處理完畢後將調用此回調函數
    callback : function (error, res, done) {
        if(error){
            console.log(error);
        }else{
            var $ = res.$;
            // $ 默認爲 Cheerio 解析器
            // 它是核心jQuery的精簡實現,能夠按照jQuery選擇器語法快速提取DOM元素
            console.log($("title").text());
        }
        done();
    }
});

而後往crawler隊列裏面不停的加url就好了,ide

// 將一個URL加入請求隊列,並使用默認回調函數
c.queue('http://www.amazon.com');

// 將多個URL加入請求隊列
c.queue(['http://www.google.com/','http://www.yahoo.com']);

控制併發速度

爬蟲框架通常都是同時去爬多個頁面,可是速度過快會觸發目標網站的反爬蟲機制,也同時影響別人網站的性能。函數

控制最大的併發數量

var c = new Crawler({
    // 最大併發數默認爲10
    maxConnections : 1,

    callback : function (error, res, done) {
        if(error){
            console.log(error);
        }else{
            var $ = res.$;
            console.log($("title").text());
        }
        done();
    }
});

使用慢速模式

使用參數 rateLimit 啓用慢速模式,兩次請求之間會閒置 rateLimit 毫秒,而 maxConnections 將被強行修改成 1 。

var c = new Crawler({
    // `maxConnections` 將被強制修改成 1
    maxConnections : 10,

    // 兩次請求之間將閒置1000ms
    rateLimit: 1000,

    callback : function (error, res, done) {
        if(error){
            console.log(error);
        }else{
            var $ = res.$;
            console.log($("title").text());
        }
        done();
    }
});

下載圖片等靜態文件

var c = new Crawler({
    encoding:null,
    jQuery:false,// set false to suppress warning message.
    callback:function(err, res, done){
        if(err){
            console.error(err.stack);
        }else{
            fs.createWriteStream(res.options.filename).write(res.body);
        }
        
        done();
    }
});

c.queue({
    uri:"https://nodejs.org/static/images/logos/nodejs-1920x1200.png",
    filename:"nodejs-1920x1200.png"
});
相關文章
相關標籤/搜索