爬虫入门【8】Python连接MongoDB的用法简介

MongoDB的连年和数目存取

MongoDB是一种跨平台,面向文档的NoSQL数据库,提供高性能,高可用性并且易于扩大。
含蓄数据库,集合,文档等几个重点概念。
俺们在此地不介绍MongoDB的特色和用法了,感兴趣的可以查一下法定文档。
在此紧要介绍怎么样运用python连接MongoDB,并经过PyMongo操作MongoDB数据库。
那边默认MongoDB已经安装好啊,安装教程可以参照:
http://www.yiibai.com/mongodb/mongodb_environment.html
谢谢易百教程~

安装PyMongo

当前新型版本为3.5.1。请留意不要单独安装bson包了,否则会与PyMongo不包容。

动用MongoClient建立连接

应用PyMongo时,第一步是运作mongod实例成立一个MongoClient,代码如下:
自然,在行使代码测试以前,请务必保管MongoDB服务已经打开,否则连接不上的~~~~

from pymongo import MongoClient
client=MongoClient()
#这是设置连接默认主机和端口,也可以明确指定主机和端口

from pymongo import MongoClient
#client = MongoClient()
client = MongoClient('localhost', 27017)
#client = MongoClient('mongodb://localhost:27017/')
#上面几种方法都可以。

赢得数据库

倘若老是已经打响的话, 那么大家即将起来走访数据库了:
先是种方法是用Client实例的性能方法,也就是.DatabaseName的措施
一经大家的数据库名称为pyTest吧,看代码:

db=client.pyTest

其次种格局就是利用字典格局,看代码:

db=client['pyTest']

获得集合

收获数据库的连接后,大家就可以更加获得数据库中额集合了,也就是collection,类似与SQL中的数据表,用于保存数据。同样有两种办法,要是大家在pyTest数据库中留存一个叫first的表格。

collection=db.first
#collection=db['first']

值得注意的是,MongoDB中有关集合和数据库的创设,是不相同于传统SQL数据库的,他们是懒创造的,只有当出第三个文档(数据)插入集合时,才会创造集合和数据库。

文档(data)

在MongoDB中,存储的一个个数据就称为文档,是BSON格式的。用字典来表示文档,例如一个表示博客的文档:

post = {"author": "xingzhui",
         "text": "My first blog post!",
         "tags": ["mongodb", "python", "pymongo"],
         "date": datetime.datetime.utcnow()}
#可以看出文档是字典格式的,key-value对组成的,如果一个key对应多个value,需要用[]将所有的value包围起来。

布置文档

要将文档插入到集结中,可以动用insert_one()方法,那只是插入一条;
若是想要插入多条文档的话,那么就要选取insert_many()方法了。
多个格局的参数大概。举个栗子,假使下边我们的同步操作都顺遂的话。

#获取pyTest数据中名为posts的集合,如果该集合不存在,那么就创建他
posts = db.posts
#将post数据插入到posts里面,并获取插入的文档的主键id
post_id = posts.insert_one(post).inserted_id
print ("post id is ", post_id)

#我们将上面的语句拆分一下
result=db.posts.insert_one(post)
print(result.inserted_id)

俺们再讲一个insert_many()的栗子:

>>> db.test.count()
0
>>> result = db.test.insert_many([{'x': i} for i in range(2)])
>>> result.inserted_ids
[ObjectId('54f113fffba522406c9cc20e'), ObjectId('54f113fffba522406c9cc20f')]
>>> db.test.count()
2

值得注意的是,倘诺文档不包括_id字段,会活动抬高_id,并且_id的值在汇集中务必是绝无仅有的。
若是我们想要列出该数据库中的所有集合,能够动用上面的代码:

cur_collection=db.collection_names(False)
print(cur_collection)

使用find_one()获取单个文档

MongoDB中履行的最简便易行的询问类型是find_one(),重临与查询匹配的单个文档,若是没有获得到非常的文档,重回None。唯有当知道唯有一个极度的文档,或者只对第三个门当户对感兴趣时,可以考虑采用find_one()方法。
下边举个例子:

#获取第一个文档,结果就是之前插入的字典格式,并且多了一个_id。
post_first=db.posts.find_one()
print(post_first)

#获取具有匹配的特定元素,比如author为xingzhui的文档,作为指定的查询条件。
post_xingzhui=db.posts.find_one({'author':'xingzhui'})
print(post_xingzhui)

通过ObjectId查询

奇迹,我们也得以通过_id找到一个post,相比较适用于咱们自行指定_id的时候,举个例子:

post = {"_id": 200,
         "author": "Suifeng",
         "text": "This is is my first post!",
         "tags": ["Docker", "Shell", "pymongo"],
         "date": datetime.datetime.utcnow()}

post_id=db.posts.insert_one(post).inserted_id
print(post_id)

post_user=db.posts.find_one({'_id':post_id})
print('By Post ID:',post_user['author'])

#输出结果
200
By Post ID: Suifeng

批量安顿 insert_many()

为了适应更复杂的查询,大家再向posts集合中再插入一些文档。
出了插入单个文档外,还可以插入多个文档,使用insert_many()来执行。
经过一个限令,插入多个文档。
举个例证:

new_posts = [{"_id": 1000,
               "author": "Curry",
               "text": "Another post!",
               "tags": ["bulk", "insert"],
               "date": datetime.datetime(2017, 11, 12, 11, 14)},
              {"_id": 1001,"author": "Maxsu",
               "title": "MongoDB is fun",
               "text": "and pretty easy too!",
               "date": datetime.datetime(2019, 11, 10, 10, 45)}]

result=db.posts.insert_many(new_posts)
print('Bulk Inserts Result is:',result.inserted_ids)

值得注意的是:
insert_many()的结果回到了四个ObjectId实例,每个ID表示插入的一个文档。
其它的是,大家在首个post中把tag字段替换成了title字段,同样可以插入到数据库中。
MongoDB是无形式的,表示的就是其一意思。

询问七个文档

要查询拿到超越单个文档作为查询的结果,可以接纳find()方法,find()重临一个Cursor实例,它同意遍历所有匹配的文档。

for post in db.posts.find():
    print(post)

同一的大家得以将过滤参数传递给find方法,比如

for post in db.posts.find({'author':'xingzhui'}):
    print(post)

计数计算

如果只想领悟有多少文档匹配查询,可以举办count()方法操作,而不是一个完好无损的询问。
可以赢得一个聚众中的所有文档的计数:

print(db.posts.count())
print(db.posts.find({"author": "xingzhui"}).count())

好了,至此我们曾经将爬虫中或者用到的富有基础知识都介绍了几次,后边大家就要起来爬虫的实战了。
我打算用一个月的时日,将静态网页、动态网页、登陆验证等不等类其余爬虫方法做牵线,希望大家能有趣味。
一路前行!

图片 1

网站地图xml地图