数据存储——CSV文件与mongoDB

本文主讲:将爬取下来的数据持久化存储到CSV文件内或存到mongoDB数据库内、Mysql数据库内,简单的二级爬虫框架等

爬取数据持久化存储(csv)【重点】

python 标准库模块 csv 的使用方法及功能

功能:将数据写入到 csv 文件的模块
语法:

1
2
3
4
5
import csv
with open (“文件名.csv”,“打开方式”) as 文件别名:
写作对象 = csv.writer(文件别名)
写作对象.writerow(列表) →→→→→→→→→→ 单行数据写入 csv 文件
写作对象.writerows(列表内嵌套元组) →→→→→→→→→→ 多行数据写入 csv 文件,其中一个元组代表一行数据!

两种写入方法:

写作对象.writerow(列表):这是将数据单行写入到 csv 文件内,一个列表元素是一个字段

写作对象.writerows(列表内嵌套元组):这是将数据多行写入到 csv 文件内,一个列表内元组是一行记录

图示:

单行数据写入

image-20211013093811033

多行数据写入

image-20211013093818574

将数据保存至 csv 文件的一些问题处理方法

出现什么问题?

答:多行数据保存时,每行数据下面会多出一行空行(windows专属,linux没有这种问题),这该怎么解决呢

怎么解决?

答:打开文件时加上参数 newline = “” 即可解决!!!

代码演示:

image-20211013093837101

数据持久化存储(mysql)【重点】

python 与 mysql 数据库交互的步骤

第一步:导入 pymysql 模块

第二步:创建铁路对象 way_obj = pymysql.connect(host = 主机,user = 用户名,password = 数据库密码,database = 交互数据库名)

第三步:在铁路对象上创建游标对象 cursor_obj = way_obj.cursor()

第四步:将数据插入到数据库内(两种方法)

1(单行数据插入): cursor_obj.execute(SQL语句,数据列表)

2(多行数据插入):cursor_obj.executemany(SQL语句,列表内嵌套元组数据)

第五步:将更改提交到数据库 way_obj.commit( ) 注意是铁道对象提交,针对mysql数据库的事务特性!

第六步:关闭游标对象 cursor_obj.close()

第七步:关闭铁道对象 way_obj.close( )

截图演示:

image-20211013093857877

将数据存储到数据库的两种方法(单记录插入、多记录插入)

单行数据插入方法—— execute()

功能:将单行数据(列表)插入到数据库内!

语法:游标对象.execute(参数1,参数2)

参数1:SQL语句
参数2:列表数据,所有列表数据就是一行记录

代码演示:

image-20211013093910839

多行数据插入方法—— executemany()

功能:将多行数据(列表内嵌套元组)插入到数据库内

语法:游标对象.executemany(参数1,参数2)

参数1:SQL语句
参数2:列表内嵌套元组,一个元组内所有数据就是数据库内的一行数据!

注意事项:列表内嵌套元组,其中一个元组内的数据就是一行记录

代码演示:

image-20211013093938395

注意事项:多行数据插入方法(executemany)比单行数据插入方法(execute)效率要快的多,因为计算机 i/o次数减少很多!!!

mongoDB数据库基本操作【重点】

mysql、mongoDB、redis数据库的端口号

mysql:3306

mongoDB:27017

redis:6379

mongoDB 数据库的详解

特征:mongoDB数据库是非关系型数据库(开源、免费),以键值对的形式存储数据,存放数据的数据类型为 json 文档,且mongoDB是基于磁盘存储数据(redis基于内存存储数据)

mongoDB数据库与mysql数据库的对比分析:

mysql数据库:

定义:关系型数据库

结构:数据库→数据表→数据表记录

基于存储:不同引擎不同存储方式

存储数据时是否需要提前建表:是

存储模式:静态模式

查询语言:SQL语言

mongoDB数据库:

定义:非关系型数据库

结构:数据库→数据集合→json文档(字典)

基于存储:基于磁盘存储(虚拟内存+持久化)

存储数据时是否需要提前建集合:否

存储模式:动态模式(不需要提前建数据集合以及字段什么的)

查询语言:独特的mongoDB语言

优势:分布式集群

缺点:不支持事务!

注意事项:

1:mongoDB 数据库内的数据集合里面可以存放好多条 json文档(字典)

2:每一个 json 文档就是一个字典!

mongoDB数据库的基本操作(安装、查看数据库、删除数据库等等)

1.mongoDB数据库安装步骤(linux-ubuntu系统):

安装指令:sudo apt-get install mongdb

截图:

image-20211013094020403

2.查看mongoDB数据库内的所有数据表

指令:show dbs

截图:

image-20211013094043171

3 . 进入(切换)数据库
指令:use 数据库名
截图:

image-20211013094055168

4 . 查看当前所在的数据库内所有集合
指令:show collections
截图:

image-20211013094105537

  1. 查看当前数据库内的数据集合里面有哪些文档

语法:
正常查询输出:db.集合名.find()
格式化查询输出:db.集合名.find().pretty()

截图:

image-20211013094118675

  1. 查看当前数据库内的数据集合里面的文档数量
    语法:db.数据集合名.count()
    截图:

image-20211013094127336

7.删除数据库内的指定集合
语法:db.指定数据集合名.drop()
截图:

image-20211013094138284

8.删除指定数据表
语法:db.dropDatabase( )
截图:

image-20211013094144723

9.查看当前所在数据库名
语法:db.getName()
截图:

image-20211013094153128

python 怎么与mongoDB数据库进行交互?

交互步骤:

第一步:导入模块 import pymongo

注意:pymongo不是标准库需要安装

linux终端安装指令:sudu pip3 install pymongo

第二步:创建mongo数据库连接客户对象 con_obj = pymongo.MongoClient(host = 当前主机,port = 端口号)

注意:

1:主机一般都是 127.0.0.1

2:mongoDB数据库的端口号是 27017

3:参数MongoClient方法的port参数数据类型是数字,不是字符串

第三步:创建数据库对象 db_obj = 连接对象[“数据库名”]

注意:数据库名可以是在mongoDB数据库内存在的,也可以是不存在的,存在则直接进行操作,不存在则先创建这个数据库在操作

第四步:创建数据集合对象 set_obj = 数据库对象[“数据集合名”]

第五步:向数据集合内插入文档

插入单条文档数据方法:数据库集合对象.insert_one(字典)

插入多条文档数据方法:数据库集合对象.insert_many(列表内嵌套字典)

注意事项:插入单条文档数据时一个字典就是一条文档数据,插入多条文档数据也是如此(一个字典是一个文档数据)

总体注意:在利用 python 与 mongoDB 数据库进行交互时,不需要提前建好数据库以及数据集合,这是与mysql数据库交互的不同之处!

代码演示:

image-20211013094223862

数据持久化存储(mongodb)【重点】

将数据持久化存储到mongoDB数据库的两种方法

1.单条数据文档插入存储方法——数据集合对象.insert_one({})

功能:将单条文档数据(字典)插入到建好的mongoDB数据库的数据集合内

语法:数据集合对象.insert_one({})

注意:insert_one({})方法里面的参数是字典,一个字典就代表一个文档数据

截图:

image-20211013094245938

2.多条数据文档插入存储方法——数据集合对象.insert_many( [ {},{},{},{} ] )

功能:将多条文档数据(列表内嵌套字典)插入到建好的mongoDB数据库的数据集合内

语法:数据集合对象.insert_many( [ {},{},{},{} ] )

注意:insert_one({})方法里面的参数是列表内嵌套字典,一个字典就代表一个文档数据

截图:

image-20211013094301571

random模块的uniform方法【重点】

random 模块的 uniform 方法的使用

功能:随机生成指定区间的浮点数

语法:random.uniform(1,6) 随机生成1到6的浮点数

截图:

image-20211013094313020

简单的二级爬虫框架【重点】

注意:字太小先保存到计算机内在方法观看‘

未完待续…..