- 订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000+
python项目实战
Python编程基础教程系列(零基础小白搬砖逆袭)
- 说明:本专栏持续更新中,目前专栏免费订阅,在转为付费专栏前订阅本专栏的,可以免费订阅付费专栏,可报销(名额有限,先到先得)。
即将转为付费专栏,更多详细请看,五一会有优惠活动哦。
关于专栏〖Python网络爬虫实战〗转为付费专栏的订阅说明
- 作者:爱吃饼干的小白鼠。Python领域优质创作者,2022年度博客新星top100入围,荣获多家平台专家称号。
最近更新
〖Python网络爬虫实战㉑〗- 数据存储之JSON操作
🌟上节回顾
我们在上一节博客中,和大家介绍了TXT保存,CSV文件保存,JSON保存,今天,我们来说说数据库。
⭐️数据库
常见的数据库类型包括关系型数据库、非关系型数据库、文档数据库、图形数据库等。关系型数据库是目前最常见的数据库类型,它以表格的形式存储数据,表格中包含了每个记录的键值和指定列的值。非关系型数据库则侧重于对原始数据的保存和管理,通常不包含显式的结构化查询语言。文档数据库则专注于文档的管理和处理,如Word文档、PDF文件等。图形数据库则用于存储和管理图形、图像等非结构化数据。
🌟关系数据库
关系型数据库是基于关系模型的数据库,而关系模型是通过二维表来保存的,所以它的存储方式就是行列组成的表,每一列是一个字段,每一行是一条记录。表可以看作某个实体的集合,而实体之间存在联系,这就需要表与表之间的关联关系来体现,如主键外键的关联关系。多个表组成一个数据库,也就是关系型数据库。
关系型数据库有多种,如 SQLite、MySQL、Oracle、SQL Server、DB2 等,本节我们主要来了解下 MySQL 数据库的存储操作。
✨1. 准备工作
除了安装好 MySQL 数据外,还需要安装好 PyMySQL 库,如尚未安装 PyMySQL,可以使用 pip3 来安装:
pip3 install pymysql
二者都安装好了之后,我们就可以开始本节的学习了。我们这里,就不介绍两者的安装介绍。
✨2. 连接数据库
这里首先尝试连接一下数据库。假设当前的 MySQL 运行在本地,用户名为 root,密码为 123456,运行端口为 3306。这里利用 PyMySQL 先连接 MySQL,输出数据库的版本,代码如下:
import pymysql
db = pymysql.connect(host='localhost',user='root',password='123456',port=3306)
cursor = db.cursor()
cursor.execute('SELECT VERSION()')
data = cursor.fetchone()
print(data)
运行结果如下:
('8.0.32',)
我们可以看到自己数据库的版本号之后,就说明,我们数据库的安装和环境配置都没有问题。
✨3. 创建表
一般来说,创建数据库的操作只需要执行一次就好了。当然,我们也可以手动创建数据库。以后,我们的操作都在 spiders 数据库上执行。
创建数据库后,在连接时需要额外指定一个参数 db
。
接下来,新创建一个数据表 students,此时执行创建表的 SQL 语句即可。这里指定 3 个字段,结构如表所示。
字 段 名 | 含 义 | 类 型 |
---|---|---|
id | 学号 | varchar |
name | 姓名 | varchar |
age | 年龄 | int |
我们看看这样的示例代码怎么写。
import pymysql
db = pymysql.connect(host='localhost', user='root', password='123456', port=3306, db='spiders')
cursor = db.cursor()
sql = 'CREATE TABLE IF NOT EXISTS students (id VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, age INT NOT NULL, PRIMARY KEY (id))'
cursor.execute(sql)
db.close()
运行之后,我们便创建了一个名为 students 的数据表。
当然,我们这里为了演示,这里只指定了最简单的几个字段。实际上,在爬虫过程中,我们会根据爬取结果设计特定的字段。
我们还可以进行插入数据,查询数据,删除数据等等操作,我们就不过多解释。
🌟非关系型数据库
NoSQL,全称 Not Only SQL,意为不仅仅是 SQL,泛指非关系型数据库。NoSQL 是基于键值对的,而且不需要经过 SQL 层的解析,数据之间没有耦合性,性能非常高。
非关系型数据库又可细分如下:
- 键值存储数据库:其代表有 Redis、Voldemort 和 Oracle BDB 等。
- 列存储数据库:其代表有 Cassandra、HBase 和 Riak 等。
- 文档型数据库:其代表有 CouchDB 和 MongoDB 等。
- 键值存储数据库:其代表有 Redis、Voldemort 和 Oracle BDB 等。
- 图形数据库:其代表有 Neo4J、InfoGrid 和 Infinite Graph 等。
对于爬虫的数据存储来说,一条数据可能存在某些字段提取失败而缺失的情况,而且数据可能随时调整。另外,数据之间还存在嵌套关系。如果使用关系型数据库存储,一是需要提前建表,二是如果存在数据嵌套关系的话,需要进行序列化操作才可以存储,这非常不方便。如果用了非关系型数据库,就可以避免一些麻烦,更简单、高效。
本节中,我们主要介绍 MongoDB 存储操作。
MongoDB 是由 C++ 语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似 JSON 对象,它的字段值可以包含其他文档、数组及文档数组,非常灵活。在这一节中,我们就来看看 Python 3 下 MongoDB 的存储操作。
✨1. 准备工作
除了安装好 MongoDB 数据库,我们还需要安装好 Python 的 PyMongo 库,如尚未安装,可以使用 pip3 来安装:
pip3 install pymongo
安装好 MongoDB 数据库和 PyMongo 库之后,我们便可以开始后面的学习了。
✨2. 连接 MongoDB
连接 MongoDB 时,我们需要使用 PyMongo 库里面的 MongoClient
。一般来说,传入 MongoDB 的 IP 及端口即可,其中第一个参数为地址 host
,第二个参数为端口 port
(如果不给它传递参数,默认是 27017):
import pymongo
client = pymongo.MongoClient(host='localhost', port=27017)
这样就可以创建 MongoDB 的连接对象了。在这里,我们同样可以对这些进行操作,比如,写入,删除之类的,我就不过多介绍,大家可以去官网看看具体的用法。
⭐️总结
本节讲解了使用 MYSQL和 MongoDB 两种数据库,后面我们会在实战案例中应用这些操作进行数据存储。