使用cheerio爬数据兼容gbk和utf8

  使用cheerio爬数据的时候,有的页面不是使用utf8编码,而node只能识别utf8的编码,

因此,不得不将gbk数据转为uft8。

var http = require('http');
var iconv = require('iconv-lite');
var cheerio = require('cheerio');
var url = require('url');

var html = "";
var getURL = url.parse('http://bj.soufun.com/');
var req = http.get(getURL, function(res) {
res.setEncoding('binary'); //or hex
res.on('data', function(data) { //加载数据,一般会执行多次
html += data;
}).on('end', function() {
var $ = cheerio.load(res);
var buf = new Buffer(html, 'binary'); //这一步不可省略
if(/gbk/i.test($('meta[charset]').attr('charset'))){
var str = iconv.decode(buf, 'GBK'); //将GBK编码的字符转换成utf8的
}else{//将utf8编码下的binary字符还原为utf8
var str = iconv.decode(buf,'UTF8');
}
console.log(str);
})
}).on('error', function(err) {
console.log("http get error:", err);
});

这样爬下来的数据不管是gbk以及utf8;最后都将爬下来的数据转为utf8

原文地址:https://www.cnblogs.com/lds2014/p/4564009.html