node做网页爬虫时遇到的html entites对象造成乱码
就是文字内容是这种货:
��һҳ
尝试用iconv-lite模块的decode去转码,但是失败了。
这种叫html entities,可以借助一些模块来转换,比如,html-entities github。
html entities是什么请参照如下网址:
http://www.w3school.com.cn/html/html_entities.asp
html-entities的使用方法如下
var entities = require('html-entities').xmlentities;entities = new entities();var str = '��һҳ';console.log(entities.decode(str));
在爬虫的请求上也要调整:
1 var headers = { 2 'user-agent': 'mozilla/5.0 (macintosh; intel mac os x 10_10_1) applewebkit/537.36 (khtml, like gecko) chrome/39.0.2171.65 safari/537.36'3 }
加上简单的伪装
使用node爬的话,应该会用cheerio,在接受request返回的网页内容时,还是经过iconv的转换,再用cheerio
1 var html = iconv.decode(body, 'gbk')2 var $ = cheerio.load(html, {decodeentities: false})
如果你不知道抓取的网页的编码的话,请使用:
res.headers['content-type']
根据返回的编码格式进行处理即可
关于网页内容转码和乱码的深层分析可以阅读如下博文:
http://www.dewen.io/q/13755
http://www.99css.com/nodejs-request-chinese-encoding/
这个帅哥的分析也很有趣
http://blog.vichamp.com/program/2015/07/04/common-messy-code/