當前位置:
首頁 > 知識 > 淺析requests庫響應對象的text和content屬性

淺析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

淺析requests庫響應對象的text和content屬性

import requests
url = "https://www.cnblogs.com/huwt/"
res = requests.get(url, timeout = 6)
print(res.text)

淺析requests庫響應對象的text和content屬性

(只截取到<title>標籤)

淺析requests庫響應對象的text和content屬性

輸出本博客的響應對象的 content

淺析requests庫響應對象的text和content屬性

import requests
url = "https://www.cnblogs.com/huwt/"
res = requests.get(url, timeout = 6)
print(res.content)

淺析requests庫響應對象的text和content屬性

(只截取到<title>標籤)

淺析requests庫響應對象的text和content屬性

通過<title>標籤我們可以看出 res.text 直接輸出了漢字,而 res.content 好像是以十六進位的形式來表示漢字

為了讓進一步了解text 和 content 我們來看看它們的類型:

淺析requests庫響應對象的text和content屬性

import requests
url = "https://www.cnblogs.com/huwt/"
res = requests.get(url, timeout = 6)
print(type(res.text))
print(type(res.content))

淺析requests庫響應對象的text和content屬性

淺析requests庫響應對象的text和content屬性

我們可以看到res.text是字元串類型,而res.content是二進位類型

為了進一步驗證我們使用bytes類型的decode()方法對content進行『utf-8』編碼再顯示

淺析requests庫響應對象的text和content屬性

import requests
url = "https://www.cnblogs.com/huwt/"
res = requests.get(url, timeout = 6)
print(res.content.decode("utf-8"))

淺析requests庫響應對象的text和content屬性

淺析requests庫響應對象的text和content屬性

發現和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:程序員小新人學習 |