python爬虫出现菱形问号乱码的解决方法

Python015

python爬虫出现菱形问号乱码的解决方法,第1张

在windows下使用非idle的其他ide编辑器,会碰到这个问题。对抓取到的网页内容进行先解码再编码即可。

以requests为例:

r = r.content.decode('gbk').encode('utf-8')

出现编码问题时,

1.仔细分析错误的类型。

看是decode(解码)错误还是encode(转码)错误。

2.搞清自己处理的字符是什么类型的。

一般看网页的charset,一般为gbk,gb2312或gb18030.其中包含字符的大小为gb2312 <gbk <gb18030。一般出现‘gbk’ codec can’t decode,是因为

(1)要处理的字符串本身不是gbk编码,但是你却以gbk编码去解码

比如,字符串本身是utf-8的,但是你却用gbk去解码utf-8的字符串,所以结果不用说,则必然出错。

(2)处理的字符的确是gbk的,但是其中夹杂的部分特殊字符,是gbk编码中所没有的

如果有些特殊字符是GB18030中有的,但是是gbk中没有的。

则用gbk去解码,去所不支持的字符,也比如会出错。

所以,此种情况,可以尝试用和当前编码(gbk)所兼容的但所包含字符更多的编码(gb18030)去解码,或许就可以了。

3.然后换用这种的字符编码去编码或解码。

详情链接:https://www.crifan.com/summary_python_unicodedecode_error_possible_reasons_and_solutions/

Python在执行过程中,常常出现不能读取中文路径名,表现为读取的路径是空或者直接报错(WindowsError: [Error 2]);也有时候出现不能正常输出中文字符串,编译器报错为(KeyError),这是编码出现了问题。这个时候在字符串后面添加转码操作即可。

详见源码示例如下

【中文字符串】

[python] view plain copy

print '品牌id'.decode('utf-8')

print '\xe5\x93\x81\xe7\x89\x8cid'.decode('utf-8')

上面两行输出结果是一致的。

【中文路径读取文件】

[python] view plain copy

# 获取当前路径下的文件夹

import numpy as np

from os.path import exists, isdir, basename, join, splitext

from glob import glob

data_path = 'F:\\wfpdm\\My_Proc_Data_ZXTZ\\美国数据库\\ 自相\

关特征\\'.decode('utf-8')

cat_paths = glob(data_path + "*")

cat_paths.sort()

cats = [basename(cat_path) for cat_path in cat_paths]