一获黔、json數(shù)據(jù)
1.什么是json數(shù)據(jù)
json是一種具有特定語法的數(shù)據(jù)格式
2.json數(shù)據(jù)的語法
一個(gè)json數(shù)據(jù)有且只有一個(gè)數(shù)據(jù), 這個(gè)數(shù)據(jù)的數(shù)據(jù)類型必須是json支持的數(shù)據(jù)類型
3.json支持的數(shù)據(jù)類型
a.數(shù)字類型: 包含所有的數(shù)字,包括整數(shù)睦优、小數(shù);例如: 100, 12.5, -3.14
注意:1)整數(shù)前面不能加'+'
2)支持科學(xué)計(jì)數(shù)法: 3e2
b.字符串: 使用雙引號(hào)括起來的數(shù)據(jù); 例如:"abc", "abc123,!"
c.布爾: 只有true和false兩個(gè)值
d.數(shù)組: 相當(dāng)于python的列表帝雇,用[]括起來薯嗤,多個(gè)元素用逗號(hào)隔開;例如: [100, "abc", [1, 2]]
e.字典: 相當(dāng)于python的字典, 用{}括起來,多個(gè)鍵值對(duì)用逗號(hào)隔開, 例如:{"a": 10, "b": 20, "c": [1, 3]}
f.空值: null,相當(dāng)于python中的None
4.python處理json數(shù)據(jù)
python中提供了json模塊,專門用來處理json數(shù)據(jù)
- 將json數(shù)據(jù)轉(zhuǎn)換成python數(shù)據(jù)(通過爬蟲獲取到別人提供的json數(shù)據(jù),在python中處理)
a.轉(zhuǎn)換方式
json --> python
數(shù)字 int/float
字符串 str, 可能雙引號(hào)會(huì)變成單引號(hào)
布爾 bool, 會(huì)將json中的true/false轉(zhuǎn)換成True/False
數(shù)組 list
字典 dict
空值(null) None
b.loads方法
loads(字符串, encoding='utf-8') - 將字符串中的json數(shù)據(jù)轉(zhuǎn)換成對(duì)應(yīng)的python數(shù)據(jù)
!!!!!!!!注意: 這兒的字符串中!!!內(nèi)容!!!!必須json數(shù)據(jù)
2)將python數(shù)據(jù)轉(zhuǎn)換成json數(shù)據(jù)(python寫后臺(tái)接口將數(shù)據(jù)提供給客戶端)
a.轉(zhuǎn)換方式
python ---> json
int/float 數(shù)字
str 字符串, 單引號(hào)會(huì)變成雙引號(hào)
bool True->true; False->false
list/tuple 數(shù)組
dict 字典
None null
b.dumps(對(duì)象) - 將指定的對(duì)象轉(zhuǎn)換成json數(shù)據(jù), 以字符串的形式返回
這兒的對(duì)象指的就是python數(shù)據(jù)
注意: 返回值是字符串,并且字符串的!!!!內(nèi)容!!!!是json數(shù)據(jù)
5.json文件處理
嚴(yán)格來說宠默,json文件是文件內(nèi)容是json數(shù)據(jù)的文件
load(文件對(duì)象) - 將指定文件中的內(nèi)容讀出來,并且轉(zhuǎn)換成python對(duì)應(yīng)的數(shù)據(jù)灵巧。
注意:這兒的文件對(duì)象對(duì)應(yīng)的文件必須是json文件
dump(對(duì)象, 文件對(duì)象) - 將指定對(duì)象轉(zhuǎn)換成內(nèi)容是json格式的字符串搀矫,然后寫入指定的文件中
注意:這兒的對(duì)象對(duì)應(yīng)的類型必須是能夠轉(zhuǎn)換成json的數(shù)據(jù)類型
二、第三方庫request
python中的數(shù)據(jù)請(qǐng)求(http請(qǐng)求),是第三方庫requests來提供的
1.requests第三方庫的使用
get/post方法都是發(fā)送請(qǐng)求獲取接口提供的數(shù)據(jù)
a.
get(url, params=None)
url - 字符串,需要獲取的數(shù)據(jù)的接口地址
params - 字典,參數(shù)列表(給服務(wù)器發(fā)送請(qǐng)求的時(shí)候需要傳給服務(wù)器的數(shù)據(jù))
https://www.apiopen.top/meituApi?page=1
完整的接口: 協(xié)議://主機(jī)地址/路徑?參數(shù)名1=值1&參數(shù)名2=值2
b.post(url, params=None, json=None)(暫時(shí)不管!)
三刻肄、異常捕獲
1.異常捕獲 - 讓本該報(bào)錯(cuò)的代碼不報(bào)錯(cuò)
你知道某段代碼會(huì)出現(xiàn)異常瓤球,而且沒有辦法避免,同時(shí)又希望出現(xiàn)異常的時(shí)候程序不奔潰敏弃;
這個(gè)時(shí)候就可以通過異常捕獲卦羡,來讓程序不奔潰并且自行處理異常
2.異常捕獲語法
a. try-except (可以捕獲所有類型的異常 - 只要代碼段1中出現(xiàn)了異常就捕獲)
try:
代碼段1(可能會(huì)出現(xiàn)異常的代碼段)
except:
代碼段2(出現(xiàn)異常后處理異常的代碼段)
其他語句
執(zhí)行過程: 執(zhí)行代碼段1,如果代碼段1中出現(xiàn)異常麦到,程序不奔潰绿饵,直接執(zhí)行代碼段2。
如果代碼段1中沒有出現(xiàn)異常瓶颠,不執(zhí)行代碼段2而是直接執(zhí)行后面的其他語句
b. try - except 錯(cuò)誤類型 (捕獲指定類型的異常 - 只有代碼段1中出現(xiàn)了指定類型的異常才捕獲)
try:
代碼段1(可能會(huì)出現(xiàn)異常的代碼段)
except 錯(cuò)誤類型:
代碼段2(出現(xiàn)異常后處理異常的代碼段)
c.try - except (錯(cuò)誤類型1,錯(cuò)誤類型2...) (同時(shí)捕獲多種指定異常)
try:
代碼段1(可能會(huì)出現(xiàn)異常的代碼段)
except (錯(cuò)誤類型1,錯(cuò)誤類型2...):
代碼段2(出現(xiàn)異常后處理異常的代碼段)
d.try-except 錯(cuò)誤類型1 - except 錯(cuò)誤類型2... (同時(shí)捕獲多種異常拟赊,可以對(duì)不同的異常做不同的處理)
try:
代碼段1(可能會(huì)出現(xiàn)異常的代碼段)
except 錯(cuò)誤類型1:
代碼段2
except 錯(cuò)誤類型2:
代碼段3
...
3.拋出異常 - 主動(dòng)讓程序奔潰
raise 錯(cuò)誤類型 - 程序執(zhí)行到這句代碼就出現(xiàn)指定類型的異常!
說明:錯(cuò)誤類型 - 可以是系統(tǒng)提供的錯(cuò)誤類型, 也可以是自定義錯(cuò)誤類型(要求這個(gè)值必須是一個(gè)類,而且是Exception的子類)