Python3 报 'gb2312' codec can't decode byte 0x89 in position 42485: illegal multibyte sequence 解决方法

前言

关于字符编码问题在Py2中经常碰到,但是Py3在字符编码这块做了不少的改进,但是有些特殊情况下还是会出现问题。今天碰到了一个神奇的字符问题...

博主之前写过一个网站的爬虫,去定时爬某个站点的评论内容,已经稳定运行两个月,每次抓取完成后会推送一条微信消息到手机上,但是这两周以来一直没有推送,觉得很奇怪,难道网站内容改版了?

分析

由于脚本跑在美国VPS服务器上,先使用浏览器打开网站查看网页源代码,发现网站结构并没有变,难道是登录的session失效了?因为之前出现过session失效的情况,那是因为两次抓取中间间隔时间太长导致的,后来调整到每一个小时都去请求一个,以保证session存活。按照道理来说不应该出现session失效的问题,因为脚本自动运行的时候会在每天0点10分的时候进行签到操作,签到完成也会推送微信消息,这个签到消息一直都是正常的,只有抓取出现了问题。

看来只能把脚本拖下来调试了,本地运行脚本,提示错误

 'gb2312' codec can't decode byte 0x89 in position 42485: illegal multibyte sequence
神奇了,这个问题之前都没有出现过,再次打开网站查看源代码发现编码并没有变,确定是gb2312没有问题的,神奇了,既然页面上编码是正确的,为何会报错呢?

根据之前做过微信相关应用的经验想到会不会是因为一些字符导致的解码失败,比如一些神奇的表情或者泰国文字,如果是这样那就简单了,使用一种范围更大的字符编码进行解码应该就可以了。

根据谷歌结果得知使用gb18030即可,修改代码后成功解码无报错

jifen_data = s.get(url=url_jifen, headers=headers, cookies=cookies_pc, timeout=10).content.decode('gb18030')

参考

http://blog.csdn.net/junkichan/article/details/51913845


如果您觉得文章有帮助到您,请到 https://www.92ez.com/index.php?action=show&id=23403 进行打赏/捐赠,谢谢!
如果您觉得文章有帮助到您,请 使劲戳这里 进行打赏/捐赠,谢谢!
本文链接:https://www.92ez.com/?action=show&id=23463
提示:技术文章有一定的时效性,请先确认是否适用你当前的系统环境。

上一篇: 360P2路由器改Flash刷老毛子教程
下一篇: 一个电信劫持案例的简要分析

访客评论
目前还没有人评论,您发表点看法?
发表评论

评论内容 (必填):