爬虫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);
});

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

然后这个是压缩了的

效果明显!

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

by 1957
原文地址:https://www.cnblogs.com/x1957/p/3011104.html