【问题标题】:Using arguments in scrapy pipeline on __init__在 __init__ 上的 scrapy 管道中使用参数
【发布时间】:2014-12-16 20:50:23
【问题描述】:

我有一个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,它不起作用。

【问题讨论】:

    标签: python web-scraping arguments scrapy scrapy-spider


    【解决方案1】:

    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
    

    【讨论】:

    • 它确实解决了问题,但它没有回答问题。有没有办法传递参数 throw init 方法?我从另一个继承我的 Pipeline 对象,我需要传递一些属性以在 main 中实例化它
    【解决方案2】:

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

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

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

    from_crawler(cls, crawler)

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-10
    • 2017-06-13
    • 2016-03-11
    • 2021-06-13
    相关资源
    最近更新 更多