最近在学习Node爬虫,其中就用到了Jquery解析页面元素,在爬取页面的时候利用 iconv.decode
之后还是乱码,那么首先要搞清楚下面的内容问题就迎刃而解了。
const Decodebody = iconv.decode(body, 'gb2312')
这行代码的意思是对爬虫获取得到的response响应内容进行解码。
const $ = cheerio.load(Decodebody )
这行代码的意思是将解析得到的内容转换为Dom树,方便利用Jquery进行解析。
问题:
利用iconv.decode(body,'gb2312')
进行编码之后,发现爬虫返回的结果还是乱码
解决:
那么这个时候需要用到Buffer流进行编码和解码了,至于为什么要用到这个,见Buffer解析
使用代码如下:
const options = {
hostname: 'baidu.com',
port: 80,
method: 'GET',
headers: {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER",
}
};
http.get(options, function (res) {
var bufferHelper = new BufferHelper();
res.on('data', function (chunk) {
bufferHelper.concat(chunk);
});
res.on('end', function () {
let result = iconv.decode(bufferHelper.toBuffer(), 'GBK'); //这里可以使用正则表达式对网页进行解析
//上面代码得到的html网页源代码
console.log(result) // 打印出来就不会显示乱码了
const $ = cheerio.load(result)
//上面代码得到的是Dom树,方便用jQuery进行解析
});
})
http.get用法
Jquery使用案例
利用以上写法,基本遇到所有页面都可以正确地进行解码了,希望大家保存好这段代码,在利用Node.js爬取页面的时候,注意使用。