> 文档中心 > Python爬虫存储数据

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.active3.获取单元格   sheet[单元格名称('A1')] 4.向单元格中写入数据    cell.value = 值 5.向Excel中写入一行数据    sheet.append(列表) 6.保存Excel文件  wb.save()      从Excel中读取数据:1.加载工作簿对象openpyxl.load_workbook(文件名)2.获取活动工作表对象      wb.active3.获取单元格     sheet[单元格名称]4.获取单元格的值  cell.value5.获取一系列格子  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...在给定的值中进行选择的 in3.分组函数 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,类型为objectIDc.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)  --->>>查询升序排列后跳过前三条数据再查询之后三条数据