鱼C论坛

 找回密码
 立即注册
查看: 3187|回复: 7

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

[复制链接]
发表于 2018-8-11 02:13:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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:31:45
https://fishc.com.cn/thread-56452-1-1.html
这个帖子说的很详细,Python编码问题的解决方案总结
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-8-11 09:29:18 | 显示全部楼层
  1. fishurl='https://ilovefishc.com/'

  2. #代码一
  3. import requests

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

  7. print(html)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-11 09:31:45 | 显示全部楼层    本楼为最佳答案   
https://fishc.com.cn/thread-56452-1-1.html
这个帖子说的很详细,Python编码问题的解决方案总结
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-11 09:36:32 From FishC Mobile | 显示全部楼层
encoding是requests库的用法,设置网页的编码,response.encoding=response.apparent_encoding,编码不对就得不到你想要的网页源码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-11 20:40:49 | 显示全部楼层

谢谢指正,本来源代码写的没问题的,只是想打印出来改的想当然了,没有运行就发上来了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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编码方式读取所获取的网页源代码?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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来读取?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-12 17:21:42 | 显示全部楼层
night119110 发表于 2018-8-11 20:43
谢谢,帖子前面的和我的疑问3理解的差不多,最后发现encoding还可以这样用,我是不是可以这样理解,encod ...

对的,‘utf-8’属于Unicode的一种形式
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-22 01:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表