解决Python的requests中text中文乱码的问题
作者:Dontes_cn
学习Python爬虫时遇到中文乱码问题,发现req.text返回的是unicode,无法再次decode,通过查看网站源码,发现网站使用的是gbk编码,Requests会自动解码来自服务器的内容,但有时推测错误,通过设置r.encoding为gbk,然后对text进行编码,可以正确打印出中文
Python的requests中text中文乱码
今天学习python爬虫是遇到了字符编码的问题
target = 'http://www.biqukan.com/1_1094/5403177.html' req = requests.get(url=target) print req.text
打印出来的中文都是乱码,现在说一下解决方案。
解决方案
首先要明确的是,req.text返回的是unicode,也就是说无法再decode,所以网上那些先decode再encode的方法是没法使用的,这种方法适用的是req.content。
通过查看网站源码,发现网站使用的charset是gbk,Requests 会自动解码来自服务器的内容。
大多数 unicode 字符集都能被无缝地解码。
请求发出后,Requests 会基于 HTTP 头部对响应的编码作出有根据的推测。
当你访问 r.text 之时,Requests 会使用其推测的文本编码。
你可以找出 Requests 使用了什么编码,并且能够使用 r.encoding 属性来改变它,我认为requests对编码做出了错误的判断,所以进行了下面的设置:
req.encoding='gbk'
注意,这里的gbk是因为网页使用的是gbk。
然后再对text进行编码
text = req.text print text.encode('utf-8')
就能正确的打印出中文了
完整的代码
如下:
# coding: UTF-8 import requests if __name__ == '__main__': target = 'http://www.biqukan.com/1_1094/5403177.html' req = requests.get(url=target) req.encoding='gbk' # content = req.content.decode('gbk').encode('utf-8') # print content text = req.text print(isinstance(text, unicode)) print text.encode('utf-8')
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。