zoukankan      html  css  js  c++  java
  • 商业爬虫学习笔记day8-------json的使用

    一. 简介

    JSON,全称为JavaScript Object Notation(JavaScript对象标记),它通过对象和数组的组合来表示数据,是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

    二. json语法

    1. json语法规则

     在js语言中,一切都是对象。因此,任何支持的类型都可以通过json来表示,例如字符串、数字、对象、数组等。但是对象和数组是比较特殊且常用的两种类型

    (1)对象表示为键值对

    (2)数据由逗号分隔

    (3)花括号保存对象

    (4)方括号保存数组

    2 json键值对

      JSON 键值对是用来保存 JS 对象的一种方式,和 JS 对象的写法也大同小异,键/值对组合中的键名写在前面并用双引号 "" 包裹,使用冒号 : 分隔,然后紧接着值

    注意:(1)python中的key:value必须都是双引号(不能用单引号)

         (2) 末尾不能写逗号

         (3)整个文件内容只能是被一个大括号{}或中括号[]包裹

    3.对象和数组

         (1)对象:对象在 JS 中是使用花括号包裹 {} 起来的内容,数据结构为 {key1:value1, key2:value2, ...} 的键值对结构。在面向对象的语言中,key 为对象的属性,value 为对应的值。键名可以使用整数和字符串来表示。值的类型可以是任意类型。

      (2)数组:数组在 JS 中是方括号 [] 包裹起来的内容,数据结构为 ["java", "javascript", "vb", ...] 的索引结构。在 JS 中,数组是一种比较特殊的数据类型,它也可以像对象那样使用键值对,但还是索引使用得多。同样,值的类型可以是任意类型。

    三. json常用操作

    loads,dumps;load,dump

    1. 字符串和dict,list转换(loads,dumps)

    (1)字符串向dict,list转换

    str_list = '[{"name":"张三", "age":"20"}, {"name":"李四", "age":18}]'
    str_dict = '{"name":"张三", "age":"20"}'
    list_data = json.loads(str_list)
    dict_data = json.loads(str_dict)
    print(type(list_data))
    print(list_data)
    print(type(dict_data))
    print(dict_data)

    打印结果

    <class 'list'>
    [{'name': '张三', 'age': '20'}, {'name': '李四', 'age': 18}]
    <class 'dict'>
    {'name': '张三', 'age': '20'}
    

    (2)dict,lis向字符串转换  

    data_list = [{"name":"张三", "age":"20"}, {"name":"李四", "age":18}]
    data_dict = {"name":"张三", "age":"20"}
    list_str = json.dumps(data_list)
    dict_str = json.dumps(data_dict)
    print(type(list_str))
    print(list_str)
    print(type(dict_str))
    print(dict_str)
    

     打印结果

    <class 'str'>
    [{"name": "u5f20u4e09", "age": "20"}, {"name": "u674eu56db", "age": 18}]
    <class 'str'>
    {"name": "u5f20u4e09", "age": "20"}

     

    2. dict,list和文件对象(只包含一个json的文件)间的转换(load,dump)

    (1)dict、list写入文件

    list2 = [{"name": "张三", "age": 20}, {"name": "李四", "age": 18}]
    with open('new.json', 'w') as f:
        json.dump(list2, f)

     结果能得到new.json文件(其内容为list2中的内容)

    (2)读取文件=====>list、dict

    with open('new.json', 'r') as f:
        result = json.load(f)
        print(result)
    

     打印结果如下:

    [{'name': '张三', 'age': 20}, {'name': '李四', 'age': 18}]
    

    3. json中的数据转换成csv文件(比较常用的是表格形式,便于数据分析) 

    import json
    import csv
    
    # 需求 json 中的数据 转换  成 csv文件
    
    # 1.分别 读 , 创建文件
    json_fp = open('02new.json', 'r')
    csv_fp = open('03csv.csv', 'w')
    with open('02new.json', 'r') as f:
        # 读取出json内容,并转换为dict格式
        data_list = json.load(f)
    # 提取出表头
    sheet_title = data_list[0].keys()
    
    # 提取出表内容
    sheet_data = []
    for data in data_list:
        sheet_data.append(data.values())
    #  csv 写入器,初始化写入对象
    writer = csv.writer(csv_fp)
    # 写入表头
    writer.writerow(sheet_title)
    # 写入内容
    writer.writerows(sheet_data)
    # 6. 关闭两个文件
    json_fp.close()
    csv_fp.close()

    结果得到03csv.csv文件,内容如下:

     四. 案例------爬取http://www.allitebooks.org/   ,获取书名、作者、简介

  • 相关阅读:
    I/O多路复用和Socket
    我读过的最好的epoll讲解--转自”知乎“
    gcc和g++的区别
    详解派生类构造函数与析构函数
    C++中构造函数,拷贝构造函数和赋值函数的区别和实现
    浅拷贝和深拷贝的区别?
    曲演杂坛--特殊字符/生僻字与varchar
    SQL SERVER--单回话下的死锁
    曲演杂坛--表变量的预估行数
    曲演杂坛--为什么SELECT语句会被其他SELECT阻塞?
  • 原文地址:https://www.cnblogs.com/jj1106/p/11243037.html
Copyright © 2011-2022 走看看