只有我有 错误编码/乱码 问题咩?
来源:2-9 爬取京东网的数据

统爷
2018-10-04
老师您好,我是海外的用户,不知道是不是你们本身用的就是中文windows的原因,还是您的开发工具预先设置了中文编码等问题的解决方案,无论这个视频还是上一个当当视频里,我的编码都出现了很多类似UnicodeEncodeError: ‘gbk’ codec can’t encode character ‘\xe7’ 的错误提示,这是不是因为我的配置缺乏一些东亚字体配置的相关设置?
我注意到您的源码里使用的是
html_data = requests.get(url).text
但是我摸索了一些海内外的编码解决的帖子,最后发现如果使用这样的方式
html_data = requests.get(url).content.decode('utf-8')
就可以顺利解决并且显示中文,不过我理解得不是特别透彻,这里的encode和decode跟HTML网页本身在head里的编码设置有关么?还是有什么通用的解决中文网站爬虫乱码的问题呢?您经验多,请指教,谢谢!
还有一个问题就是,以下代码以前我也做过一些简单爬虫,那时使用过,但是这次不知道为什么在当当可以(他们html head里编码是gb2312),但是京东html默认的是utf-8,就没办法正确显示,请指教
import io
import sys
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='gb18030')
谢谢老师
1回答
-
首先要明白utf-8是世界通用的,gb18030、gbk、gb2312是中文的支持,第二,我们使用的是requests库,要多看官方文档。
当我们拿到请求的结果r后,可以查看到请求使用了什么编码r.encoding,也可以通过r.encoding = 'gbk'来改变其编码。
具体文档参考:http://docs.python-requests.org/zh_CN/latest/user/quickstart.html#id3, 要多看几遍,requests不难的。
再回答你的问题:
跟你操作系统的编码是有关系的。encode是进行编码,decode是进行解码。一般情况下decode成utf-8的编码是能拿到结果的,但要多尝试。
用网页中指定的charset进行转码试试。譬如这种:<meta charset="utf-8">表示网友是utf-8的编码之类的。
012018-10-06
相似问题