使用cheerio爬数据兼容gbk和utf8

  使用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

使用cheerio爬数据兼容gbk和utf8的相关文章

Python 爬起数据时 'gbk' codec can't encode character '\xa0' 的问题

1.被这个问题折腾了一上午终于解决了,再网上看到有用  string.replace(u'\xa0',u' ') 替换成空格的,方法试了没用. 后来发现 要在open的时候加utf-8才解决问题. 以为就这样万事大吉了,运行又出现新问题了,爬去的内容是乱码,而源码是正常的,这不是怪了嘛,想想肯定是页面没用utf-8 把utf-8 加上之后,问题完美解决 Python 爬起数据时 'gbk' codec can't encode character '\xa0' 的问题

字符集GBK升级UTF8

在生产环境中,数据库字符集因为各种原因需要升级,比如为了支持汉字,从latin1字符集升级到GBK,后面为了支持多个语言文字,需要将GBK升级到UTF8等.迁移过程网上有很多,我今天主要想讲下字符集转换后,可能对业务产生的影响,我以GBK转换到UTF8为例说明.主要有两点: 汉字在GBK编码中占2个字节,在UTF8编码中占3个字节,而mysql的索引要求总长度不超过767个字节,因此索引字符数会被缩短(383->255),特别的,对于唯一索引,要求索引字段长度小于256个字符. 编码转换后,导致

理解并解决GBK转UTF-8奇数中文乱码(转)

最近在做一个反馈功能,把数据反馈到对方公司网站,我公司是GBK编码,对方公司是UTF-8编码.因此,我需要将GBK编码数据转换成UTF-8编码数据,这样对方网站才不会乱码.最简单的方法是将HttpClient的ContentCharset设置为utf-8:如果ContentCharset是gbk并且又不想设置为utf-8,那么就需要将数据转换成UTF-8编码再发到对方网站. 问题出现:GBK转UTF-8时,奇数个中文会乱码,偶数个中文不会乱码.三个中文 Java代码   public stati

告别乱码,针对GBK、UTF-8两种编码的智能URL解码器的java实现(转)

效果图 字符 字符是早于计算机而存在,从人类有文明那时起,人们就用一个个符号代表世间万象.如ABC,如“一.二.三”. 字符集 字符集是所有字符的集合. XXX字符集 给字符集中的每一个字符套上一个序号后的字符集.常见的XXX字符集有ASCLL字符集.Unicode字符集等等,不同种字符集为每个字符编的序号不同,包含的字符数量也不同. GBK.UTF-8 GBK.UTF-8是一种编码编码格式.当然,你也可以说unicode是一种编码格式,因为它的的确确为每个字符编了一个码,没错,可是unicod

GBK UTF-16 UTF-8 编码表

GBK   UTF-16 UTF-8 ================== D2BB  4E00  E4 B8 80  一 B6A1  4E01  E4 B8 81  丁 C6DF  4E03  E4 B8 83  七 CDF2  4E07  E4 B8 87  万 D5C9  4E08  E4 B8 88  丈 C8FD  4E09  E4 B8 89  三 C9CF  4E0A  E4 B8 8A  上 CFC2  4E0B  E4 B8 8B  下 D8A2  4E0C  E4 B8 8C

彻底搞懂编码 GBK 和 UTF8

常用编码格式一览 首先来看一下常用的编码有哪些,截图自Notepad++.其中ANSI在中国大陆即为GBK(以前是GB2312),最常用的是 GBK 和 UTF8无BOM 编码格式.后面三个都是有BOM头的文本格式,UCS-2即为人们常说的Unicode编码,又分为大端.小端. 所谓BOM头(Byte Order Mark)就是文本文件中开始的几个并不表示任何字符的字节,用二进制编辑器(如bz.exe)就能看到了. UTF8的BOM头为 0xEF 0xBB 0xBF Unicode大端模式为 0

字符编码GB2312、GBK、UTF-8的区别

本文来自:javaeye网站 UTF8是国际编码,它的通用性比较好,外国人也可以浏览论坛 GBK是国家编码,通用性比UTF8差,不过UTF8占用的数据库比GBK大~ 提示:如果您的网站客户群体主要是面向国内用户的,建议使用GBK版本,因为它可以节省空间,及相对utf-8版本来讲稳定一些.对于DZ论坛来说,很多插件都只支持GBK的,如果需要装较多插件的论坛还是用GBK比较好,而对装较少插件且有特殊用户群的论坛用UTF8比较好. GBK版本与UTF-8版本功能是一样的.只不过编码方式不同. GBK的

网络编码 GB2312、GBK与UTF-8的区别

GB2312.GBK与UTF-8的区别 这是一个异常经典的问题,有无数的新手站长每天都在百度这个问题,而我,作为一个“伪老手”站长,在明白这个这个问题的基础上,有必要详细的解答一下. 首先,我们要明白,GB2312.GBK和UTF-8都是一种字符编码,除此之外,还有好多字符编码.只是对于我们中国人的网站来说,用这三种编码 比较多.简单的说一下,为什么要用编码,在计算机内,储存文本信息用ASC II码,每一个字符对应着唯一的ASCII码.最初计算机是由美国发明的,他们也用的是键盘和上面的字母,所以

PHP字符编码ASCII 、GB2312、GBK、UTF-8解释

变量命名规则:1.  变量名区分大小写(case-sensitive) .2.  必须字母或下划线开头.变量名可由 字母.数字.下划线组成.  看 到这里可能,很多人纳闷了~.那为啥  $我是变量    这样的中文也能做变量名呢? 在PHP里,中文的确是可以做变量名的(能用是能用但千万别项目上用....) . 因为这里的字母是指: a-z   A-Z  和  扩展ASCII 字符里从 127 到 255  ,16进制表示为:0x7f-0xff   . 那意思就是ASCII字符里从127到255