python爬蟲系列之?dāng)?shù)據(jù)的存儲(一):json庫的使用

在上一篇文章里我們講了 xpath寫法的問題還以爬取我的文章信息寫了示例,但是在上一篇中我們只是爬取并打印了信息衡奥,并沒有對信息進(jìn)行保存爹袁。

實(shí)際應(yīng)用中爬取到的信息肯定是需要保存到本地的。保存信息的方式有數(shù)據(jù)庫和文件的形式杰赛,數(shù)據(jù)庫我們后面再講呢簸,現(xiàn)在讓我們先看看怎么把信息保存到文件里。

這里我們主要講講 將數(shù)據(jù)保存為 json格式和 csv格式乏屯,這就要用到兩個庫 json庫和 csv庫,這兩個庫都是 python自帶的庫瘦赫。

關(guān)于數(shù)據(jù)存儲我們分兩篇來講辰晕,這一篇先講 json,下一篇再講 csv确虱。

一含友、關(guān)于 json

json的簡介直接引用百度百科的定義:

JSON(JavaScript Object Notation, JS 對象簡譜) 是一種輕量級的數(shù)據(jù)交換格式。它基于 ECMAScript (歐洲計算機(jī)協(xié)會制定的js規(guī)范)的一個子集,采用完全獨(dú)立于編程語言的文本格式來存儲和表示數(shù)據(jù)窘问。簡潔和清晰的層次結(jié)構(gòu)使得 JSON 成為理想的數(shù)據(jù)交換語言辆童。 易于人閱讀和編寫,同時也易于機(jī)器解析和生成惠赫,并有效地提升網(wǎng)絡(luò)傳輸效率把鉴。

實(shí)際上 json的格式和 python中的字典很像,也是由鍵值對組成儿咱,但是 python中的值可以為任何對象(列表庭砍、字典、字符串混埠、數(shù)字等等)怠缸,而 json中的值只能是數(shù)組(列表)、字典钳宪、字符串揭北、數(shù)組、布爾值中的一中或幾種。

其格式就像下面這樣:

注意:json中的引號必須是雙引號越庇,否則會報錯

{
    "key1": "value1",
    "key2": [1,2,"value2"],
    "key3": 
    {
        "key31": "value1",
        "key32": [1,2,"value2"],
        "key33": true,
    },
}

二冤议、json庫的使用

json庫一共有三個方法,分別是 dump嫉柴、dumps、load奉呛、loads计螺。

其中 dump和 dumps是用來把把字典和數(shù)組轉(zhuǎn)換為 json格式的,dump把轉(zhuǎn)換結(jié)果直接寫入文件瞧壮,dumps返回字符串登馒。

load和 loads是把 json格式的數(shù)據(jù)轉(zhuǎn)換為字典格式,load直接從 json文件中讀取數(shù)據(jù)并返回字典對象咆槽,loads把字符串形式的 json數(shù)據(jù)轉(zhuǎn)換成字典格式陈轿。

下面講講這些方法的具體用法。

1秦忿、dump和 dumps

dump的函數(shù)原型是 dump(obj, fp) 第一個參數(shù) obj是要轉(zhuǎn)換的對象麦射,第二個參數(shù) fp是要寫入數(shù)據(jù)的文件對象。

dumps的函數(shù)原型是 dumps(obj) 參數(shù)是要轉(zhuǎn)換的對象

注意:如果要轉(zhuǎn)換的對象里有中文字符的話灯谣,要把 ensure_ascii設(shè)置為 False否則中文會被編碼為 ascii格式

#-*- coding: utf-8 -*
import json


test = {
    "key1": "value1",
    "key2": [1,2,"value2"],
    "key3":
    {
        "key31": "value1",
        "key32": [1,2,"value2"],
        "key33": True,
        "key34": "測試",
    },
}

#沒有設(shè)置 ensure_ascii為 False
with open('test.json', 'w', encoding='utf-8') as fp:
    json.dump(test, fp)
#設(shè)置了 ensure_ascii為 False
with open('test_no_ascii.json', 'w', encoding='utf-8') as fp:
    json.dump(test, fp, ensure_ascii=False)

#test.json的文件內(nèi)容為:
#{... ... "key33": true, "key34": "\u6d4b\u8bd5"}}
#test_no_ascii.json的文件內(nèi)容為:
#{... ... "key33": true, "key34": "測試"}}
#注意到 python中的 True轉(zhuǎn)換成了 Javascript里的 true
#另外在打開文件的時候強(qiáng)烈建議用 encoding指定文件編碼
#還需要注意文件的打開模式 w是寫入潜秋,文件已存在的話就覆蓋
#要追加寫入的話記得用 a模式打開

test_string = json.dumps(test, ensure_ascii=False)
print(test_string)

打印結(jié)果:

2、load和 loads

load的函數(shù)原型是 load(fp) 參數(shù) fp是要讀取的文件對象

loads的函數(shù)原型是 loads(string) 參數(shù) string是要轉(zhuǎn)換成 python對象的 json字符串胎许,通常用來將網(wǎng)頁中的 json數(shù)據(jù)轉(zhuǎn)換為 python對象

#-*- coding: utf-8 -*
import json


#json格式的字符串
test_string = '{"key1": "value1", "key2": [1, 2, "value2"], "key3": {"key31": "value1", "key32": [1, 2, "value2"], "key33": true, "key34": "測試"}}'

#從之前保存的 test_no_ascii.json中讀取 注意模式為 r
with open('test_no_ascii.json', 'r', encoding='utf-8') as fp:
    json_obj_from_file = json.load(fp)

json_obj_from_web = json.loads(test_string)

#打印兩個返回結(jié)果的類型
print(type(json_obj_from_file))
print(type(json_obj_from_web))
#打印兩個返回結(jié)果的內(nèi)容
print(json_obj_from_file)
print(json_obj_from_web)

打印結(jié)果:

csv庫在下一篇繼續(xù)講峻呛,點(diǎn)贊就是對我最大的支持(~ ̄▽ ̄)~

上一篇:python爬蟲系列之 html頁面解析:如何寫 xpath路徑

下一篇:python爬蟲系列之?dāng)?shù)據(jù)的存儲(二):csv庫的使用

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末罗售,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子钩述,更是在濱河造成了極大的恐慌寨躁,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件牙勘,死亡現(xiàn)場離奇詭異职恳,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)谜悟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門话肖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人葡幸,你說我怎么就攤上這事最筒。” “怎么了蔚叨?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵床蜘,是天一觀的道長。 經(jīng)常有香客問我蔑水,道長邢锯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任搀别,我火速辦了婚禮丹擎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘歇父。我一直安慰自己蒂培,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布榜苫。 她就那樣靜靜地躺著护戳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪垂睬。 梳的紋絲不亂的頭發(fā)上媳荒,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機(jī)與錄音驹饺,去河邊找鬼钳枕。 笑死,一個胖子當(dāng)著我的面吹牛逻淌,可吹牛的內(nèi)容都是我干的么伯。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼卡儒,長吁一口氣:“原來是場噩夢啊……” “哼田柔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起骨望,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤硬爆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后擎鸠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缀磕,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年劣光,在試婚紗的時候發(fā)現(xiàn)自己被綠了袜蚕。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡绢涡,死狀恐怖牲剃,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情雄可,我是刑警寧澤凿傅,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站数苫,受9級特大地震影響聪舒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜虐急,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一箱残、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧止吁,春花似錦被辑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至仁热,卻和暖如春榜揖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背抗蠢。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工举哟, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人迅矛。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓妨猩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親秽褒。 傳聞我的和親對象是個殘疾皇子壶硅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355