有些網站仍在使用GBK編碼,而JS內部字符編碼使用Unicode來表示,node編寫的爬蟲須要作的轉換是GBK->Unicode->utf-8,關於三者關係參考http://www.cnblogs.com/cy163/archive/2007/05/31/766886.html。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模塊來處理。node
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模塊來處理此問題fetch
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()); });
此時打印出了頁面標題。網站