night119110 发表于 2018-8-11 02:13:36

在爬取网页的时候decode与encode与encoding的差别,傻傻分不清楚

本帖最后由 night119110 于 2018-8-11 20:37 编辑

先贴代码,疑问在代码之后

fishurl='https://ilovefishc.com/'

#代码一
import requests

response=requests.get(fishurl)
response.encoding='utf-8'
html=response.text
print(html)

'''
#代码二
import urllib.request

response = urllib.request.urlopen(fishurl)
html = response.read().decode('utf-8')
print(html)

'''

疑问
1.代码一中导入的requests库,使用decode与encode都会出现乱码,只有使用encoding才会正常显示这是为什么?

2.encoding的作用是什么,和encode有什么区别,还是说在requests库中才会用encoding?

3.代码二中导入的urllib.request库,代码是按照小甲鱼视频中的代码照着打的,可以正常显示,如果换成其他直接显示字节不能被如何如何

下面是关于疑问3在网上查的解释

字符串在Python内部的表示是unicode编码,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。

decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode(‘gb2312’),表示将gb2312编码的字符串str1转换成unicode编码。

encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode(‘utf-8’),表示将unicode编码的字符串str2转换成utf-8编码。

decode中写的就是想抓取的网页的编码,encode即自己想设置的编码

看了这个解释,个人一点点理解,如果爬取的网页不进行解码操作,很有可能出现乱码,只有将原网页利用decode转换成unicode,因为python默认是unicode,所以才会正常显示,不知道这样理解是不是正确的。。。

如果在疑问3上的理解是正确的话,那么就有了1和2的疑问,为什么不是用decode进行转换而是用encoding?

请各位大神指点

凌九霄 发表于 2018-8-11 09:29:18

fishurl='https://ilovefishc.com/'

#代码一
import requests

response=requests.get(fishurl)
response.encoding='utf-8'
html = response.text

print(html)

xpc948888351 发表于 2018-8-11 09:31:45

https://fishc.com.cn/thread-56452-1-1.html
这个帖子说的很详细,Python编码问题的解决方案总结

故梦L 发表于 2018-8-11 09:36:32

encoding是requests库的用法,设置网页的编码,response.encoding=response.apparent_encoding,编码不对就得不到你想要的网页源码

night119110 发表于 2018-8-11 20:40:49

凌九霄 发表于 2018-8-11 09:29


谢谢指正,本来源代码写的没问题的,只是想打印出来改的想当然了,没有运行就发上来了

night119110 发表于 2018-8-11 20:43:52

xpc948888351 发表于 2018-8-11 09:31
https://fishc.com.cn/thread-56452-1-1.html
这个帖子说的很详细,Python编码问题的解决方案总结

谢谢,帖子前面的和我的疑问3理解的差不多,最后发现encoding还可以这样用,我是不是可以这样理解,encoding='utf-8'相当于用utf-8编码方式读取所获取的网页源代码?

night119110 发表于 2018-8-11 20:53:21

故梦L 发表于 2018-8-11 09:36
encoding是requests库的用法,设置网页的编码,response.encoding=response.apparent_encoding,编码不对就 ...

谢谢,我又多了两个疑问,那encoding='utf-8'是不是可以理解为用utf-8编码方式读取所获取的网页源代码?
而导入urllib.request的时候利用read().decode('utf-8')可以理解为将utf-8编码的网页源代码转化成str来读取?

xpc948888351 发表于 2018-8-12 17:21:42

night119110 发表于 2018-8-11 20:43
谢谢,帖子前面的和我的疑问3理解的差不多,最后发现encoding还可以这样用,我是不是可以这样理解,encod ...

对的,‘utf-8’属于Unicode的一种形式
页: [1]
查看完整版本: 在爬取网页的时候decode与encode与encoding的差别,傻傻分不清楚