爬虫与Python:(四)爬虫进阶二之数据存储(数据库存储)——6.MongoDB存储

MongoDB是由C++ 语言编写的,它是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,开源保证服务器的性能。MongoDB旨在为Web服务器提供可扩展性的存储解决方案。它将数据存储为一个文档,数据由键值(key => value)组成。MongoDB文档类似于JSON对象。字段值开源包含其他文档、数组及文档数组。

基于这些优势,所以经常在爬虫中涉及数据保存到MongoDB中,以便数据清洗。要确保已安装MongoDB。安装教程详见:https://www.cnblogs.com/luyj00436/p/15514788.html

安装驱动

在Python中,要连接和使用mongoDB,就需要MongDB驱动,这里使用PyMongoDB驱动来连接。用户可以使用pip命令来安装。

python3 -m pip3 install pymongo

安装完成后,创建一个测试文件demo_test_mongodb.py。执行以下代码,如果没有出现错误,则表示安装成功。

import pymongo

1. 创建数据库

创建数据库需要使用MongoClient对象,并且指定连接的URL地址和数据库名称。在以下示例中,创建数据test_db。

1 import pymongo
2 
3 # 创建数据库
4 myclient = pymongo.MongoClient("mongodb://localhost:27017")
5 mydb = myclient["test_db"]

2. 创建集合

MongoDB的集合类似SQL 的表。MongoDB使用数据库来创建集合,示例代码如下:

1 import pymongo
2 
3 # 创建集合
4 myclient = pymongo.MongoClient("mongodb://localhost:27017")
5 mydb = myclient["test_db"]
6 mycol = mydb["site"]    # 创建集合

在MongoDB中,集合只有自内容插入后才会创建。也就是说,创建集合(数据表)后要再插入一个文档(记录),集合才会真正的创建。

3. 插入文档

MongoDB中的一个文档类似SQL表中的一条记录。在集合中插入文档使用insert_one()方法,该方法的第一个参数是字典name=>value对。以下示例向sites集合中插入文档。

 1 import pymongo
 2 
 3 # 插入文档
 4 myclient = pymongo.MongoClient("mongodb://localhost:27017")
 5 mydb = myclient["test_db"]
 6 mycol = mydb["site"]    # 创建集合
 7 
 8 mydict = {"name":"张三", "age":23 , "gender":""}
 9 x = mycol.insert_one(mydict)
10 print(x)

运行后控制台会输出:

4. 插入多个文档

在集合中插入多个文档适用insert_many()方法,该方法的第一参数是字典列表,示例代码如下:

 1 import pymongo
 2 
 3 # 插入多个文档
 4 myclient = pymongo.MongoClient("mongodb://localhost:27017")
 5 mydb = myclient["test_db"]
 6 mycol = mydb["site"]    # 创建集合
 7 
 8 mylist =[
 9     {"name":"张三","age":23,"gender":""},
10     {"name":"李四","age":23,"gender":""},
11     {"name":"张三","age":23,"gender":""},
12     {"name":"张三","age":23,"gender":""},
13 ]
14 x = mycol.insert_many(mylist)
15 # 输入插入的所有文档对应的id值
16 print(x.inserted_ids)

运行后控制台输出:

5.  查询文档

MongoDB使用了find和find_one方法来查询集合中的数据,它类似SQL中的SELECT语句。用户可以使用find_one()方法来查询集合中的一条数据,下面查询sites文档中的一条数据,代码如下:

1 import pymongo
2 
3 # 查询单个文档
4 myclient = pymongo.MongoClient("mongodb://localhost:27017")
5 mydb = myclient["test_db"]
6 mycol = mydb["site"]
7 
8 x = mycol.find_one()
9 print(x)

运行后,控制台会输出当前值:

{'_id': ObjectId('6185268a346c50e66086702c'), 'name': '张三', 'age': 23, 'gender': ''}

6. 查询集合中所有数据

find()方法可以查询集合中所有数据,类似于SQL中的SELECT * 操作。以下示例代码查找sites集合中的所有数据。

1 import pymongo
2 
3 # 查询集合中所有数据
4 myclient = pymongo.MongoClient("mongodb://localhost:27017")
5 mydb = myclient["test_db"]
6 mycol = mydb["site"]
7 
8 for x in mycol.find():
9     print(x)

7.修改数据

用户可以在MongoDB中使用update_one()方法修改文档中的记录。该方法第一个参数为查询的条件,第二个参数为要修改的字段。如果查找到的匹配数据多于一条,则会修改第一条。

 1 import pymongo
 2 
 3 # 修改第一条name等于张三的属性为age为20
 4 myclient = pymongo.MongoClient("mongodb://localhost:27017")
 5 mydb = myclient["test_db"]
 6 mycol = mydb["site"]
 7 
 8 myquery={"name":"张三"}
 9 newvalues = {"$set":{"age":20}}
10 mycol.update_one(myquery , newvalues)
11 
12 for x in mycol.find():
13     print(x)
posted @ 2021-11-07 10:15  陆陆无为而治者  阅读(167)  评论(0编辑  收藏  举报