Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >爬虫(105)pymongo, 这一篇文章够了,值得收藏

爬虫(105)pymongo, 这一篇文章够了,值得收藏

作者头像
公众号---人生代码
发布于 2020-05-16 14:08:55
发布于 2020-05-16 14:08:55
1.5K00
代码可运行
举报
文章被收录于专栏:人生代码人生代码
运行总次数:0
代码可运行

学了那么多的爬虫库,怎么能没有数据库这个东东呢?在开发过程中,数据是必不可少的,数据库也是应运而生了,数据和数据库这两个兄弟是缺一不可的

首先我们要使用,pymongo,必须要安装 mongodb 数据库,小编已经找到网址了,可以直接下载对应桌面的程序,安装即可

https://docs.mongodb.com/manual/installation/

这里需要强调一下就是我们安装完数据库之后需要把安装程序的目录,放到系统 path 目录,所以找到我们的安装的程序目录,这里我安装在 D 盘

右键菜单,点击属性

点击高级设置

选择环境变量设置

选中 path,点击编辑

点击新建,将安装的 bin 目录复制在此就行了

接下来就是测试是否安装成功了,win + r 输入 cmd, 回车,输入 mongo

安装 pymongo

导入 pymongo

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pymongo

与 mongodb 建立链接

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from pymongo import MongoClient
client = MongoClient()

# or
client = MongoClient('localhost', 27017)

# or
client = MongoClient('mongodb://localhost:27017/')

获取数据库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
db = client.test_database# or
db = client['test-database']

获取集合

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
collection = db.test_collection

# or

collection = db['test-collection']

文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import datetime

post = {"author": "Mike",
   "text": "My first blog post!",
  "tags": ["mongodb", "python", "pymongo"],
   "date": datetime.datetime.utcnow()}

插入文档

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
posts = db.posts
post_id = posts.insert_one(post).inserted_id
post_id

获取单个文档 find_one()

在MongoDB中可以执行的最基本的查询类型是 find_one()。此方法返回与查询匹配的单个文档(或者None如果不匹配)。当您知道只有一个匹配的文档或仅对第一个匹配感兴趣时,此功能很有用。在这里,我们用来 find_one()从posts集合中获取第一个文档:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pprint
pprint.pprint(posts.find_one())

find_one()还支持查询结果文档必须匹配的特定元素。为了将结果限制在作者为“ Mike”的文档中,我们这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pprint.pprint(posts.find_one({"author": "Mike"}))

通过ObjectId 查询

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
post_id
pprint.pprint(posts.find_one({"_id": post_id}))

请注意,ObjectId与它的字符串表示形式不同:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
post_id_as_str = str(post_id)
posts.find_one({"_id": post_id_as_str}) # No result

Web应用程序中的常见任务是从请求URL获取ObjectId并找到匹配的文档。在这种情况下,有必要先将ObjectId从字符串转换find_one

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from bson.objectid import ObjectId

# The web framework gets post_id from the URL and passes it as a string
def get(post_id):
    # Convert from string to ObjectId:
    document = client.db.collection.find_one({'_id': ObjectId(post_id)})

您可能已经注意到,从服务器中检索到的较早存储的常规Python字符串看起来有所不同(例如u'Mike'而不是'Mike')。有一个简短的解释。

MongoDB以BSON格式存储数据。BSON字符串采用UTF-8编码,因此PyMongo必须确保其存储的任何字符串仅包含有效的UTF-8数据。常规字符串(<type'str'>)经过验证并保持不变。Unicode字符串(<type'unicode'>)首先被编码为UTF-8。我们的示例字符串在Python外壳中表示为u'Mike'而不是'Mike'的原因是PyMongo将每个BSON字符串解码为Python unicode字符串,而不是常规str。

您可以在此处阅读有关Python unicode字符串的更多信息。

批量插入

为了使查询更加有趣,让我们插入更多文档。除了插入单个文档,我们还可以通过将列表作为第一个参数传递来执行批量插入操作insert_many()。这会将每个文档插入列表,仅向服务器发送一个命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
new_posts = [{"author": "Mike",
  "text": "Another post!",
  "tags": ["bulk", "insert"],
  "date": datetime.datetime(2009, 11, 12, 11, 14)},
  {"author": "Eliot",
    "title": "MongoDB is fun",
    "text": "and pretty easy too!",
    "date": datetime.datetime(2009, 11, 10, 10, 45)}]
result = posts.insert_many(new_posts)
result.inserted_ids

查询多个文档

要获取多个文档作为查询结果,我们使用的 find() 方法。find()返回一个 Cursor实例,该实例使我们可以迭代所有匹配的文档。例如,我们可以遍历posts集合中的每个文档:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for post in posts.find():
    pprint.pprint(post)

就像我们对所做的一样find_one(),我们可以传递文档find() 以限制返回的结果。在这里,我们仅获得作者为“迈克”的那些文档:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for post in posts.find({"author": "Mike"}):
    pprint.pprint(post)

计数

如果我们只想知道有多少文档与某个查询匹配,我们可以执行count_documents()操作而不是完整查询。我们可以对集合中的所有文档进行计数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
posts.count_documents({})

或仅与特定查询匹配的那些文档:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
posts.count_documents({"author": "Mike"})

范围查询

MongoDB支持许多不同类型的高级查询。例如,让我们执行一个查询,在查询中我们将结果限制为早于某个特定日期的帖子,还按作者对结果进行排序:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
d = datetime.datetime(2009, 11, 12, 12)
for post in posts.find({"date": {"$lt": d}}).sort("author"):
    pprint.pprint(post)

索引

添加索引可以帮助加速某些查询,还可以为查询和存储文档添加其他功能。在此示例中,我们将演示如何在键上创建唯一索引,该键将拒绝索引中已存在该键值的文档。

首先,我们需要创建索引:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
result = db.profiles.create_index([('user_id', pymongo.ASCENDING)],unique=True)

sorted(list(db.profiles.index_information()))

请注意,我们现在有两个索引:一个是_idMongoDB自动创建的索引,另一个是user_id刚刚创建的索引。

现在让我们设置一些用户配置文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
user_profiles = [
  {'user_id': 211, 'name': 'Luke'},
  {'user_id': 212, 'name': 'Ziltoid'}]
result = db.profiles.insert_many(user_profiles)

该索引阻止我们插入user_id已经在集合中的文档:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
duplicate_profile = {'user_id': 212, 'name': 'Tommy'}
result = db.profiles.insert_one(new_profile)  # This is fine.
result = db.profiles.insert_one(duplicate_profile)
Traceback (most recent call last):
DuplicateKeyError: E11000 duplicate key error index: test_database.profiles.$user_id_1 dup key
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CryptoCode 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MongoDB Python驱动
MongoDB以JSON格式存储和显示数据。在pymongo中以字典的方式显示数据。
py3study
2020/01/13
9790
MongoDB与python交互1.Pymongo2.安装3.使用4.mongoDB其它操作5.Mongodb与python交互6.完成命令行项目:学生信息管理(基于Python2.7)
PyMongo是Mongodb的Python接口开发包,是使用python和Mongodb的推荐方式。
Python攻城狮
2018/08/23
1.1K0
MongoDB与python交互1.Pymongo2.安装3.使用4.mongoDB其它操作5.Mongodb与python交互6.完成命令行项目:学生信息管理(基于Python2.7)
Python 3 中 PyMongo 的用法
MongoDB存储 在这里我们来看一下Python3下MongoDB的存储操作,在本节开始之前请确保你已经安装好了MongoDB并启动了其服务,另外安装好了Python的PyMongo库。 连接M
崔庆才
2017/07/26
6.4K0
Python 基于pymongo操作Mongodb学习总结
如果连接用户名和密码包含诸如':', '/', '+' 及'@'保留字符,则使用前应该先进行编码,如下:
授客
2024/01/29
4190
菜鸟用Python操作MongoDB,看这一篇就够了
MongoDB是由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包含其他文档、数组及文档数组,非常灵活。在这一节中,我们就来看看Python 3下MongoDB的存储操作。
IT派
2018/07/30
1.8K0
菜鸟用Python操作MongoDB,看这一篇就够了
Python操作MongoDB看这一篇就够了
MongoDB是由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包含其他文档、数组及文档数组,非常灵活。在这一节中,我们就来看看Python 3下MongoDB的存储操作。 1. 准备工作 在开始之前,请确保已经安装好了MongoDB并启动了其服务,并且安装好了Python的PyMongo库。 2. 连接MongoDB 连接MongoDB时,我们需要使用PyMongo库里面的MongoClient。一般来说,传入MongoDB的
崔庆才
2018/06/25
23K0
python必掌握库:pymongo库的心你懂吗?
工欲善其事必先利其器,用pymongo库之前,大家需首先对MongoDB数据库的增删改查操作有一些基础方法的了解。
用户1564362
2019/10/15
1.5K0
python必掌握库:pymongo库的心你懂吗?
Python基础教程(二十六):对接MongoDB
MongoDB是一种流行的NoSQL数据库,以其高性能、高可用性和灵活的数据模型著称。Python作为一种强大的编程语言,提供了与MongoDB无缝集成的能力,使得数据的读写、查询和管理变得更加便捷。本文将深入探讨如何使用Python与MongoDB进行交互,包括安装配置、基本操作、高级查询和实战案例。
用户11147438
2024/06/22
8520
爬虫——实战完整版
mongodb操作 1 import pymongo 2 3 #连接数据库实例(连接数据库)---》获取相应数据库---》获取相应collection集合(表) 4 client = pymongo.MongoClient(host='localhost',port=27017) 5 6 db = client.test #也可用字典形式操作,如下 7 # db = client["test"] 8 9 collection = db.students #也可用字典
py3study
2020/01/19
1.2K0
MongoDB使用小结:一些常用操作分享
本文整理了一年多以来我常用的MongoDB操作,涉及mongo-shell、pymongo,既有运维层面也有应用层面,内容有浅有深,这也就是我从零到熟练的历程。
拓荒者
2019/09/06
2K0
Python 数据库操作
Python使用数据库驱动模块与MySQL通信。诸如pymysql等许多数据库驱动都是免费的。这里我们将使用pymysql,它是Anaconda的一部分。驱动程序经过激活后与数据库服务器相连,然后将Python的函数调用转换为数据库查询,反过来,将数据库结果转换为Python数据结构。
smartsi
2019/08/07
1.2K0
Python也能操作MongoDB数据库
作为非关系数据库的代表--Mongo,可以说是让人又爱又恨,让人爱的是它的便捷性,让人恨的是它的配置,实在是坑多。那么今天我们就来深入剖析它吧。
Python进阶者
2021/08/20
7090
Python爬虫之非关系型数据库存储#5
NoSQL,全称 Not Only SQL,意为不仅仅是 SQL,泛指非关系型数据库。NoSQL 是基于键值对的,而且不需要经过 SQL 层的解析,数据之间没有耦合性,性能非常高。
仲君Johnny
2024/02/12
1920
用Python操作MongoDB,看这一篇就够了
MongoDB 是一个基于分布式存储的数据库,由 C++ 语言编写的NoSQL非关系数据库。非关系型数据库NoSQL,即Not Only SQL,意即“不仅仅是SQL”,通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定。
吾非同
2021/06/01
2.6K0
用Python操作MongoDB,看这一篇就够了
MongoDB
一 简介 MongoDB是一款强大、灵活、且易于扩展的通用型数据库 1、易用性 MongoDB是一个面向文档(document-oriented)的数据库,而不是关系型数据库。 不采用关系型主要是为了获得更好得扩展性。当然还有一些其他好处,与关系数据库相比,面向文档的数据库不再有“行“(row)的概念取而代之的是更为灵活的“文档”(document)模型。 通过在文档中嵌入文档和数组,面向文档的方法能够仅使用一条记录来表现复杂的层级关系,这与现代的面向对象语言的开发者对数据的看法一致。 另外,不再有预定义模
用户1214487
2018/01/24
3.8K0
MongoDB
pymongo:Python下 MongoDB 的存储操作
pymongo 3.x版本中,insert()方法官方已不推荐使用,推荐使用insert_one()和insert_many()将插入单条和多条记录分开。
luckpunk
2023/09/29
3880
在Python应用中使用MongoDB
目录[-] Python是开发社区中用于许多不同类型应用的强大编程语言。很多人都知道它是可以处理几乎任何任务的灵活语言。因此,在Python应用中需要一个什么样的与语言本身一样灵活的数据库呢?那就是NoSQL,比如MongoDB。 英文原文:https://realpython.com/blog/python/introduction-to-mongodb-and-python 1、SQL vs NoSQL 如果你不是很熟悉NoSQL这个概念,MongoDB就是一个NoSQL数据库。近几年来它越
jhao104
2018/03/20
2.6K0
pymongo的简单使用
pymongo的使用 首先安装: pip install pymongo 安装好了使用 import pymongo # 链接mongodb,得到一个mongoclient的客户端对象 client = pymongo.MongoClient() # 指定数据库 db = client.test db = client["test"] # 这两种方式都可以指定数据库,如果没有该数据库的话,会自行创建 # 如果了解面向对象的一些魔法(内置)方法的话,大概能够知道client对应的类,肯定重写__get
py3study
2020/01/16
8200
挑战30天学完Python:Day27 Python mongodb
Python是一种后端技术,它可以连接到不同的数据库应用程序。它可以连接到SQL和noSQL数据库。
MegaQi
2023/10/21
2230
挑战30天学完Python:Day27 Python mongodb
初窥Python(一)——使用pymon
Python 可以使用 pymongo 库方便的操作 MongoDB 。MongoDB 不同于关系型结构的三层结构——database--> table --> record,它的层级为 database -->collection --> document 。这里不重点介绍 MongoDB  用法,主要来看一下如何用 Python 使用 MongoDB。
py3study
2020/01/07
8200
相关推荐
MongoDB Python驱动
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验