一、基本介紹
1,什麼是 Requests 庫?
(1) Requests 是用 python 語言基於 urllib 編寫的,采用的是 Apache2 Licensed 開源協議的 HTTP 庫。 (2) Requests 使用起來比 urllib 簡潔很多,可以說是目前 Python 實現的最簡單易用的 HTTP 庫。
2,Requests 庫功能特性
- Keep-Alive & 連接池
- 國際化域名和 URL
- 帶持久 Cookie 的會話
- 浏覽器式的 SSL 認證
- 自動內容解碼
- 基本/摘要式的身份認證
- 優雅的 key/value Cookie
- 自動解壓
- Unicode 響應體
- HTTP(S) 代理支持
- 文件分塊上傳
- 流下載
- 連接超時
- 分塊請求
- 支持 .netrc
3,安裝 Requests 庫
(1)由於 Requests 是第三方庫,所以使用前需要在終端中執行如下命令通過 pip 安裝:
pip install requests
(2)由於我的 Mac 電腦又裝了最新的 Python 3.7 版本(別名 python3),其自帶了 pip,所以執行如下命令安裝:
python3 -m pip install requests
二、基本用法
1,發送請求
Requests 為我們提供了各種請求方式:
import requests
requests.get('https://api.github.com/events')
requests.post("http://httpbin.org/post")
requests.put("http://httpbin.org/put")
requests.delete("http://httpbin.org/delete")
requests.head("http://httpbin.org/get")
requests.options("http://httpbin.org/get")
2,傳遞參數
(1)如果需要傳遞參數的話,我們可以直接將參數拼接在 URL 後面:
requests.get('http://httpbin.org/get?name=hangge.com&age=100')
(2)也可以使用 params 關鍵字傳遞一個字典進來作為參數(參數最終同樣會自動拼接到 URL 後面):
import requests
data = {
"name": "hangge.com",
"age": 100
}
response = requests.post('http://httpbin.org/post', params=data)
print(response.text)
(3)如果使用 data 關鍵字傳遞一個字典進來作為參數,則會以表單的形式傳遞參數(參數不會拼接到 URL 後面):
import requests
data = {
"name": "hangge.com",
"age": 100
}
response = requests.post('http://httpbin.org/post', data=data)
print(response.text)
(4)有時我們想要發送的數據並不需要以表單形式提交。比如傳遞一個 string 類型的 JSON 串,可以使用 json 參數來傳遞:
import requests
data = {
"name": "hangge.com",
"age": 100
}
response = requests.post('http://httpbin.org/post', json=data)
print(response.text)
三、響應結果
1,獲取響應內容
(1)當使用 Requests 發起網絡請求時,會返回一個 Response 對象,我們可以通過它來獲取響應內容:
import requests
response = requests.get("https://www.baidu.com")
print("\n--- type(response) ---\n", type(response))
print("\n--- response.status_code ---\n", response.status_code) #響應狀態碼
print("\n--- response.cookies ---\n", response.cookies) #Cookie
print("\n--- type(response.text) ---\n", type(response.text))
print("\n--- response.text ---\n", response.text) #響應文本內容
print("\n--- response.content ---\n", response.content)
(2)很多情況下如果直接輸出 response.text 會出現亂碼的問題(見上圖),要解決這個問題有兩種辦法:
- 一是使用 response.content 獲取二進制響應內容,然後通過 decode() 轉換為 utf-8。
import requests
response = requests.get("https://www.baidu.com")
print(response.content.decode("utf-8"))
- 二是可以使用 response.encoding 屬性來指定使用的響應編碼:
import requests
response = requests.get("https://www.baidu.com")
response.encoding="utf-8"
print(response.text)
無論上面那種方式,可以看到亂碼問題都解決了:
2,JSON 響應內容
(1)如果請求返回的是 JSON 格式的數據,可以使用 Requests 內置的 JSON 解碼器,它可以幫助我們處理 JSON 數據:
import requests
response = requests.get('http://httpbin.org/get?name=hangge.com&age=100')
json = response.json()
print(json)
print(json['args']['name'])
(2)當然我們也可以使用 json.loads() 方法手動將 json 字符串轉換成 dict 字典,下面代碼的效果同上面是一樣的:
import requests
import json
response = requests.get("http://httpbin.org/get?name=hangge.com&age=100")
json = json.loads(response.text)
print(json)
print(json['args']['name'])