ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

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

2021-11-07 10:33:17  阅读:294  来源: 互联网

标签:存储 进阶 mydb myclient 爬虫 文档 MongoDB pymongo mycol


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)

标签:存储,进阶,mydb,myclient,爬虫,文档,MongoDB,pymongo,mycol
来源: https://www.cnblogs.com/luyj00436/p/15434351.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有