使用PyMongo访问需要认证的MongoDB
Windows 10家庭中文版,Python 3.6.4,PyMongo 3.7.0,MongoDB 3.6.3,Scrapy 1.5.0,
前言
在Python中,使用PyMongo访问MongodB,作者Mike Dirolf,维护人员Bernie Hackett <bernie@mongodb.com>,相关链接如下:
说明,关于文档,可以从GitHub下载PyMongo(需要安装sphinx先),然后自行编译文档。
说明,PyMongo还有一些附属包,以提供与MongoDB服务器匹配的功能,比如TLS / SSL、GSSAPI、srv、wire protocol compression with snappy等,大家可以根据需要安装。
本文介绍使用PyMongo访问需要认证的MongoDB,包括从IDLE、Scrapy爬虫程序来访问。
参考官文:PyMongo Authentication Examples(可以直接阅读官文,忽略本文剩余部分,)
本地MongoDB服务器介绍
打开MongoDB服务器:
mongod --dbpath d:\p\mdb2dir --logpath d:\p\mdb2dir\log --logappend --auth --directoryperdb
目前存在数据库globalnews,里面有集合news,news里面的每条文档包含title、url两个属性,目前集合news中有33条文档,存在用户reporter,密码为222222。
使用IDLE访问
使用Scrapy爬虫程序
在Scrapy项目的settings.py中配置MongoDB配置项,并启用相关Item Pipelines:
MongoDBPipeline源码如下:
import pymongo class MongoDBPipeline(object):
'''
将项目抓取到的数据(title、url、response.body)保存到MongoDB中。
目标数据库:配置文件中又MDB_URI、MDB_NAME定义
目标数据集:news,由本类定义
''' # 目标数据集
coll_name = 'news' def __init__(self, mongo_uri, mongo_db):
self.mongo_uri = mongo_uri
self.mongo_db = mongo_db # debug
print('mongo_uri = ', self.mongo_uri)
print('mongo_db = ', self.mongo_db) # 获取配置文件中的MDB_URI、MDB_NAME两个属性
@classmethod
def from_crawler(cls, crawler):
return cls(
mongo_uri = crawler.settings.get('MDB_URI'),
mongo_db = crawler.settings.get('MDB_NAME', 'news') # 没有就返回news
) # 启动spider时,建立数据库连接
def open_spider(self, spider): # 没有指定监控哪个spider?
self.client = pymongo.MongoClient(self.mongo_uri)
self.db = self.client[self.mongo_db] # 关闭spider时,关闭数据库连接
def close_spider(self, spider):
self.client.close() # 将抓取到的Item存储到MongoDB中
def process_item(self, item, spider): self.db[self.coll_name].insert_one(dict(item)) #
return item
在终端执行爬虫程序:
scrapy crawl -a user_agent="Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36" wdcpost
执行结果:集合news中成功增加了多条文档,达到了33条。
后记
从网站到爬虫,从爬虫【安全地】到MongoDB数据库,数据通路已经安全打开,请继续!嘿
还需要补足使用PyMongo操作MongoDB的更多操作,需要全部了解、常用熟悉、部分精通,知道哪里找,找到知道怎么用!
Scrapy爬虫程序是在virtualenv中执行的,居然也可以写到主机的MongoDB数据库中,有意思!
好好想想接下来怎么做,上云(OH, MYSELF! MONEY!)要怎么弄~
使用PyMongo访问需要认证的MongoDB的更多相关文章
- (原创) 使用pymongo 3.6.0连接MongoDB的正确姿势
0.疑惑 前两天使用pymongo连接MongoDB的时候发现了一个奇怪的现象:我本机MongoDB并没有打开,但是使用pymong.MongoClient()进行连接时,并没有异常,我的服务端也正常 ...
- 基于 pyMongo 和 wxPython 实现的 MongoDB Schema Analyser
MongoDB 作为文档型 NoSql 数据库,它的集合表结构往往不像关系型数据库那么固定和统一,同一个集合下的文档(document)的字段变化和差异可能很大,特别是在数据模型缺乏良好规划和规范的数 ...
- python使用pymongo访问MongoDB的基本操作,以及CSV文件导出
1. 环境. Python:3.6.1 Python IDE:pycharm 系统:win7 2. 简单示例 import pymongo # mongodb服务的地址和端口号mongo_url = ...
- 【pymongo】连接认证 auth failed解决方法
故事背景: 我在虚拟机(ip:192.168.xx.xx)上建立了一个mongo的数据库,里面已经存好了内容.里面的一个database叫做 "adb", 里面有个collecti ...
- 公网访问阿里云数据库MongoDB——填坑日记
业务情景 两台服务器,一台阿里云ECS云服务器(专用网络),另一台是阿里云数据库MongoDB,处于安全考虑MongoDB是不运行外网连接的,那接下来就看怎么实现公网访问. 看到上面红色的网络类型描述 ...
- go语言中通过http访问需要认证的api
func main() { //生成client 参数为默认 client := &http.Client{} //生成要访问的url url := "https://api.XXX ...
- 如何使用Java访问双向认证的Https资源
本文的相关源码位于 https://github.com/dreamingodd/CA-generation-demo 0.Nginx配置Https双向认证 首先配置Https双向认证的服务器资源. ...
- nginx加密,访问接口认证
使用htpasswd加密做接口认证 首先,安装htpasswd: yum install -y httpd-tools mkdir -p /usr/local/src/nginx/ 设置用户以及密码: ...
- CefSharp访问需要认证网页或接口(在Request的Headers中添加认证Token)
public class MyRequestHandler : DefaultRequestHandler { public static readonly string VersionNumberS ...
随机推荐
- 【BZOJ4006】管道连接(动态规划,斯坦纳树)
题面 BZOJ 洛谷 题解 和这题区别不是很大吧. 基本上拿过来改一下就做完了. #include<iostream> #include<cstdio> #include< ...
- 【Cf #503 C】Sergey's problem(有趣的构造)
感觉这种构造题好妙啊,可我就是想不到诶. 给出一张无自环的有向图,回答一个独立集,使得图中任意一点都可以被独立集中的某一点两步之内走到. 具体构造方案如下: 下标从小到大枚举点,如果该点没有任何标记, ...
- Java之使用链表实现队列
import java.util.Iterator; import java.util.NoSuchElementException; /** * 使用链表来实现队列 * 1.考虑结点的结构,包括当前 ...
- 关于idea中新建web项目 webapp文件夹没有小蓝点 ,启动服务,访问不到解决方案
第一步: 选中项目按F4键,找到你的项目. 第二步: 选中项目下的web,如果没有web点击左上角的加号,找到web最下面,添加进去 第三步: 点开type下的节点,出来弹框, 第四步: 点击弹框的选 ...
- android 7.0 新特性 和对开发者的影响
android 7.0新特性 - jiabailong的专栏 - 博客频道 - CSDN.NEThttp://blog.csdn.net/jiabailong/article/details/5241 ...
- 解题:SDOI 2017 数字表格
题面 反演题,推式子么=.= $\prod\limits_{d=1}^{min(n,m)}\prod\limits_{i=1}^n\prod\limits_{j=1}^m[gcd(i,j)==d]fi ...
- ASP.NET MVC API 接口验证
项目中有一个留言消息接口,接收其他系统的留言和展示留言,参考了网上的一些API验证方法,发现使用通用权限管理系统提供的验证方法最完美(http://www.cnblogs.com/jirigala/p ...
- C#线程篇---Windows调度线程准则(3)
Windows本身就是一个抢占式操作系统,它的实现,必定有某种算法在里面,比如什么时候调度哪些线程,需要花费多长时间等问题. 我们时时在用Windows,作为程序员,我们有必要知道其中最贴近我们的算法 ...
- mac、linux 查看端口占用程序
lsof -i:80 列出占用 80 端口的程序 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME mysqld 672 ruby 42u IPv4 ...
- vuejs2.0 vue实例的生命周期
每个 Vue 实例在被创建之前都要经过一系列的初始化过程.例如,实例需要配置数据观测(data observer).编译模版.挂载实例到 DOM ,然后在数据变化时更新 DOM .下图展示的就是一个v ...