zoukankan      html  css  js  c++  java
  • 爬虫1.3-数据存储

    爬虫-数据存储

    1. JSON文件

    1.1 JSON数据格式

    json是一种轻量级数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据,简洁清晰,适合前端和后端数据交换

    JSON数据格式
    1 对象(字典) 使用花括号{}
    2 数组(数组) 使用方括号[]
    3 整形、浮点型、布尔型、null型
    4 字符串类型(字符串必须要用双引号,不能用单引号)
    多个数据之间用逗号分开
    json本质上就是一个字符串 python中只有基本数据类型才能转换成JSON格式,int float str list dict tuple

    1.2 写入

    写入方法一

    persons = [{xxx}, {xxxxx}] 
    json_str = json.dumps(persons) # 此时列表之间被转换成json标准格式(字符串类型),然后一个文件写入就行了
    fp.write(json_str)
    

    写入方法二

    with open('xx.json', 'w', enconding='utf-8') as fp:
      json.dump(persons, fp, ensure_asciii=False)   
    # 涉及到中文字符时这里传入三个参数,第一个就是包含大量字典的列表,第二个是文件指针,第三个是将json函数默认转换ascii码关闭    另外文件写入时也要使用utf-8格式(enconding='utf-8')
    

    1.3 读取json

    json_str = '[{"username": "laowang", "age": 18, "country": "china"}, {"username": "laoli", "age": 11, "country": "china"}]'
    persons = json.loads(json_str)  这里persons通过loads函数变成了一个对象,然后下方对其进行操作即可
    for i in persons:
        print(i)    
    
    with open('person.json', 'r', encoding='utf-8') as fp:
    	 persons = json.load(fp)     这时persons通过load函数变成了一个list类的对象,然后可以进行操作了
         for i in persons:
             print(i)
    

    dumpdumps loadloads 有s 则与字符串有关 没有s则与文件有关

    2. CSV文件

    2.1 csv数据格式

    CSV文件不是一个特定的文件格式,泛指具有以下特征的任何文件:
    1 纯文本,使用某个字符集,如utf-8, unicode, ascii, gbk等
    2 由记录组成,典型的是每行一条记录
    3 每条记录被分隔符分割为字段 典型的分隔符有逗号 分号 制表符
    4 每条记录都有同样的文本字段 如 姓名 年龄 身高 体重 每条记录都要有这四个字段

    2.2 写入

    CSV文件写入方法一:
    headers = ['username', 'age', 'height']       
    data = [('张三', 18, 160),('lisi', 20, 213)]
    with open('classroom.csv', 'w', encoding='utf-8', newline='') as fp:   
        #这里的newlien参数是为了避免写入后又多余的换行
        writer = csv.writer(fp)
        writer.writerow(headers)
    
    CSV文件写入方法二: 字典直接写入
    with open('classroom.csv', 'w', encoding='utf-8', newline='') as fp:
        writer = csv.DictWriter(fp, headers)    # 这里直接使用DictWriter函数
        writer.writerow(data)    # writerow每次只写入一条
    
    with open('classroom.csv', 'w', encoding='utf-8', newline='') as fp:
        writer = csv.DictWriter(fp, headers)  # 这里直接使用DictWriter函数
        writer.writeheader()   # 这里必须先调用写入头部函数,否则没有头部
        writer.writerows(data)  # 多条数据,直接使用writerows全部写入即可
    

    3. mysql数据库数据存入

    import pymysql
    db = pymysql.connect(
        host='47.107.110.xx',
        user='xxx',
        password='xxx',
        database='testdb',  # 数据库名
        port=3306
    )
    
    这里要理解,一个数据库服务器可以有多个数据库,所以要选择某个数据库进行操作
    
    新建表格的第一个字段可以设置为自动增长,可以理解为id
    sql = """
    insert into user(id,username,age,password) values(null,%s,%s,%s)
    """  
    # 这里使用%s是因为数据库在处理时都先按照字符串的
    # null是id  它自动增长可以不用填写
    username = 'laowang'
    age = 88
    password = '123456'   # 这样就可以自己灵活施展了
    cursor = db.cursor()   # cursor是创建一个新的游标,方便执行语句
    cursor.execute(sql, (username, age, password))  # 这里要传入一个元组
    db.commit()  # 必须使用commit提交后, 数据库的数据才会改变
    db.close()
    
    查询数据:
    fetchone() # 返回一条数据
    fetchall() # 接收全部的返回结果
    fetchmany(size) # 获取定条数的数据
    使用查询语句后,要使用上述三条语句才能获得结果,
    result = cursor.fetchone() # 获得一条数据(元组形式)  
    result = cursor.fetchall() # 获得所有返回的数据((xxx,xxxx,xxx), (yyy,yyyy,yyy)) 
    fetmany(size) # 得到的数据形式与fetchall类似
    
    删除数据:
    使用sql = """delete from table where id=1;"""  
    然后cursor.execute(sql)   
    db.commit()
    # 这里删除时只能删除一整条记录,插入,删除,更新等数据修改操作都需要使用.commit()函数
    
    更新数据
    sql = """update table set username='xxx' where id=1;""" 这里sql语句需要指明表 字段 标识
    如果不加id=1   就会把整个表的所有记录中的usernam字段都更新为xxx
    
    

    作者:bitterz
    本文版权归作者和博客园所有,欢迎转载,转载请标明出处。
    如果您觉得本篇博文对您有所收获,请点击右下角的 [推荐],谢谢!
  • 相关阅读:
    c#中取整和取余
    安装程序无法创建新的系统分区,也无法定位现有的系统分区
    经销商、代理商、分销商的关系
    关于WinPE安装操作系统
    SQL Server 2008 数据库同步的两种方式 (发布、订阅)
    SQL Server 2008 数据库同步的两种方式 (发布、订阅)
    通过SQL Server 2008数据库复制实现数据库同步备份
    SQL Server 2008 R2数据库镜像部署图文教程
    SQL 2008提供几种数据同步方式
    Microsoft Sync Framework下的快速开发同步程序
  • 原文地址:https://www.cnblogs.com/bitterz/p/10195056.html
Copyright © 2011-2022 走看看