前期工作
通过 pymongo 库连接 MongoDB
在这里,需要用到的是 pymongo 库里面的 MongoClient,向该方法传入 MongoDB 的 IP 及 端口。
1 2 3
| client = pymongo.MongoClient('mongodb://your ip address:27017/')
client = pymongo.MongoClient(host='your ip address', port=27017)
|
创建连接对象后,需要指定操作哪个数据库,这里为 pymongo 数据库。
由于我的 MongoDB 数据库启用了 auth 认证,没有的跳过。需要验证密码。
1
| db.authenticate("***", "***")
|
最后,声明了 Collection 对象,用于指定需要操作的集合。
可以往里面插入一条数据测试连接是否有效,使用 insert_one()
方法,该方法在执行后会返回一个 _id
值。
运行结果为:
完整代码:
1 2 3 4 5 6 7 8 9 10 11
| import pymongo
client = pymongo.MongoClient('mongodb://your ip address:27017/') db = client["pymongo"] db.authenticate("***", "***") col = db["test"]
dict = {"id": "1", "name": "test"}
x = col.insert_one(dict) print(x)
|
在 Scrapy 中使用
在 Scrapy 中的数据处理部分是写在 pipelines 文件内的,与上面步骤相同,那么直接贴完整代码吧:
pipelines.py1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| import pymongo from .settings import mongo_host, mongo_port, mongo_db_name, mongo_db_collection
class NeteasePipeline(object): def __init__(self): host = mongo_host port = mongo_port dbname = mongo_db_name cname = mongo_db_collection client = pymongo.MongoClient(host=host, port=port) db = client[dbname] self.post = db[cname] db.authenticate("***", "***")
def process_item(self, item, spider): data = dict(item) self.post.insert(data) return item
|
其中,配置的部分我写在了 settings.py 中
settings.py1 2 3 4 5 6
| mongo_host = "your ip address" mongo_port = 27017 mongo_db_name = "***"
date = str(datetime.date.today()) mongo_db_collection = date
|
最后,在 settings.py 中进行相应的设置,数值越小优先级越高。
settings.py1 2 3 4 5
|
ITEM_PIPELINES = { 'netease.pipelines.NeteasePipeline': 300, }
|