淺析requests庫響應對象的text和content屬性
在做爬蟲時請求網頁的requests庫是必不可少的,我們常常會用到 res = resquests.get(url) 方法,在獲取網頁的html代碼時常常使用res的text屬性: html = res.text,在下載圖片或文件時常常使用res的content屬性:
1
2
3
with open(filename, "wb") as fp:
fp.write(res.content)
下面我們來看看 "text" 和 "content" 的不同之處:
輸出本博客的響應對象的 text
import requests
url = "https://www.cnblogs.com/huwt/"
res = requests.get(url, timeout = 6)
print(res.text)
(只截取到<title>標籤)
輸出本博客的響應對象的 content
import requests
url = "https://www.cnblogs.com/huwt/"
res = requests.get(url, timeout = 6)
print(res.content)
(只截取到<title>標籤)
通過<title>標籤我們可以看出 res.text 直接輸出了漢字,而 res.content 好像是以十六進位的形式來表示漢字
為了讓進一步了解text 和 content 我們來看看它們的類型:
import requests
url = "https://www.cnblogs.com/huwt/"
res = requests.get(url, timeout = 6)
print(type(res.text))
print(type(res.content))
我們可以看到res.text是字元串類型,而res.content是二進位類型
為了進一步驗證我們使用bytes類型的decode()方法對content進行『utf-8』編碼再顯示
import requests
url = "https://www.cnblogs.com/huwt/"
res = requests.get(url, timeout = 6)
print(res.content.decode("utf-8"))
發現和res.text顯示的內容完全一樣
因此我們可以得出結論:
resp.text返回的是Unicode型的數據。
resp.content返回的是bytes型也就是二進位的數據。、
獲取文本一般使用res.text, 獲取圖片或文件一般使用res.conten
再做幾點補充:
text是content經過編碼之後的字元串,那編碼方式是什麼呢?
在返回text時requests會基於 HTTP 頭部對響應的編碼作出有根據的推測,但不一定準確,有可能出現亂碼,
而我們可以手動指定一種編碼方式:res.encoding = "需要的編碼方式"
或讓requests根據body進行猜測:res.encoding = res.apparent_encoding
作者:路漫漫我不畏
原文:https://www.cnblogs.com/huwt/p/10368803.html
※核心交易鏈路架構設計與演進
※使用LMAX/Disruptor構建高擴展性的交易引擎的經驗分享
TAG:程序員小新人學習 |