百度爬蟲這個詞語,通常出現的都是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" });