爬虫入门【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())
好了,至此我们已经将爬虫中可能用到的所有基础知识都介绍了一遍,后面我们就要开始爬虫的实战了。
我打算用一个月的时间,将静态网页、动态网页、登陆验证等不同类型的爬虫方法做介绍,希望大家能有兴趣。
一起进步!

爬虫入门【8】Python连接MongoDB的用法简介的更多相关文章
- Python 连接MongoDB并比较两个字符串相似度的简单示例
本文介绍一个示例:使用 pymongo 连接 MongoDB,查询MongoDB中的 字符串 记录,并比较字符串之间的相似度. 一,Python连接MongoDB 大致步骤:创建MongoClient ...
- Python连接MongoDB数据库并执行操作
原文:https://blog.51cto.com/1767340368/2092813 环境设置: [root@mongodb ~]# cat /etc/redhat-release CentOS ...
- 左手Mongodb右手Redis 通过python连接mongodb
首先需要安装第三方包pymongo pip install pymongodb """ 通过python连接mongodb数据库 首先需要初始化数据库连接 "& ...
- python连接mongodb数据库
之前使用过python连接mysql数据库(用到pymysql库),公司也有使用mongodb数据库,所以就整理了一份python连接mongodb数据库的代码出来,以供记录和分享. 首先我们要用到 ...
- Python爬虫入门之Urllib库的高级用法
1.设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性. 首先,打开我们的浏览 ...
- python爬虫27 | 当Python遇到MongoDB的时候,存储av女优的数据变得如此顺滑爽~
上次 我们知道了怎么操作 MySQL 数据库 python爬虫26 | 把数据爬取下来之后就存储到你的MySQL数据库. MySQL 有些年头了 开源又成熟又牛逼 所以现在很多企业都在使用 MySQL ...
- MongoDB聚合查询及Python连接MongoDB操作
今日内容概要 聚合查询 Python操作MongoDB 第三方可视化视图工具 今日内容详细 聚合查询 Python操作MongoDB 数据准备 from pymongo import MongoCli ...
- python连接MongoDB
1.安装pymongo库 windows下: pip install pymongo 或者 easy_install install pymongo 2.使用pymongo模块连接mongoDB数据库 ...
- 芝麻HTTP: Python爬虫入门之Urllib库的高级用法
1.设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性. 首先,打开我们的浏览 ...
随机推荐
- xunsearch使用namespace后bug修复
xunsearch在使用了namespace后会出现不能正常使用 错误例如以下: Fatal error: Uncaught [vendors\xunsearch\lib\XSException] . ...
- 【POJ 1080】 Human Gene Functions
[POJ 1080] Human Gene Functions 相似于最长公共子序列的做法 dp[i][j]表示 str1[i]相应str2[j]时的最大得分 转移方程为 dp[i][j]=max(d ...
- MongoDB笔记(一):MongoDB介绍及Windows下安装
一.前言 MongoDB火了也蛮久了,关于简介看看这里吧.项目中一直没用上,最近闲的慌就自己学了下,顺便记录下以便今后复习. 本系列是基于MongoDB 2.4.8 windows 64位讲解,后面的 ...
- C# 播放H264裸码流
要播放H264裸码流,可以分拆为以下三个工作: 1.解码H264裸码流获取YUV数据 2.将YUV数据转换为RGB数据填充图片 3.将获取的图片进行显示 要完成工作1,我们可以直接使用海思的解码库,由 ...
- 字符串算法之 AC自己主动机
近期一直在学习字符串之类的算法,感觉BF算法,尽管非常easy理解,可是easy超时,全部就想学习其它的一些字符串算法来提高一下,近期学习了一下AC自己主动机.尽管感觉有所收获,可是还是有些朦胧的感觉 ...
- useradd命令
◆useradd 1.作用 useradd命令用来建立用户帐号和创建用户的起始目录,使用权限是超级用户. 2.格式 useradd [-d home] [-s shell] [-c comment] ...
- 时间序列 R 读书笔记 04 Forecasting: principles and practice
本章開始学习<Forecasting: principles and practice> 1 getting started 1.1 事件的可预言性 一个时间能不能被预言主要取决于以下三点 ...
- match函数
match(s, r [, a]) Return the position in s where the regular expression r occurs, or 0 if r is not p ...
- 实战Jquery(二)--能够编辑的表格
今天实现的是一个表格的样例,通过获取表格的奇数行,设置背景色属性,使得奇偶行背景色不同.这个表格能够在单击时编辑,回车即更改为新输入的内容;ESC还原最初的文本.表格的实现思路非常清晰,仅仅是在实现的 ...
- Android Studio 使用笔记: 重命名和重构
重命名 选中一个变量名称,菜单才是可用状态.然后可以根据系统给出的建议或者自己重新定义变量名称. 快捷键:Shift + F6 (Windows和Mac都是一样的) 重构 选中需要重构的代码,可以按照 ...