标签:
有些网站仍在使用GBK编码,而JS内部字符编码使用Unicode来表示,node编写的爬虫需要做的转换是GBK->Unicode->utf-8,关于三者关系参考http://www.cnblogs.com/cy163/archive/2007/05/31/766886.html。
var request = require(‘request‘); var cheerio = require(‘cheerio‘); request(‘http://www.taobao.com/‘,function(err,res){ if(err) throw err; var $ = cheerio.load(res.body.toString()); console.log($(‘head title‘).text()); });
上例输出空白,因为某宝网就是使用GBK编码,而node把GBK的页面内容当作Unicode编码,来UTF-8来处理。可以使用iconv-lite模块来处理。
var request = require(‘request‘); var cheerio = require(‘cheerio‘); var iconv = require(‘iconv‘); request({ url:‘http://www.taobao.com‘, encoding:null//设置抓取页面时不要对数据做任何转换 },function(err,res,body){ if(err) throw err; body = iconv.decode(body.‘gbk‘);//转换gbk编码的页面内容 var $ = cheerio.load(body); console.log($(‘head title‘).text()); });
也可以使用gbk模块来处理此问题
var cheerio = require(‘cheerio‘); var gbk= require(‘gbk‘); gbk.fetch(‘http://www.taobao.com/‘,‘utf-8‘).to(‘string‘,function(err,res,body){ if(err) throw err; var $ = cheerio.load(body); console.log($(‘head title‘).text()); });
此时输出了页面标题。
标签:
原文地址:http://www.cnblogs.com/kisslight/p/5006086.html