zoukankan      html  css  js  c++  java
  • 使用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>,相关链接如下:

    -PyPI官网

    -GitHub官网

    -最新版本3.7.0文档

    说明,关于文档,可以从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:pmdb2dir --logpath d:pmdb2dirlog --logappend --auth --directoryperdb

    目前存在数据库globalnews,里面有集合news,news里面的每条文档包含title、url两个属性,目前集合news中有33条文档,存在用户reporter,密码为222222。

    使用IDLE访问

    使用Scrapy爬虫程序

    在Scrapy项目的settings.py中配置MongoDB配置项,并启用相关Item Pipelines:

    MongoDBPipeline源码如下:

     1 import pymongo
     2 
     3 class MongoDBPipeline(object):
     4     '''
     5     将项目抓取到的数据(title、url、response.body)保存到MongoDB中。
     6     目标数据库:配置文件中又MDB_URI、MDB_NAME定义
     7     目标数据集:news,由本类定义
     8     '''
     9     
    10     # 目标数据集
    11     coll_name = 'news'
    12     
    13     def __init__(self, mongo_uri, mongo_db):
    14         self.mongo_uri = mongo_uri
    15         self.mongo_db = mongo_db
    16         
    17         # debug
    18         print('mongo_uri = ', self.mongo_uri)
    19         print('mongo_db = ', self.mongo_db)
    20     
    21     # 获取配置文件中的MDB_URI、MDB_NAME两个属性
    22     @classmethod
    23     def from_crawler(cls, crawler):
    24         return cls(
    25             mongo_uri = crawler.settings.get('MDB_URI'),
    26             mongo_db = crawler.settings.get('MDB_NAME', 'news') # 没有就返回news
    27         )
    28     
    29     # 启动spider时,建立数据库连接
    30     def open_spider(self, spider): # 没有指定监控哪个spider?
    31         self.client = pymongo.MongoClient(self.mongo_uri)
    32         self.db = self.client[self.mongo_db]
    33     
    34     # 关闭spider时,关闭数据库连接
    35     def close_spider(self, spider):
    36         self.client.close()
    37     
    38     # 将抓取到的Item存储到MongoDB中
    39     def process_item(self, item, spider):
    40         
    41         self.db[self.coll_name].insert_one(dict(item)) # 
    42         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!)要怎么弄~

  • 相关阅读:
    Application
    Intent
    C#Winform实现自动更新
    Activity的四种启动模式
    小白学Python——用 百度翻译API 实现 翻译功能
    小白学Python——用 百度AI 实现 OCR 文字识别
    小白学Python——Matplotlib 学习(3) 函数图形
    小白学Python——Matplotlib 学习(2):pyplot 画图
    小白学Python——Matplotlib 学习(1)
    小白学Python(20)—— Turtle 海龟绘图
  • 原文地址:https://www.cnblogs.com/luo630/p/9288025.html
Copyright © 2011-2022 走看看