Python爬蟲筆記5-JSON格式數據的提取和保存

環境:python-3.6.5

JSON

JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式,它使得人們很容易的進行閱讀和編寫。同時也方便了機器進行解析和生成。適用於進行數據交互的場景,好比網站前臺與後臺之間的數據交互。
Python中自帶了json模塊,直接import json便可使用javascript

官方文檔:http://docs.python.org/librar...
Json在線解析網站:http://www.json.cn/#html

json簡單說就是javascript中的對象數組,因此這兩種結構就是對象和數組兩種結構,經過這兩種結構能夠表示各類複雜的結構。java

對象:對象在js中表示爲{ }括起來的內容,數據結構爲 { key:value, key:value, ... }的鍵值對的結構,在面向對象的語言中,key爲對象的屬性,value爲對應的屬性值,因此很容易理解,取值方法爲 對象.key 獲取屬性值,這個屬性值的類型能夠是數字、字符串、數組、對象這幾種。

數組:數組在js中是中括號[ ]括起來的內容,數據結構爲 ["Python", "javascript", "C++", ...],取值方式和全部語言中同樣,使用索引獲取,字段值的類型能夠是 數字、字符串、數組、對象幾種。python

json模塊使用

json模塊提供了四個功能:dumps,dump,load,loads,用於字符串和python數據類型進行轉換。json

json.loads()
json.loads()方法將JSON文本字符串轉換爲Python對象,從JSON到Python的類型轉化對照以下:數組

JSON Python
object dict
array list
string unicode
number(int) int
number(real) float
true True
false False
null None

示例:數據結構

import json

# JSON文本字符串
str_list = '["a","b","c","d"]'
str_dict = '{"name":"小白","age":1000}'

# json.loads將文本字符串轉化爲JSON對象,在Python裏就是Python對象了
data_list = json.loads(str_list)
data_dict = json.loads(str_dict)

print(type(data_list))
print(type(data_dict))
print(data_list)
print(data_dict)

運行結果:網站

<class 'list'>
<class 'dict'>
['a', 'b', 'c', 'd']
{'name': '小白', 'age': 1000}

說明:
JSON文本字符串中,數據應該用雙引號括起來,否則會報錯誤,好比上面str_list和str_dict中的值都應該用雙引號,數字就不用。ui

json.dumps
json.dumps()方法實現python類型轉化爲json字符串,返回一個str對象把一個Python對象編碼轉換成Json字符串。從Python到JSON的類型轉化對照以下:編碼

Python JSON
dict object
list,tuple array
str string
int, float, int- & float-derived Enums number
True true
False false
None null

示例:

import json

data_list = [1,2,3,4]
data_dict = {'name':'小黑','age':1000}

print(json.dumps(data_list))
print(json.dumps(data_dict))

運行結果:

[1, 2, 3, 4]
{"name": "\u5c0f\u9ed1", "age": 1000}

說明:dumps方法能夠將Python數據類型轉化爲JSON文本字符串,可是能夠看到當有中文的時候,轉換後中文字符都變成Unicode字符,要輸出中文須要設置dumps方法的參數ensure_ascii=True設置爲ensure_ascii=False。以下:

print(json.dumps(data_dict,ensure_ascii=False))
# 運行結果:{"name": "小黑", "age": 1000}

此外,若是須要將數據保存爲文本的時候,還須要指定文件的編碼格式爲utf-8,好比將上面的data_dict數據(裏面有中文字符)保存爲data.json文件,代碼以下:

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

不然打開保存的文件,會有亂碼。

若是要處理的是文件而不是字符串,能夠使用 json.dump()json.load()來編碼和解碼JSON數據。好比:

# 寫入數據到文件
data_list = [{'name':'小白'},{'name':'小黑'}]
with open('data2.json','w',encoding='utf-8') as f:
    json.dump(data_list,f,ensure_ascii=False)
# 從文件讀取數據
with open('data2.json','r',encoding='utf-8') as f:
data = json.load(f)
print(data)

參考資料

相關文章
相關標籤/搜索