为了账号安全,请及时绑定邮箱和手机立即绑定

使用requests库抓取页面的时候的编码问题

使用requests库抓取页面的时候的编码问题

当年话下 2019-04-08 11:17:09
我在开始加了以下的代码#-*-coding:utf-8-*-importsysreload(sys)sys.setdefaultencoding('utf-8')但是用printrequests.Session().get(url,data=data).text结果中输出了长这个样子的乱码°æȨËùÓÐ2013¶«ÄÏ´óѧÍøÂçÓëÐÅÏ¢ÖÐÐÄ然后试着查看了一下上面文本的格式printtype(requests.Session().get(url,data=data).text)输出的结果就是unicode,后来我又看了页面的head头中写了页面编码是gb2312,我后面又把代码改成了printrequests.Session().get(url,data=data).text.encode('gb2312')结果就出现了下面的异常UnicodeDecodeError:'gb2312'codeccan'tdecodebytesinposition227-228:illegalmultibytesequence1把代码改成printrequests.Session().get(url,data=data).text.encode('gb2312','ignore')依然是乱码真的是没辙了,希望各位大大指点一下
查看完整描述

2 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

首先,sys.setdefaultencodingisevil。
其次,不会用Requests就去看文档,不要乱来。
如果Requests检测不到正确的编码,那么你告诉它正确的是什么:
response.encoding='gbk'
printresponse.text
原始内容在response.content里,bytes,自己想怎么处理就怎么处理。
单个请求完全没必要用Session。直接requests.get(xxx)就可以了。
最后,弄不明白怎么处理编码错误的字符串就仔细想想,或者用Python3.x,不要散弹枪编程。
以下是Python3。Python2在那个字符串前加个u告诉它是unicode也一样。
>>>'°æȨËùÓÐ2013¶«ÄÏ´óѧÍøÂçÓëÐÅÏ¢ÖÐÐÄ'.encode('latin1').decode('gbk')
'版权所有2013东南大学网络与信息中心'
                            
查看完整回答
反对 回复 2019-04-08
?
MMMHUHU

TA贡献1834条经验 获得超8个赞

resp=requests.get(url)
print(resp.text.encode(resp.encoding).decode('utf-8'))
                            
查看完整回答
反对 回复 2019-04-08
  • 2 回答
  • 0 关注
  • 352 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信