首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >抓取Mongodb -爬行多只蜘蛛并保存在不同的多个mongo集合中

抓取Mongodb -爬行多只蜘蛛并保存在不同的多个mongo集合中
EN

Stack Overflow用户
提问于 2018-03-19 22:52:58
回答 1查看 734关注 0票数 1

我试图抓取数据并保存在一个mongo database.There中,这是两个文件(whole.py和admissionReq.py),用于抓取数据,但这两个文件都保存在一个集合“课程”中。

这是我的档案:

代码语言:javascript
复制
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集合中保存数据

我哪里出错了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-23 09:48:37

似乎您正在从scrapy.conf.settings传递管道中的集合名称--这对于所有蜘蛛来说都是一样的,这意味着通过管道处理的所有项都将插入在scrapy.conf.settings中命名的同一个集合中。

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

代码语言:javascript
复制
class Spider(scrapy.Spider):
name = 'foo'

custom_settings = {
    'COLLECTION_NAME' : 'foo'
}

然后检索mongo管道中的设置如下:

代码语言:javascript
复制
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中,我从spider.settings.get('COLLECTION_NAME')检索COLLECTION_NAME参数

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49373693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档