爬虫http header gzip

这个是常识!在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);

});

做个对比,下面这个是没有压缩

爬虫http header gzip

 

然后这个是压缩了的

爬虫http header gzip

效果明显!

越来越觉得node写爬虫真的太方便鸟!

你可能感兴趣的:(header)