编解码及爬虫获取数据
计算机只能识别二进制语言,网络上传输为了方便迅速,数据的类型为字节类型【bytes类型】
python不好操作字节类型的数据,因此要把它变成字符串类型进行操作【string类型】
后端:字符串类型 > 二进制字符串类型【方便网络上数据的传输】编码 encode
了解如何编码:
字符串类型数据.encode()
默认情况下是utf-8用gbk编码:
字符串类型数据.encode(encoding='gbk')
爬虫:二进制字符串类型 > 字符串类型【方便我们python操作数据】解码 decode
bytes_data.decode()
python如何将响应解码成字符串类型数据呢?
(1) 获取响应:response_ = requests.get(url) # 变量名自己取就好了
- 这里的 response_是一个对象,不是字节类型数据,不能直接decode
(2) 得到数据并解码:用什么方式编码就要用什么方式解码
常见编码格式:utf-8, gbk,ascii...
计算机刚发明时编码格式里面只有英文,但是后来不同国家运用计算机后也有不同的编码需求,就出现了中文码(gbk),日本码,韩国码... 这样如果一个网页中有不同的编码就会有冲突,因此后来就发展出了万国码Unicode编码 其中比较常用的为utf-8
网页中的编码格式可以在 Headers 中找
charset
text
方法:res_ = response_.text 【一般获取文本数据时】- 虽然是一个方法,但是不用括号
- res_ 是字符串类型的数据
- text方法:从response对象得到字节类型数据后,自动将字节类型数据解码成字符串类型的数据
- 默认情况下,text 会根据自己判断的解码方式去解码,但它可能会判断错误,导致跟网站编码方式不同,会出现乱码。大部分情况下没问题。
- 如果你想知道text自动识别的编解码类型是什么,可以通过 response_.encoding 查询
- 你也可以指定它的编码格式,在使用text方法之前改变编码格式,例如
response_.encoding='utf-8'
content
方法:res_ = response.content 【一般获取多媒体数据时】- 从response对象中得到字节类型数据,比如图片,音乐等二进制数据没法用字符串形式体现,不能用text,只能用content
- res_是字节类型的数据
- 想获取字符串数据,可以和decode一起用,将字节数据转换成字符串数据
data_ = res_.decode()
,这里的data_就是字符串数据类型。