只有我有 错误编码/乱码 问题咩?

来源: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回答

NavCat

2018-10-04

首先要明白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不难的。

再回答你的问题:

  1. 跟你操作系统的编码是有关系的。encode是进行编码,decode是进行解码。一般情况下decode成utf-8的编码是能拿到结果的,但要多尝试。

  2. 用网页中指定的charset进行转码试试。譬如这种:<meta charset="utf-8">表示网友是utf-8的编码之类的。

0
1
统爷
非常感谢!
2018-10-06
共1条回复

手把手教你把Python应用到实际开发 不再空谈语法

学会项目开发思路,掌握Python高阶用法。

1341 学习 · 244 问题

查看课程