requests模塊的返回對象是一個Response對象,可以從這個對象中獲取需要的信息。下面 r 代表Response對象。
【r.text】:文本響應內容。
【r.context】:二進制響應內容。
【r.json()】:JSON響應內容 。
【r.raw】:原始相應內容。
(1)文本響應內容。
例子:
import requests
r = requests.get('https://api.github.com/events')
print(r.text)
運行結果:
對於非文本請求,你也能以字節的方式訪問請求響應體。
(2)二進制響應內容。
對於非文本請求,你也能以字節的方式訪問請求響應體。
例子1:
import requests
r = requests.get('https://api.github.com/events')
print(r.content)
運行結果:
Requests 會自動為你解碼 gzip 和 deflate 傳輸編碼的響應數據。
例子2,以請求返回的二進制數據創建一張圖片。
from PIL import Image
from io import BytesIO
i = Image.open(BytesIO(r.content))
(3)JSON 響應內容。
Requests 中也有一個內置的 JSON 解碼器,助你處理 JSON 數據。
例子:
import requests
r = requests.get('https://github.com/timeline.json')
print(r.json())
運行結果:
如果 JSON 解碼失敗, r.json 就會拋出一個異常。例如,相應內容是 401 (Unauthorized),嘗試訪問 r.json 將會拋出 ValueError: No JSON object could be decoded 異常。
(4)Raw響應內容。
在罕見的情況下,你可能想獲取來自服務器的原始套接字響應,那么你可以訪問 r.raw。 如果你確實想這么干,那請你確保在初始請求中設置了 stream=True。具體你可以這么做。
例子:
import requests
r = requests.get('https://github.com/timeline.json', stream=True)
print(r.raw)
運行結果:
但一般情況下,你應該以下面的模式將文本流保存到文件。
with open(filename, 'wb') as fd:
for chunk in r.iter_content(chunk_size):
fd.write(chunk)
使用 Response.iter_content 將會處理大量你直接使用 Response.raw 不得不處理的。 當流下載時,上面是優先推薦的獲取內容方式。