Scrapy Mongodb - 爬行多个蜘蛛并保存在不同的多个mongo集合中

时间:2018-03-19 22:52:59

标签: python mongodb scrapy

我正在尝试报废数据并保存在mongo数据库中。有两个文件(whole.py和admissionReq.py)可以进行报废,但两个报废数据都保存在一个集合“课程”中

这是我的档案:

whole.py: https://pastebin.com/ZpSER6wr

admissionReq: https://pastebin.com/5CQ7qRBM

settings.py: https://pastebin.com/dnPNqveq

pipelines: https://pastebin.com/YRfWiFhF

items: https://pastebin.com/1FGprEJj

我想要

  1. whole.py:报废数据以保存在名为“课程”的mongo集合中

  2. admissionReq.py:报废数据以保存在名为“admissionReq”的mongo集合中

  3. 我哪里出错了?

1 个答案:

答案 0 :(得分:0)

您似乎正在从scrapy.conf.settings传递管道中的集合名称 这对所有蜘蛛都是一样的,这意味着通过管道处理的所有物品都将被插入scrapy.conf.settings

中指定的同一集合中

相反,您可以做的是在蜘蛛的设置中指定特定蜘蛛的集合名称,如下所示:

class Spider(scrapy.Spider):
name = 'foo'

custom_settings = {
    'COLLECTION_NAME' : 'foo'
}

然后在你的mongo管道中检索该设置,如下所示:

import pymongo

class MongoPipeline(object):
    def __init__(self, mongo_uri, mongo_db):
        self.mongo_uri = mongo_uri
        self.mongo_db = mongo_db

@classmethod
def from_crawler(cls, crawler):
    return cls(
        mongo_uri=crawler.settings.get('MONGO_URI'),
        mongo_db=crawler.settings.get('MONGO_DATABASE')
    )

def open_spider(self,spider):
    self.client = pymongo.MongoClient(self.mongo_uri)
    self.db = self.client[self.mongo_db]

def close_spider(self, spider):
    self.client.close()

def process_item(self, item, spider):
    self.db[spider.settings.get('COLLECTION_NAME')].insert_one(dict(item))
    return item

process_item(self, item, spider中注意,我从COLLECTION_NAME

中检索spider.settings.get('COLLECTION_NAME')参数