使用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
时间: 2024-11-05 21:46:21