关于爬虫乱码有很多群友的各式各样的问题,下边简单总结下关于网络爬虫的乱码处理。注意,这里不仅是中文乱码,还包括一些如日文、韩文 、俄文、藏文之类的乱码处理,因为他们的解决方式 是一致的,故在此统一说明。
网络爬虫,有两种选择,一是选择nutch、hetriex,二是自写爬虫,两者在处理乱码时,原理是一致的,但前者处理乱码时,要看懂源码后进行修改才可以,所以要废劲一些;而后者更自由方便,可以在编码处理时进行处理。这也是很多人在用框架写爬虫会出现各种各样的乱码时,无从下手的原因了,像比较成熟的nutch在处理乱码时也是比较简单的,所以依然会出现乱码,所以需要二次开发才能真正解决乱码问题。
1、网络爬虫出现乱码的原因
源网页编码和爬取下来后的编码转换不一致。如源网页为gbk编码的字节流,而我们抓取下后程序直接使用utf-8进行编码并输出到存储文件中,这必然会引起乱码,即当源网页编码和抓取下来后程序直接使用处理编码一致时,则不会出现乱码,此时再进行统一的字符编码也就不会出现乱码了。注意区分源网编码A、程序直接使用的编码B、统一转换字符的编码C。
A、就是web page的服务器端编码
B、抓取到的数据,原始情况为字节数组,它是由A来编码的,只有B=A时,才可以保证不出现乱码,否则当字符集不兼容时,总是会出现乱码,此步骤往往用于测试。
C、统一转码是指得到网页的原始编码A后,再进行的统一编码,主要是为了将各个网页的数据统一成一类编码,往往选择字符集较大的utf-8为宜。
每个网页都有自己的编码,像gbk、ut