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源码如下:
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!)要怎么弄~
来源:oschina
链接:https://my.oschina.net/u/4403077/blog/3910750