Python3网络爬虫课程5.3非关系型数据库存储

NoSQL,全称为Not Only SQL,不仅仅是SQL,泛指非关系型数据库。

NoSQL是基于键值对的存储,不需要进行SQL层的解析,数据之间没有耦合性,性能高。

非关系型数据库可以分为以下几类:

对于爬虫爬取的数据来说,可能会有数据缺失、数据结构嵌套等情况,如果使用关系型数据库村粗的话,需要提前建表,而且表之间的关系关系,数据的序列化等都比较麻烦。如果使用非关系型数据库存储的话,就比较方便了。

本节主要讲解MongoDB的使用。 MongoDB是一个C++编写的、基于分布式文件存储的开源的非关系型数据库系统。其内容存储形式类似于JSON对象,非常灵活。

1. 准备工作

需要安装MongoDB和PyMongo库,第一节“环境配置”都有讲,这里略过。

2. 连接MongoDB

我们使用PyMongo中的MongoClient来连接MongoDB。

另外,还可以使用下面这种方式连接MongoDB。

3. 指定数据库

MongoDB中一般存在很多数据库,怎么指定我们需要操作的数据库呢?

也可以使用这种方式指定。

4. 指定集合

每个数据库包含很多的集合,集合就相当于关系型数据库中的表,怎么指定我们操作的集合呢?

也可以这样写,等价于上面。

5. 插入数据

对于上面的person集合,演示一下怎么插入一条数据。

执行结果如下:

如果插入多条数据呢?我们可以使用insert_many().

执行结果如下:

6. 数据查询

可以使用find_one()方法或find()方法进行查询.

find_one()返回单个结果,find()返回的是生成.

这里查询name=Amy的人, 其返回类型为字典类型.

如果要查询多条结果,使用find()方法.

执行结果如下:

如果要返回年龄大于20的数据,怎么写呢?

$gt表示大于号,其他比较符号如下所示:

另外还可以使用正则匹配:

下面是一些特殊符号的说明:

打开凤凰新闻,查看更多高清图片

7. 计数

调用count_documents()方法,就可以查询有多少条数据。

如果统计符合某条件的数据的数量,可以传入条件:

8. 排序

直接调用sort()方法就可以排序,传入参数可以设置其为升序还是降序:

执行结果如下:

9. 偏移

如果我们只想取某几个元素或某些元素,可以使用skip()方法跳过一些元素,取到我们需要的元素:

还可以使用limit()方法指定要取的结果的个数。

10. 更新

使用update_one和updae_many()方法就可以更新数据,只需要指定更新的条件和更新后的数据。

还可以指定某个条件,给其age加1:

上面调用的find_one()和update_one()方法,如果批量更新的话,可以这样:

11. 删除

删除操作比较简单,直接调用delete_one()或者delete_many()方法,传入条件即可,符合条件的所有数据都会被删除。

12. 其他

PyMongo还提供了一些其他的方法,如find_one_and_delete()、find_one_and_replace()、

find_one_and_update()、create_index()、create_indexes()、drop_index()等。

不再一一赘述,有需要的话请查询PyMongo文档。