8

我有一个scrapy pipelines.py,我想得到给定的参数。在我的 spider.py 中,它完美运行:

class MySpider( CrawlSpider ):
    def __init__(self, host='', domain_id='', *args, **kwargs):

        super(MySpider, self).__init__(*args, **kwargs)
        print user_id
        ...

现在,我需要我的 pipelines.py 中的“user_id”来创建像“domain-123.db”这样的 sqlite 数据库。我在整个网络上搜索我的问题,但我找不到任何解决方案。

有人能帮我吗?

PS:是的,我在我的管道类中尝试了 super() 函数,比如 spyer.py,它不起作用。

4

2 回答 2

13

spider在的构造函数中设置参数:

class MySpider(CrawlSpider):
    def __init__(self, user_id='', *args, **kwargs):
        self.user_id = user_id

        super(MySpider, self).__init__(*args, **kwargs) 

open_spider()并在您的管道方法中阅读它们:

def open_spider(self, spider):
    print spider.user_id
于 2014-12-16T21:04:54.787 回答
2

我可能为时已晚,无法为 op 提供有用的答案,但是对于将来遇到此问题的任何人(就像我所做的那样),您应该检查 classmethodsfrom_crawler和/或from_settings.

这样你就可以按照你想要的方式传递你的论点。

检查: https ://doc.scrapy.org/en/latest/topics/item-pipeline.html#from_crawler

from_crawler(cls, crawler)

如果存在,则调用此类方法以从 Crawler 创建管道实例。它必须返回管道的新实例。爬虫对象提供对所有 Scrapy 核心组件的访问,例如设置和信号;这是管道访问它们并将其功能挂钩到 Scrapy 的一种方式。

参数: crawler (Crawler` object) – 使用此管道的爬虫

于 2018-04-13T11:21:52.773 回答