首先提一下request的两个对象:.content和.text
两者的区别是什么,究竟怎么用这两个对象?
首先来看个例子:
import requests
response = requests.get('https://www.baidu.com')
response.encoding = 'utf-8'
re_text = response.text
re_content = response.content
print(type(re_text))
print(type(re_content))
print(re_text)
print(re_content)
结果:(我把内容粘贴记事本里比对)
可以看到一个是str(字符串),一个是bytes(字节字符串)。
两者区别在于,content中间存的是字节码,会发现content前面存在b’这样的标志,这是字节字符串的标志
而text中存的是Beautifulsoup根据猜测的编码方式将content内容编码成字符串。
运用:
.text是现成的字符串,.content需要编码,但是.text不是所有时候显示都正常,这时需要用.content进行手动编码。
上面就提到了字节字符串,TA是什么?跟字符串的区别?
来看例子。
b'Blackspace' # 字节字符串
'Blackspace' # 字符串
区别:
字符串是字符序列,它是一种抽象的概念,不能直接存储在硬盘;字节字符串是字节序列,它可以直接存储在硬盘。它们之间的映射被称为编码/解码。在Python中,程序中的文本都用字符串表示。
运用:
写入文件时,需要把utf-8字符串编码成字节序列;读取文件时,需要把字节序列解码成utf-8字符串;
(看到这里就应该懂了吧,request的content对象是字节字符串,想要用的话需要用decode解码为字符串供自己使用)
举例:
>>> 'Blackspace'.encode('utf-8') # 编码
b'Blackspace'
>>> b'Blackspace'.decode('utf-8') # 解码
'Blackspace'
Ref:
https://stackoverflow.com/questions/6224052/what-is-the-difference-between-a-string-and-a-byte-string/6224384#6224384