爬虫入门【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())

好了,至此我们已经将爬虫中可能用到的所有基础知识都介绍了一遍,后面我们就要开始爬虫的实战了。

我打算用一个月的时间,将静态网页、动态网页、登陆验证等不同类型的爬虫方法做介绍,希望大家能有兴趣。

一起进步!

时间: 2024-10-12 23:54:02

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

python连接mongodb并操作

安装python连接mongodb的库文件pymongo pip install pymongo python连接mongodb程序 import pymongo conn = pymongo.MongoClient("ip",端口) db = conn.admin #连接库 db.authenticate("账号","密码") #用户认证 db=conn.jwh db.test.insert({'id':1,'name':'kaka','sex

Python 连接MongoDB并比较两个字符串相似度的简单示例

本文介绍一个示例:使用 pymongo 连接 MongoDB,查询MongoDB中的 字符串 记录,并比较字符串之间的相似度. 一,Python连接MongoDB 大致步骤:创建MongoClient---> 获取 DataBase --->获取Collection,代码如下: client = MongoClient(host="127.0.0.1", port=10001) db = client['database_name'] db.authenticate(nam

Python连接MongoDB数据库并执行操作

环境设置: [[email protected] ~]# cat /etc/redhat-release  CentOS release 6.9 (Final) [[email protected] ~]# python -V Python 2.6.6 1.首先确保,Mongodb数据库运行 2.安装pymongo模块 官网:https://pypi.python.org/pypi/pymongo/(按需下载) [[email protected] src]# wget https://pypi

Python爬虫入门之Urllib库的高级用法

1.设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性. 首先,打开我们的浏览器,调试浏览器F12,我用的是Chrome,打开网络监听,示意如下,比如知乎,点登录之后,我们会发现登陆之后界面都变化了,出现一个新的界面,实质上这个页面包含了许许多多的内容,这些内容也不是一次性就加载完成的,实质上是执行了好多次请求,一般是首先请求HTML文件,然后加载JS,CSS 等等,经过多次

python 连接mongodb ,并将EXCEL文档导入mongodb

一.下载软件 1.https://pypi.python.org/pypi/pymongo/#downloads  下载 PYMONGO 下载后 用命令提示符  cmd进入目录 并运行命令 python setup.py install 2.下载 xlrd  https://pypi.python.org/pypi/xlrd 利用pymongo包进行数据库的连接,使用xlrd包读取excel数据,由于二者数据结构的不同,要将excel格式数据转换为json格式数据.由于编码问题会出现"TypeE

Python爬虫入门 | 1 Python环境的安装

这是一个适用于小白的Python爬虫免费教学课程,只有7节,让零基础的你初步了解爬虫,跟着课程内容能自己爬取资源.看着文章,打开电脑动手实践,平均45分钟就能学完一节,如果你愿意,今天内你就可以迈入爬虫的大门啦~ 话不多说,正式开始我们的第一节课<Python环境的安装>吧~ 啦啦啦开课啦,看黑板,都看黑板~ 安装Anaconda 在我们的教学中,我们使用的版本是Python3,至于为什么要选Python3,哼哼!工欲善其事,必先利其器,在学习爬虫之前,你得先搭建自己的编程环境.废话不多说,按

Python连接mongodb提取部分字段内数据并写入txt文件

部门负责工业领域知识图谱构建,用于工业化与信息化两化融合,听起来好高大上好难,反正目前的我还理解不了那么深,好在有部门经理带领. 想要做专业领域知识图谱首先要有专业领域知识,这些知识从哪来呢?主要来源肯定是从互联网上爬啦! 爬下来一大堆知识直接堆在那肯定不行,还要建立起相互关系,其中重要一项就是文本分类啦!那么怎么分类呢? 还是以后再说吧...因为不管怎么做,首先都要把数据库里自己想要的数据取出来. #coding=utf-8 import sys reload(sys) sys.setdefa

Python——连接MongoDB

建立与MongoDB之间的连接:官方文档 #coding:utf-8 import pymongo client = pymongo.MongoClient('127.0.0.1',27017) # 建立与MongoDB的连接 #有用户名和密码时:pymongo.MongoClient('mongodb://用户名:密码@localhost:27017/基于哪个数据库进行验证的') db = client.xingedb # 切换使用的数据库 # 增 # db.t1.insert_one({'n

python连接mongodb

import randomimport timefrom datetime import *import pymongo client = pymongo.MongoClient('***.**.**.**', *****, username='*****', password='******') db_name = 'feeds'db = client[db_name] collection_set02 = db['feedsDO'] collection_set03 = db['relati