这个是常识!在request header里面加个gzip!可以大大的节约带宽。感谢来神在群聊天的时候说到这个。
详情参见 wiki
把昨天写的解析中关村在线的代码改了下
/* Date: 2013-04-08 Author: FangYuhao */ var http = require('http'); var iconv = require('iconv-lite'); var cheerio = require('cheerio'); var zlib = require('zlib'); url = 'http://detail.zol.com.cn/332/331058/review.shtml' function parseZOL(data) { var $ = cheerio.load(data); //console.log($('.star_overview .nums').text()); $('.comment_content').each(function(){ console.log('good: '+$(this).children('dl').children('.good').next().text()); console.log('bad: '+$(this).children('dl').children('.bad').next().text()); }); } var options ={ host : 'detail.zol.com.cn' , port : '80' , path : '/332/331058/review.shtml' , headers : {'Accept-Encoding' : ' gzip, deflate'} }; http.get(options , function(res){ var stack = ''; // console.log(res.headers); var gunzip = zlib.createGunzip(); res.pipe(gunzip); gunzip.setEncoding('binary'); gunzip.on('data' , function(d){ stack += d; }).on('error',function(err){ console.log(err.message); }); gunzip.on('end' , function(){ var buf = new Buffer(stack ,'binary'); var data = iconv.decode(buf , 'gbk'); parseZOL(data); }).on('error',function(err){ console.log(err.message); }) }).on('error', function(err){ console.log(err.message); });
做个对比,下面这个是没有压缩的
然后这个是压缩了的
效果明显!
越来越觉得node写爬虫真的太方便鸟!