使用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 ...
随机推荐
- 模板:插头dp
前言: 严格来讲有关dp的都不应该叫做模板,因为dp太活了,但是一是为了整理插头dp的知识,二是插头dp有良好的套路性,所以姑且还叫做模板吧. 这里先推荐一波CDQ的论文和这篇博客http://www ...
- POJ.1067 取石子游戏 (博弈论 威佐夫博弈)
POJ.1067 取石子游戏 (博弈论 威佐夫博弈) 题意分析 简单的威佐夫博弈 博弈论快速入门 代码总览 #include <cstdio> #include <cmath> ...
- mysql 5.7 json 字段类型查找、修改
修改 json 里的数组字段 mysql> set @json = '{"test": [{"name": "laravel"}, { ...
- linux命令总结之dig命令
Dig简介: Dig是一个在类Unix命令行模式下查询DNS包括NS记录,A记录,MX记录等相关信息的工具.Dig的源码是ISC BIND大包的一部分,但是大多编译和安装Bind的文档都不把它包括在内 ...
- kubernetes 1.9部署实践
目录 简要说明 环境说明 安装前的约定 配置etcd 生成相关证书 证书类型说明 cfssl配置 证书相关配置 生成ca证书 生成kubernetes证书 生成kubectl证书 生成kube-pro ...
- Kubernetes 1.5集成heapster
Heapster是kubernetes集群监控工具.在1.2的时候,kubernetes的监控需要在node节点上运行cAdvisor作为agent收集本机和容器的资源数据,包括cpu.内存.网络.文 ...
- python 文件读写,打开 未完。。。
导入库 os库 import os 获取当前目录 os.getcwd() 切换目录 os.chdir('路径') 打开写入文件 import osos.getcwd()os.chdir('E:\\ ...
- springboot 日期转化报错
问题场景: 使用Springboot框架搭建服务,传日期参数json参数为2016-08-15 17:00:00这种格式,springboot中不能识别,将其转化为对象对应的日期属性.而是抛出异常信息 ...
- numpy取反操作符和Boolean类型
numpy~运算符和Boolean类型变量 觉得有用的话,欢迎一起讨论相互学习~Follow Me numpy中取反运算符~可以将Boolean类型值取反,这在使用boolean类型数组选择数组中固定 ...
- 【重要】Nginx模块Lua-Nginx-Module学习笔记(三)Nginx + Lua + Redis 已安装成功(非openresty 方式安装)
源码地址:https://github.com/Tinywan/Lua-Nginx-Redis 一. 目标 使用Redis做分布式缓存:使用lua API来访问redis缓存:使用nginx向客户端提 ...