python爬虫学习37

python爬虫学习37

这里写目录标题

    • python爬虫学习37
      • 数据存储篇——JSON
        • 1. 对象和数组
          • 对象
          • 数组
        • 2. 读取JSON
          • 从文本中读取JSON
        • 3. 输出JSON

数据存储篇——JSON

在最最最前面我们学习urllib库的时候曾经提到过JSON,今天让我们好好研究研究它:

JSON全称是 JavaScriptObjectNotation,即JavaScript对象标记,它通过对象和数组的组合来表示数据,构造简洁且结构化程度高,是一种轻量级数据交换格式。

1. 对象和数组

在JavaScript语言中,一切皆对象因此任何支持的数据类型都可以通过JSON表示,例如字符串、数字、对象、数组等。其中对象和数组是比较常用的类型。

对象

对象在JavaScript中是指用花括号 {} 包围起来的内容,数据结构是键值对结构:{key1 : Value1,key2 : value2},key表示键值对的属性,value表示属性对应的值,属性(key)可以用整数和字符串表示,值(value)可以使用任何类型。

数组

数组在JavaScript中是指用方括号[]包围起来的内容,数据结构是索引结构:[“java” , “javascript”,…]。在JavaScript中数组是一种比较特殊的数据类型,因为他也可以像对象那样使用键值对结构,但在一般情况下使用最多的还是索引结构。同样一个数组的值可以是任意类型。

一个JSON对象

[
    {
    "name": "Bob",
    "gender": "male",
    "age": "21"
    },
    {
       "name": "Jane",
        "gender": "female",
        "age": "22"
    }
]

[]包围的地方相当于数组,数组中的元素可以是任意类型,这里的元素是对象使用{}包围。

JSON可以实现两种以上格式任意组合与嵌套,结构清晰,是数据交换的及佳实现方式。

2. 读取JSON

使用Python自带的json库,可以实现json文件的读写操作:

import json

str_0 = """
[{
    "name": "Bob",
    "gender": "male",
    "age": "21"
},{
       "name": "Jane",
        "gender": "female",
        "age": "22"
}]
"""

print("str_0 : ", type(str_0))
# 使用 json 中的loads方法 可以实现由字符串到 json 格式的转换
json_0 = json.loads(str_0)
print(json_0)
print("json_0 : ", type(json_0))

# 同样 使用 dumps 方法 可以实现由 json 到字符串的转换
str_1 = json.dumps(json_0)
print("str_1 : ", type(str_1))
print(str_1)

运行结果:

python爬虫学习37_第1张图片

可以看到,所谓的json格式在Python中就是列表类型,这样就可以使用Python中的方法很容易的从列表中获取信息了。

# 从列表中获取信息
print(json_0[0]['name'])
print(json_0[1].get('name'))

python爬虫学习37_第2张图片

特别注意的是JSON数据必须使用双引号包围,而不能使用单引号:

import json

str_0 = """
[{
    'name': "Bob",
    "gender": "male",
    "age": "21"
},{
       "name": "Jane",
        "gender": "female",
        "age": "22"
}]
"""

json_0 = json.loads(str_0)
print(json_0)

否则就会报错:

在这里插入图片描述

从文本中读取JSON
import json

with open('json_text.txt', 'a+', encoding="utf-8") as file:
    # 因为是这里选择了添加模式,所以不要忘记移动光标
    file.seek(0)
    text = file.read()
    data = json.loads(text)
    print(data)

运行结果:

在这里插入图片描述

也可以使用load方法

import json

data = json.load(open('json_text.txt', encoding='utf-8'))
print(data)

运行结果:

在这里插入图片描述

3. 输出JSON

调用dump方法,将JSON保存在文件中

import json

str_0 =[{
    "name": "Bob",
    "gender": "male",
    "age": "21"
}, {
       "name": "Jane",
        "gender": "female",
        "age": "22"
}]


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

运行结果:

python爬虫学习37_第3张图片

若想要保存JSON的缩进格式,可以传入indent参数:

import json

str_0 =[{
    "name": "Bob",
    "gender": "male",
    "age": "21"
}, {
       "name": "Jane",
        "gender": "female",
        "age": "22"
}]


with open('data.txt', 'w', encoding='utf-8') as f:
    f.write(json.dumps(str_0, indent=2))

运行结果:

python爬虫学习37_第4张图片

需要注意的是当我们使用中文字符时,若想正确的读入需要传入ensure_ascii参数:

import json

str_0 =[{
    "name": "郭靖",
    "gender": "男",
    "age": "21"
}, {
       "name": "黄蓉",
        "gender": "女",
        "age": "22"
}]


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

运行结果:

python爬虫学习37_第5张图片

至此,我们一同了解了JSON的使用方法,JSON在进行数据解析式会经常用到,所以大家要多熟悉熟悉。

今日结束,未完待续…

你可能感兴趣的:(python,爬虫,学习)