爬虫之MongoDB存储上

一 点睛

MongoDB是由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包含其他文档、数组及文档数组,非常灵活。

二 安装

(venv) E:\WebSpider>pip install pymongo

三 连接MongoDB

import pymongo
# 一般来说,传入MongoDB的IP及端口即可,其中第一个参数为地址host,
# 第二个参数为端口port(如果不给它传递参数,默认是27017)
# client = pymongo.MongoClient(host='localhost', port=27017)
# MongoClient的第一个参数host还可以直接传入MongoDB的连接字符串,它以mongodb开头
client = pymongo.MongoClient('mongodb://localhost:27017/')

四 指定数据库

1 点睛

MongoDB中可以建立多个数据库,接下来我们需要指定操作哪个数据库。这里我们以test数据库为例来说明。

2 代码

import pymongo
client = pymongo.MongoClient('mongodb://localhost:27017/')
# client的test属性即可返回test数据库。
db = client.test
# 指定数据库的第二种方法
# db = client['test']

五 指定集合

1 点睛

MongoDB的每个数据库又包含许多集合(collection),它们类似于关系型数据库中的表。

下一步需要指定要操作的集合,这里指定一个集合名称为students。

2 代码

import pymongo

client = pymongo.MongoClient('mongodb://localhost:27017/')
# client的test属性即可返回test数据库。
db = client.test
# 指定数据库的第二种方法
# db = client['test']
# 指定集合的第一种方法
collection = db.students
# 指定集合的第二种方法
#collection = db['students']

六 插入数据

1 插入单条数据

1.1 代码

import pymongo
# 一般来说,传入MongoDB的IP及端口即可,其中第一个参数为地址host,
# 第二个参数为端口port(如果不给它传递参数,默认是27017)
client = pymongo.MongoClient(host='localhost', port=27017)
# MongoClient的第一个参数host还可以直接传入MongoDB的连接字符串,它以mongodb开头
#client = pymongo.MongoClient('mongodb://localhost:27017/')
# client的test属性即可返回test数据库。
db = client.test
# 指定数据库的第二种方法
# db = client['test']
# 指定集合的第一种方法
collection = db.students
# 指定集合的第二种方法
#collection = db['students']
# 定了学生的学号、姓名、年龄和性别。
student = {
    'id': '20170101',
    'name': 'Jordan',
    'age': 20,
    'gender': 'male'
}
# 直接调用collection的insert()方法即可插入数据
result = collection.insert(student)
print(result)

1.2 结果

E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/5_3_1.py
5c3b33f518db4d08e1247e94

1.3 说明

在MongoDB中,每条数据其实都有一个_id属性来唯一标识。如果没有显式指明该属性,MongoDB会自动产生一个ObjectId类型的_id属性。insert()方法会在执行后返回_id值。

2 插入多条数据

2.1 代码

import pymongo
# 一般来说,传入MongoDB的IP及端口即可,其中第一个参数为地址host,
# 第二个参数为端口port(如果不给它传递参数,默认是27017)
client = pymongo.MongoClient(host='localhost', port=27017)
# MongoClient的第一个参数host还可以直接传入MongoDB的连接字符串,它以mongodb开头
#client = pymongo.MongoClient('mongodb://localhost:27017/')
# client的test属性即可返回test数据库。
db = client.test
# 指定数据库的第二种方法
# db = client['test']
# 指定集合的第一种方法
collection = db.students


student1 = {
    'id': '20170101',
    'name': 'Jordan',
    'age': 20,
    'gender': 'male'
}

student2 = {
    'id': '20170202',
    'name': 'Mike',
    'age': 21,
    'gender': 'male'
}

result = collection.insert([student1, student2])
print(result)

2.2 结果

E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/5_3_1.py
[ObjectId('5c3b34d318db4d4d29a26f17'), ObjectId('5c3b34d318db4d4d29a26f18')]

3 insert_one()方法

3.1 点睛

在PyMongo 3.x版本中,官方已经不推荐使用insert()方法了。当然,继续使用也没有什么问题。官方推荐使用insert_one()和insert_many()方法来分别插入单条记录和多条记录。

3.2 代码

import pymongo
# 一般来说,传入MongoDB的IP及端口即可,其中第一个参数为地址host,
# 第二个参数为端口port(如果不给它传递参数,默认是27017)
client = pymongo.MongoClient(host='localhost', port=27017)
# MongoClient的第一个参数host还可以直接传入MongoDB的连接字符串,它以mongodb开头
#client = pymongo.MongoClient('mongodb://localhost:27017/')
# client的test属性即可返回test数据库。
db = client.test
# 指定数据库的第二种方法
# db = client['test']
# 指定集合的第一种方法
collection = db.students

student = {
    'id': '20170101',
    'name': 'Jordan',
    'age': 20,
    'gender': 'male'
}

result = collection.insert_one(student)
print(result)
print(result.inserted_id)

3.3 结果

E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/5_3_1.py
<pymongo.results.InsertOneResult object at 0x0000018C8D03C548>
5c3b359518db4d3e7573a631

3.4 说明

与insert()方法不同,这次返回的是InsertOneResult对象,我们可以调用其inserted_id属性获取_id。

4 insert_many()方法

4.1 点睛

对于insert_many()方法,我们可以将数据以列表形式传递。

4.2 代码

import pymongo
# 一般来说,传入MongoDB的IP及端口即可,其中第一个参数为地址host,
# 第二个参数为端口port(如果不给它传递参数,默认是27017)
client = pymongo.MongoClient(host='localhost', port=27017)
# MongoClient的第一个参数host还可以直接传入MongoDB的连接字符串,它以mongodb开头
#client = pymongo.MongoClient('mongodb://localhost:27017/')
# client的test属性即可返回test数据库。
db = client.test
# 指定数据库的第二种方法
# db = client['test']
# 指定集合的第一种方法
collection = db.students
student1 = {
    'id': '20170101',
    'name': 'Jordan',
    'age': 20,
    'gender': 'male'
}

student2 = {
    'id': '20170202',
    'name': 'Mike',
    'age': 21,
    'gender': 'male'
}

result = collection.insert_many([student1, student2])
print(result)
print(result.inserted_ids)

4.3 结果

E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/5_3_1.py
<pymongo.results.InsertManyResult object at 0x000001FC87EB8708>
[ObjectId('5c3b365618db4de700deaaf4'), ObjectId('5c3b365618db4de700deaaf5')]

4.4 说明

该方法返回的类型是InsertManyResult,调用inserted_ids属性可以获取插入数据的_id列表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值