Python爬虫存储数据

  存储数据的几种方式:
 
  1.JSON文件的存储:是一种轻量级的数据交换格式,它是基于ECMAScript的一个子集,在python中分别以list和dict组成  <<<<<<<<返回的是一个字典常用于数据解析>>>>>>>>>
  json模块提供的四个功能:       s = "{'name':'张三'}"    --->>>json数据
          1.json.dumps(obj,ensure_ascii = False(指:不要再随意转换十六进制了就输出中文)) ---->>>实现python类型转化为json字符串,返回一个str对象,把一个python对象编码转换成json对象
          2.json.loads() ---->>>把json格式字符串解码转化成python对象,从json到python的类型转化
          3.json.dump() ----->>>将python内置类型序列化为json对象后写入文件
          4.json.load() ----->>>读取文件中json形式的字符串转化成python对象

  2.CSV文件的存储:是一种以.csv结尾的文件(针对于Excel文件来说)
        1.所有的值都是字符串
  向csv文件中写入数据:
        1.引入csv模块                                      import csv
        2.使用我open()函数创建csv文件                        with open("student.csv","a+",newline='') as file:
        3.借助csv.writer()创建writer对象                    writer = csv.writer(file)
        4.调用writer对象的writerow()方法写入一行数据           writer.writerow([])
        5.调用writer对象的writerows()方法写入多行数据          lst = [
                                                                 []
                                                                 []
                                                                ]
                                                           writer.writerows(lst)

 
  从csv文件读取数据:
        1.引入csv模块                                       import csv
        2.使用open()函数打开csv文件                           with open("student.csv","r",newline='') as file:
        3.借助csv.read()创建reader对象                       reader = csv.reader(file)
        4.读到的每一行都是一个列表                              for row in reader:
                                                                 print(row)
 
 

  3.Excel表格存储数据:以 .xlsx 结尾的文件称为Excel文件,也称为一个工作簿(包含n多个sheet表格),每一个格子称为单元格  -->>import openpyxl
      向Excel中写入数据:1.创建工作簿对象       openpyxl.Workbook()
                     2.获取活动工作表对象      wb.active
                     3.获取单元格          sheet[单元格名称('A1')]
                      4.向单元格中写入数据    cell.value = 值
                      5.向Excel中写入一行数据    sheet.append(列表)
                      6.保存Excel文件         wb.save()

      从Excel中读取数据:1.加载工作簿对象       openpyxl.load_workbook(文件名)
                     2.获取活动工作表对象      wb.active
                     3.获取单元格            sheet[单元格名称]
                     4.获取单元格的值         cell.value
                     5.获取一系列格子         sheet['A'],sheet[3],sheet['A:C']
                     6.获取整个表格的所有行      sheet.rows

  4.MySQL数据库存储数据:
           MySQL(数据库管理系统)的数据类型:1.数值类型:int (4个字节)   float (4个字节)  integer (与int同义词)  double (8个字节)
                         2.字符串类型: char (固定长度字符串)   varchar (可变长度字符串)
                         3.日期/时间类型: Date:YYY-MM-DD     Datetime:YYYY-MM-DD  HH:MM:SS    Time: HH:MM:SS

           SQL(结构化查询语言)语言包含4个部分:1.数据定义语言 (如 create(创建),drop(删除),alter(修改)等语句)  ----->>>针对数据库或表
                           2.数据查询语言 (select语句)
                           3.数据操纵语句 (insert(新增),delete(删除),update(修改)语句)  ---->>>针对表中的数据
                           4.数据控制语句 (如 grant(赋予权限),revoke(回收权限),commit(提交事务),rollback(回滚事务)等语句)
 
                      SQL数据库名:database
                          表名: table
                           行: row
                           列: column
                          索引: index
                         主键(不允许重复 可设置auto_increment表示自动增长) : primary key
 

                       SQL定义语言:1.创建数据库--->>>   create database 数据库名
                                 2.显示所有数据库--->>>  show databases
                                 3.使用指定数据库--->>>   use 数据库名
                                 4.删除表---->>>     drop table 表名
                                 5.删除数据库---->>>   drop database 数据库名
                                 6.修改表结构: a.增加列---->>>   alter table 表名 add 列名 数据类型(长度)
                                             b.修改列的数据类型--->>>  alter table 表名 modify 数据类型(长度)
                                             c.修改列的名称--->>>   alter table 表名 change 原列名 新列名 数据类型(长度)
                                             d.删除列--->>> alter table 表名 drop 列名

                        SQL数据操纵语言:1.向表中插入数据---->>> insert into 表名 [(字段列表)] values (值列表)
                                     2.修改表中数据----->>> update 表名 set 字段1=值1,字段2=值2     [where]
                                     3.删除表中的数据----->>> delete from 表名 [where]

                SQL数据查询语言:1.单表查询--->>> select ... from 表名 [where] ... [group by] ... [having]...[order by(排序) asc/desc]
                             2.模糊查询--->>> 只能与字符型一起使用的like关键字,区间范围的 between...and...在给定的值中进行选择的 in
                            3.分组函数 count()    sum()   avg()    max()

                         SQL数据表连接查询(查询来源与两张表):select...from 表1 inner join 表2 on 链接条件 ..[where]...
                                        select...from 表1  left/right join 表2 on 链接条件 ..[where]...

  python与MySQL进行交互:
            常用操作:插入数据:  insert
                   查询数据:  select
                   更新数据:  update
            创建数据库链接: connect(host,user,passwd,database)

  5.MongoDB(存储数据)属于NOSQL,使用c++开发的,它是一种基于分布式文件存储的开源数据库系统,将数据存储为一个文档,数据结构由键值(key-value)对形成的
  MongoDB文档类似于JSON对象,字段值可以包含其他文档,数组及文档数组
               MongDB数据库叫:database
                      表名:collection
                      行: document or BSON document
                      列: field
    自动添加的数(不允许重复): _id(auto set)

      MongoDB数据类型: 1.Object ID:
                            a.每个文档(行)都有一个属性,为 _id,保证每个文档的唯一性
                            b.可以自己去设置_id插入文档,如果没有提供,那么MongoDB为每个文档提供一个独特的_id,类型为objectID
                            c.objectID是一个12字节的十六进制数(前4个字节为当前时间戳,接下来3个字节是机器ID,接下来的2个字节中是MongoDB的服务进程id,最后三个字节是简单的增量值)
                    2.String类型:(字符串,最常用,必须是有效的utf-8)
                    3.Boolean: (存储一个布尔值,True/False)
                    4.Integer:(整数可以是32位或64位,这取决于服务器)
                    5.Double:(存储浮点数)
                    6.Arrays:(数组或列表,多个值存储到一个键)
                    7.Object:(用于嵌入式的文档,即一个值为一个文档)
                    8.Null:(存储Null值)
                    9.Timestamp:(时间戳)
                   10.Date:(存储当前日期或时间的UNIX时间格式)
          MongoDB最基本命令:
                   show databases;      (查看已有数据库)
                   use dataname;     (选择数据库)
                   show tables;     (查看已有表(集合))
                   show collections;   (查看已有表(集合))
                   db.createCollection('表名')       (建表(集合))
                   db.集合名.drop()       (删除集合)
                   db.dropDatabase()         (删除库)
           MongoDB的增 删 改操作:
                   db.集合名.insert(document)      (数据的添加)
                   db.集合名.save(document)    (如果存在就更新,不存在就添加)
                   db.集合名.update(query,update,multi)   (query:查询条件,类似于sql语句update中的where部分
                                                          update:修改操作符,类似于sql语句update的set部分
                                                          multi:可选,默认是false,表示只修改找到的第一条记录,值为true表示把满足条件的文档全部修改)
                   db.集合名.remove(query)    (删除数据,query为删除条件)

           MongoDB的查询操作:
                    db.集合名.find({条件文档})    (查找所有的匹配数据)
                    db.集合名.findOne({条件文档})    (只返回匹配的第一个数据)
                    db.集合名.find().limit(number)    (用于读取指定数量的文档)
                    db.集合名.find().limit(number).skip(number)    (用于跳过指定数量的文档查询指定数量的文档)
                    db.集合名.find().sort({age:1/-1})    (参数为1为升序  参数为-1为降序)
                    db.集合名.find({条件}).count()    (用于统计·结果·集中文档条数)
                    db.集合名.distinct('age')    (对年龄进行去重)
                    db.集合名.find({'age':{$exists:true/false}})    (查询年龄存在/不存在的数据)
           MongoDB中的比较符号:
                    db.student.find({'age':{'$eq':20}}) ---->>>年龄等于20
                                    {'age':{'$lt':20}} ---->>>年龄小于20
                                    {'age':{'$gt':20}} ---->>>年龄大于20
                                    {'age':{'$lte':20}} ---->>>年龄小于等于20
                                    {'age':{'$gte':20}} ---->>>年龄大于等于20
                                    {'age':{'$ne':20}} ---->>>年龄不等于20
                                    {'age':{'$in':[20,30]}} ---->>>年龄在20-30范围内 包括20和30
                                    {'age':{'$nin':[20,30]}} ---->>>年龄不在20-30范围内
                                    {'$or':[{'age':20},{'name':'张三'}]} ---->>>查询年龄是20的和查询名字是张三的数据
 
  ======================================================================================================================
  python与MongoDB的交互操作:
               1.导入                import pymongo
               2.链接客户端            client = pymongo.MongoClient('localhost',27017)
               3.获取要操作的数据库     db = client.数据库名   或   client['数据库名']
              4.获取集合              collection = db.集合名   或   collection = db['集合名 
 ']
      对MongoDB中的数据进行操作:
                1.添加数据:    s1={'name':'张三','age':26}
                             s2=[{},{},{},{},{}]
                             collection.insert_one(s1) ---->>>向集合中添加s1数据
                             collection.insert_many([{},{}]/s2)

                2.更新数据:     collection.update_one({'name':'张三'},{'$set':{'age':12}})   --->>>($set用于保存其他数据)
                              collection.update_many({'name':'张三'},{'$set':{'age':12}})   --->>>(将所有名字是张三的人的年龄设置为12)

                3.删除数据:    collection.delete_one({'name':'张三'})
                              collection.delete_many({'age':{'$gte':20}})

                4.查询数据:    collection.find()   (查询全部 也可以设定查询条件 collection.find({'name':'张三'}))
                              collection.find_one()
                          collection.find({'name':{'$regex':'.*三.*'}})  --->>>查询姓名中包含 二 的数据(.*三 属于正则表达式 表示三前面是任意字符任意长度)
 
                 5.对查询结果进行排序操作:
                           collection.find().sort('age',pymongo.ASCENDING)  ---->>>升序排列 (返回的是一个列表,可以进行遍历显示能好看点)
                           collection.find().sort('age',pymongo.DESCENDING)  ----->>>降序排列
 
                           collection.find().sort('age',pymongo.ASCENDING).limit(3)  --->>>显示升序排列后前三条数据

                         collection.find().sort('age',pymongo.ASCENDING).skip(3).limit(3)  --->>>查询升序排列后跳过前三条数据再查询之后三条数据

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@苇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值