json和dict
python中的dict類(lèi)型要轉(zhuǎn)換為json格式的數(shù)據(jù)需要用到j(luò)son庫(kù):
import json
<json> = json.dumps(<dict>)
<dict> = json.loads(<json>)
需要注意的是python中并沒(méi)有json類(lèi)型這一說(shuō)法焰轻,通過(guò)json.dumps(<dict>)
轉(zhuǎn)換的字典對(duì)象征峦,最后得到的是一個(gè)字符串對(duì)象,也就是說(shuō)爬橡,在python中json格式的數(shù)據(jù)實(shí)際上就是一個(gè)字符串
>>> j = json.dumps(<dict>)
>>> type(j)
<class 'str'>
雖說(shuō)json格式的數(shù)據(jù)在python中是以字符串的類(lèi)型存在的,但是通過(guò)str(<dict>)
工廠(chǎng)函數(shù)所得到的結(jié)果同json.dumps(<dict>)
方法所得到的結(jié)果是不相同的
>>> d = {'a': 1, 'b': 2}
>>> d_d = {"a": 1, "b": 2}
>>> string = str(d)
>>> string_d = str(d_d)
>>> js = json.dumps(d)
>>> js_d = json.dumps(d_d)
>>> string == string_d
True
>>> js = js_d
True
>>> string == js
False
>>> string
"{'a': 1, 'b': 2}"
>>> js
'{"a": 1, "b": 2}'
可以看出來(lái)string
和js
的區(qū)別在于引號(hào)件已。對(duì)于可以作為json.loads(<str>)
參數(shù)對(duì)象的字符串峡继,除了要滿(mǎn)足字典類(lèi)型的格式外,所有的字符串對(duì)象必須是雙引號(hào)犬钢。
requests.post()
在通過(guò)requests.post()進(jìn)行POST請(qǐng)求時(shí)苍鲜,傳入報(bào)文的參數(shù)有兩個(gè),一個(gè)是data玷犹,一個(gè)是json混滔。
常見(jiàn)的form表單可以直接使用data參數(shù)進(jìn)行報(bào)文提交,而data的對(duì)象則是python中的字典類(lèi)型;
而在最新爬蟲(chóng)的過(guò)程中遇到了一種payload報(bào)文遍坟,是一種json格式的報(bào)文拳亿,因此傳入的報(bào)文對(duì)象也應(yīng)該是格式的;這里有兩種方法進(jìn)行報(bào)文提交:
import requests
import json
url = "http://example.com"
data = {
'a': 1,
'b': 2,
}
# 1
requests.post(url, data=json.dumps(data))
# 2-json參數(shù)會(huì)自動(dòng)將字典類(lèi)型的對(duì)象轉(zhuǎn)換為json格式
requests.post(url, json=data)
其它
在requests.get()方法中可以使用params參數(shù)來(lái)構(gòu)建url
有時(shí)候請(qǐng)求得到的結(jié)果可能呈現(xiàn)亂碼的狀態(tài)愿伴,可以通過(guò)resp.encoding屬性查看網(wǎng)頁(yè)編碼方式肺魁,同時(shí)可以在獲取resp.text之前對(duì)resp.encoding='utf-8'賦值,這樣再次獲取的resp.text則會(huì)使用我們要求的編碼方式隔节。