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


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

py也有很多爬蟲框架,比如scrapy,Portia,Crawley等。

之前我個人更喜歡用C#做爬蟲。

隨着對nodejs的熟悉。發現做這種事情還是用腳本語言適合多了,至少不用寫那么多的實體類。而且腳本一般使用比較簡單。  


 

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

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

簡單使用

npm 安裝:

npm install crawler

new一個crawler對象

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就行了,

// 將一個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"
});

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM