欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Python3爬蟲中JSON文件的存儲(chǔ)操作

小編給大家分享一下Python3爬蟲中JSON文件的存儲(chǔ)操作,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

我們提供的服務(wù)有:成都網(wǎng)站制作、網(wǎng)站建設(shè)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、肇慶ssl等。為上千余家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的肇慶網(wǎng)站制作公司

JSON,全稱為JavaScript Object Notation, 也就是JavaScript對(duì)象標(biāo)記,它通過對(duì)象和數(shù)組的組合來表示數(shù)據(jù),構(gòu)造簡潔但是結(jié)構(gòu)化程度非常高,是一種輕量級(jí)的數(shù)據(jù)交換格式。本節(jié)中,我們就來了解如何利用Python保存數(shù)據(jù)到JSON文件。

1. 對(duì)象和數(shù)組

在JavaScript語言中,一切都是對(duì)象。因此,任何支持的類型都可以通過JSON來表示,例如字符串、數(shù)字、對(duì)象、數(shù)組等,但是對(duì)象和數(shù)組是比較特殊且常用的兩種類型,下面簡要介紹一下它們。

對(duì)象:它在JavaScript中是使用花括號(hào){}包裹起來的內(nèi)容,數(shù)據(jù)結(jié)構(gòu)為{key1:value1, key2:value2, ...}的鍵值對(duì)結(jié)構(gòu)。在面向?qū)ο蟮恼Z言中,key為對(duì)象的屬性,value為對(duì)應(yīng)的值。鍵名可以使用整數(shù)和字符串來表示。值的類型可以是任意類型。

數(shù)組:數(shù)組在JavaScript中是方括號(hào)[]包裹起來的內(nèi)容,數(shù)據(jù)結(jié)構(gòu)為["java", "javascript", "vb", ...]的索引結(jié)構(gòu)。在JavaScript中,數(shù)組是一種比較特殊的數(shù)據(jù)類型,它也可以像對(duì)象那樣使用鍵值對(duì),但還是索引用得多。同樣,值的類型可以是任意類型。

所以,一個(gè)JSON對(duì)象可以寫為如下形式:

[{
    "name": "Bob",
    "gender": "male",
    "birthday": "1992-10-18"
}, {
     "name": "Selina",
    "gender": "female",
    "birthday": "1995-10-18"
}]

由中括號(hào)包圍的就相當(dāng)于列表類型,列表中的每個(gè)元素可以是任意類型,這個(gè)示例中它是字典類型,由大括號(hào)包圍。

JSON可以由以上兩種形式自由組合而成,可以無限次嵌套,結(jié)構(gòu)清晰,是數(shù)據(jù)交換的極佳方式。

2. 讀取JSON

Python為我們提供了簡單易用的庫來實(shí)現(xiàn)JSON文件的讀寫操作,我們可以調(diào)用庫的loads()方法將JSON文本字符串轉(zhuǎn)為JSON對(duì)象,可以通過dumps()方法將JSON對(duì)象轉(zhuǎn)為文本字符串。

例如,這里有一段JSON形式的字符串,它是str類型,我們用Python將其轉(zhuǎn)換為可操作的數(shù)據(jù)結(jié)構(gòu),如列表或字典:

import json
str = '''
[{
    "name": "Bob",
    "gender": "male",
    "birthday": "1992-10-18"
}, {
    "name": "Selina",
    "gender": "female",
    "birthday": "1995-10-18"
}]
'''
print(type(str))
data = json.loads(str)
print(data)
print(type(data))

運(yùn)行結(jié)果如下:

<class 'str'>
[{'name': 'Bob', 'gender': 'male', 'birthday': '1992-10-18'}, {'name': 'Selina', 'gender': 'female', 'birthday': 
'1995-10-18'}]
<class 'list'>

這里使用loads()方法將字符串轉(zhuǎn)為JSON對(duì)象。由于最外層是中括號(hào),所以最終的類型是列表類型。

這樣一來,我們就可以用索引來獲取對(duì)應(yīng)的內(nèi)容了。例如,如果想取第一個(gè)元素里的name屬性,就可以使用如下方式:

data[0]['name']
data[0].get('name')

得到的結(jié)果都是:

Bob

通過中括號(hào)加0索引,可以得到第一個(gè)字典元素,然后再調(diào)用其鍵名即可得到相應(yīng)的鍵值。獲取鍵值時(shí)有兩種方式,一種是中括號(hào)加鍵名,另一種是通過get()方法傳入鍵名。這里推薦使用get()方法,這樣如果鍵名不存在,則不會(huì)報(bào)錯(cuò),會(huì)返回None。另外,get()方法還可以傳入第二個(gè)參數(shù)(即默認(rèn)值),示例如下:

data[0].get('age')
data[0].get('age', 25)

運(yùn)行結(jié)果如下:

None
25

這里我們嘗試獲取年齡age,其實(shí)在原字典中該鍵名不存在,此時(shí)默認(rèn)會(huì)返回None。如果傳入第二個(gè)參數(shù)(即默認(rèn)值),那么在不存在的情況下返回該默認(rèn)值。

值得注意的是,JSON的數(shù)據(jù)需要用雙引號(hào)來包圍,不能使用單引號(hào)。例如,若使用如下形式表示,則會(huì)出現(xiàn)錯(cuò)誤:

import json
str = '''
[{
    'name': 'Bob',
    'gender': 'male',
    'birthday': '1992-10-18'
}]
'''
data = json.loads(str)

運(yùn)行結(jié)果如下:

json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 3 column 5 (char 8)

這里會(huì)出現(xiàn)JSON解析錯(cuò)誤的提示。這是因?yàn)檫@里數(shù)據(jù)用單引號(hào)來包圍,請(qǐng)千萬注意JSON字符串的表示需要用雙引號(hào),否則loads()方法會(huì)解析失敗。

如果從JSON文本中讀取內(nèi)容,例如這里有一個(gè)data.文本文件,其內(nèi)容是剛才定義的JSON字符串,我們可以先將文本文件內(nèi)容讀出,然后再利用loads()方法轉(zhuǎn)化:

import json
with open('data.json', 'r') as file:
    str = file.read()
    data = json.loads(str)
    print(data)

運(yùn)行結(jié)果如下:

[{'name': 'Bob', 'gender': 'male', 'birthday': '1992-10-18'}, {'name': 'Selina', 'gender': 'female', 'birthday': 
'1995-10-18'}]

3. 輸出JSON

另外,我們還可以調(diào)用dumps()方法將JSON對(duì)象轉(zhuǎn)化為字符串。例如,將上例中的列表重新寫入文本:

import json
data = [{
    'name': 'Bob',
    'gender': 'male',
    'birthday': '1992-10-18'
}]
with open('data.json', 'w') as file:
    file.write(json.dumps(data))

利用dumps()方法,我們可以將JSON對(duì)象轉(zhuǎn)為字符串,然后再調(diào)用文件的write()方法寫入文本,結(jié)果如圖5-2所示。

Python3爬蟲中JSON文件的存儲(chǔ)操作

另外,如果想保存JSON的格式,可以再加一個(gè)參數(shù)indent,代表縮進(jìn)字符個(gè)數(shù)。示例如下:

with open('data.json', 'w') as file:
    file.write(json.dumps(data, indent=2))

此時(shí)寫入結(jié)果如圖5-3所示。

Python3爬蟲中JSON文件的存儲(chǔ)操作

這樣得到的內(nèi)容會(huì)自動(dòng)帶縮進(jìn),格式會(huì)更加清晰。

另外,如果JSON中包含中文字符,會(huì)怎么樣呢?例如,我們將之前的JSON的部分值改為中文,再用之前的方法寫入到文本:

import json
data = [{
    'name': '王偉',
    'gender': '男',
    'birthday': '1992-10-18'
}]
with open('data.json', 'w') as file:
    file.write(json.dumps(data, indent=2))

寫入結(jié)果如圖5-4所示。

Python3爬蟲中JSON文件的存儲(chǔ)操作

可以看到,中文字符都變成了Unicode字符,這并不是我們想要的結(jié)果。

為了輸出中文,還需要指定參數(shù)ensure_ascii為False,另外還要規(guī)定文件輸出的編碼:

with open('data.json', 'w', encoding='utf-8') as file:
    file.write(json.dumps(data, indent=2, ensure_ascii=False))

寫入結(jié)果如圖5-5所示。

Python3爬蟲中JSON文件的存儲(chǔ)操作

可以發(fā)現(xiàn),這樣就可以輸出JSON為中文了。

看完了這篇文章,相信你對(duì)Python3爬蟲中JSON文件的存儲(chǔ)操作有了一定的了解,想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

本文名稱:Python3爬蟲中JSON文件的存儲(chǔ)操作
當(dāng)前地址:http://aaarwkj.com/article10/gpjhgo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計(jì)公司、搜索引擎優(yōu)化、網(wǎng)站設(shè)計(jì)動(dòng)態(tài)網(wǎng)站、網(wǎng)站制作、虛擬主機(jī)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
蜜臀人妻四季av一区二区不卡| 亚洲天堂成人综合在线| 青青草原成年人免费看| 久久人妻久久人妻久久| 国产精品乱人偷免费视频| 国产精品大全中文字幕| 日韩成人大片在线播放| 久久精品一区二区婷婷| 成人福利午夜一区二区| 中文字幕一区二区av| 国产b片免费在线观看| 亚洲精品亚洲一区亚洲二区| 日韩欧美另类精品在线| 色哟哟免费在线观看视频| 亚洲av成人在线一区二区| 国产传媒网约在线观看| 久久人人97超碰人人爱一久久精品| 黑丝美女被内射视频免费观看| 日韩大片一区二区三区在线观看| 风韵丰满熟妇啪啪老熟女| 亚洲欧美日韩精品麻豆| 欧美三级伦理片免费观看| 欧美精品欧美激情免费区| 91日韩中文字幕在线观看| 日本免费的高清一区二区| 亚洲一区二区日韩在线| 亚洲一区二区偷拍精品| 午夜未满十八禁止观看| 久久精品一区二区三区乱码| 国产精品久久久久精品爆| 国产午夜福利诱惑在线观看| 国产黄片自拍视频免费看| 亚洲麻豆精品午夜免费| 精品视频一区二区三区在线观看| 国产亚洲一区二区视频| 亚洲精品熟女av影院| 男人一插就想射的原因| 国产精品人妻在线av| 在线成人免费日韩视频| 亚洲va在线va天堂va在线| 国产成年人拍拍免费视频|