版权声明:本文为博主原创文章,转载请注明出处,谢谢 https://blog.csdn.net/supercooly/article/details/51209143
一、爬虫实例
请求的网页显示的是gb2312编码,但据资料显示,gb2312只能显示简体中文。所以用该编码接收响应时,在转为utf-8编码会报异常,设置为忽略,将丢失繁体字符。
浏览器在解析gb2312编码时,会默认映射到gbk编码,gbk编码时gb2312的超集,包含其所有字符,也包括繁体字符,所以繁体字在浏览器上可以正常显示。
所以,在爬虫中,当见到gb2312时,设置编码为gbk为好。
resp = requests.get(URL, params=params)
resp.encoding = "gb2312"
html = resp.text
# html = html.encode(encoding="gbk", errors="ignore").decode("gbk", errors="ignore")
html = html.encode(encoding="utf-8", errors="ignore").decode("utf-8", errors="ignore")
print(html)
将响应的编码设置为gbk,即使网页使用的是gb2312编码,这样繁体字就不会丢失了。
resp = requests.get(URL, params=params)
resp.encoding = "gbk"
# print(resp.content)
html = resp.text
# print(html)
html = html.encode(encoding="utf-8", errors="ignore").decode("utf-8", errors="ignore")
print(html)
二、Python3 编码
在Python3中取消了unicode类型,字符串类型直接使用了unicode编码,而不是使用python2中的字节码存储
Python2
默认ASCII字符串(字节码) —decode—>不行的,不支持中文。
字符串(unicode)—encode—> 转码后的字节码 —decode—> 转码后的字符串
如果Python2要想想Python3一样的话,那么就需要在声明变量的时候,将 字符串前加上“u”,以显示的使用unicode类型
默认编码:ASCII
>>> s = "中文字符串" # ASCII字符串
>>> s
'\xd6\xd0\xce\xc4\xd7\xd6\xb7\xfb\xb4\xae'
>>> u = u'中文'
>>> s1 = u.encode('gb2312') # 以gb2312编码对unicode对像进行编码
>>> s1
'\xd6\xd0\xce\xc4'
>>> u1 = s1.decode('gb2312') # 以gb2312编码对unicode对像进行解码
>>> u1
u'\u4e2d\u6587'
>>> print u1
中文
Python3
默认字符串(unicode)—encode—> 转码后的字节码 —decode—> 转码后的字符串
>>> s = "中文" #默认是UTF-8
>>> gbks = s.encode("gbk") #以gbk重新编码,bytes类型
>>> gbks = gbks.decode("gbk")#以gbk解码,字符串类型
>>> gbks
'中文'
>>>