利用Node的cheerio插件去爬一个网站的新闻,结果发现从中获得的中文显示为
“������ͼ��20140611����”乱码,求问如何解决,顺便求问不同转码格式的知识点;
除了 @ZheX 的回答,有些网页不严谨,在爬取时还要对request
的option
进行设置,如下:
var options = {
method: 'GET',
encoding: null,
url: example.com
}
request(options, function(err, response, body){});
其中的encoding
不能忘,之前就遇到过这样的一个网站,同时其返回中没说明charset
。
但,不加encoding
为何出错,待高手解疑。
首先肯定是确定要爬的页面的编码。如果是GBK的话就需要对爬过来的文字用iconv库做转化,在nodejs中变成UTF8。比如:
var request = require('request'),
cheerio = require('cheerio'),
Iconv = require('iconv').Iconv;
var iconv = new Iconv('GBK', 'UTF-8');
request(opts, function (err, response, body) {
var result = iconv.convert(new Buffer(body, 'binary')).toString();
var $ = cheerio.load(result);
// ......
});