res.json()方法實際上是使用了json.loads(res.text)將響應文字嘗試以json格式轉為字典。由於該方法存在異常(比如正常情況下返回json格式,500報錯時則會返回非json格式的報錯資訊),建議使用try…except處理,修改如下。# 匯入requests包
import requests
# 1. 組裝請求
url =
""# 這裡只有url,字串格式
# 2. 傳送請求,獲取響應
res = requests.get(url)
# res即返回的響應物件
# 3. 解析響應
(res.json)
# 輸出響應的文字
2、帶引數的get請求import requests
url =
''url_params =
res = requests.get(url, params=url_params)
try:
('響應文字轉為字典'
, res.json())
except
('響應文字'
, res.text)
url只支援ascii(美國標準碼),在實際的傳輸過程中,中文及一些特殊字元需要經過urlencode(url編碼)。如上例中的介面位址會被編碼成:import requests
url =
"/openapi/api?key=ec961279f453459b9248f0aeb6600bbe&info=你好"
# 引數可以寫到url裡
res = requests.get(url=url)
(res.text)
/get?name=%e4%b8%b4%e6%b8%8a&age=18
或者這樣寫`
需要注意的是,requests.get()方法中,引數params後面跟著是乙個字典,requests會自動幫我們把這個引數拼接在介面請求位址中import requests
url =
"/openapi/api"
params =
# 字典格式,單獨提出來,方便引數的新增修改等操作
res = requests.get(url=url, params=params)
(res.text)
3、傳統表單類post請求(x-www-form-urlencoded)
import requests
url =
""data =
# post請求傳送的資料,字典格式
res = requests.post(url=url, data=data)
# 這裡使用post方法,引數和get方法一樣
(res.text)
data引數支援字典格式也支援字串格式,如果是字典格式,requests方法會將其按照預設表單urlencoded格式轉換為字串,如果是字串則不轉化import requests
url =
""data =
''''''
# 多行文字, 字串格式,也可以單行(注意外層有引號,為字串) data = ''
res = requests.post(url=url, data=data)
# data支援字典或字串
(res.text)
如果data以字串格式傳輸需要遵循以下幾點:
必須是嚴格的json格式字串,裡面必須用雙引號,k-v之間必須有逗號,布林值必須是小寫的true/false等等
不能有中文,直接傳字串不會自動編碼
一般來說,建議將data宣告為字典格式(方便資料新增修改),然後再用json.dumps()方法把data轉換為合法的json字串格式
或直接將字典格式的data資料賦給post方法的json引數(會自動將字典格式轉為合法的json文字並新增headers)import requests
import json # 使用到json中的方法,需要提前匯入
url =
""data =
# 字典格式,方便新增
headers =
# 嚴格來說,我們需要在請求頭里宣告我們傳送的格式
res = requests.post(url=url, data=json.dumps(data)
, headers=headers)
# 將字典格式的data變數轉換為合法的json字串傳給post的data引數
(res.text)
5、傳送xml格式的資料import requests
url =
"/openapi/api/v2"
data =
,"inputimage":,
"selfinfo":}
},"userinfo":}
res = requests.post(url=url, json=data)
# json格式的請求,將資料賦給json引數
(res.text)
上例提到xml和json都屬於raw格式的資料,xml和json在python中實際都是不同格式的文字字串。我們將字串傳遞給請求方法的data引數即可原樣傳送,即data引數有以下3重作用:
1)data = {} 或 [(,), (,)]:接受乙個字典或巢狀列**式的資料,會按表單url編碼格式
2)data = 『』:接受乙個字串或bytes二進位制字串,會原樣傳送(需要手動新增請求頭,如果存在中文需要手動編碼)
3)data = open(』…』, 『rb』):接受乙個檔案物件,按binary格式流式上傳。
傳送xml格式的資料只要將xml格式的多行字串傳遞給請求方法的data引數即可,示例如下。
另一種即包括普通輸入框等,也包含乙個或多個檔案上傳框。普通輸入框中的變數值可以已字串格式編碼,而上傳的檔案(如檔案)則不一定能直接轉為字串,要使用二進位制格式。因此要使用多部分的混合格式,筆者稱之為混合表單,對應mime型別為multipart/form-data。在表單中,每個需要上傳的檔案和普通輸入框一樣對應乙個指定的變數。因此同樣可以使用字典格式組裝混合表單的請求資料傳遞給請求方法的files引數即可,示例如下。import requests
url =
'/post'
xml_data =
'''浩浩
18'''
headers =
res = requests.post(url, data=xml_data.encode(
'utf-8'
), headers=headers)
(res.text)
表單資料中的數字要使用字串格式的數字,檔案要以rb二進位制格式開啟傳輸,支援多個變數以及多個檔案。import requests
url =
'/post'
multi_form_data =
res = requests.post(url, files=multi_form_data)
(res.text)
比如有些介面上傳excel檔案時必須宣告檔名和mime型別,如:
7、傳送binary格式資料(單檔案/流式上傳)res = request.post(url, files=
)
這種很少見,了解一下就行。import requests
url =
'/post'
res = requests.post(url, data=
open(,
'rb'))
(res.text)
不同型別的檔案
cpp檔案 cpp是用c 語言編寫的源 檔案的字尾 具體實現 h檔案 h是c語言和c 語言的標頭檔案 函式宣告,巨集定義,函式原型 pde檔案 一共有4種可能,分別為 1 powerdesk encrypted file 2 pathology data exchange file 3 afp pa...
爬蟲(3) Requests庫的5個小例項
1 獲取京東某個商品的資訊 import requests url try r requests.get url r.raise for status print r.text 1000 except print 爬取失敗!2 獲取亞馬遜某個商品的資訊 import requests url r r...
資料庫設計情景之相同型別下的不同型別
已知使用者需要同時購買動物和石頭兩種不同的東西 只是隨便舉個例子,不要去糾結動物和石頭 這種情況一般有兩種設計方式 方式一 animal表 rock表 shop car表 animal id int,name varchar,int,age int rock id int,name varchar,...