【问题标题】:Scrapy, problem input multiple spider's variable in CrawlerRunnerScrapy,问题在CrawlerRunner中输入多个spider的变量
【发布时间】:2019-08-07 05:49:50
【问题描述】:

我编写了我的scrapy spider,它以两个类变量开头,然后想从Runner 运行它。 我确实尝试过:

yield runner.crawl(MySpider1, variable1, variable2)

yield runner.crawl(MySpider1, [variable1, variable2])

yield runner.crawl(MySpider1, (variable1, variable2))

yield runner.crawl(MySpider1(variable1, variable2))

但是得到了

缺少 1 个必需的后置参数

这是我的代码:

from twisted.internet import reactor, defer
from scrapy.crawler import CrawlerRunner
from scrapy.utils.log import configure_logging

class MySpider(scrapy.Spider):

    def _init__(self, variable1, variable2, *args, **kwargs):
        super().__init__(*arg, **kwargs)
        self.variable1 = variable1
        self.variable2 = variable2

    # below should be any normal spider's parser





class Run_Spider_From_SubClass(SpiderEmail):

    def __init__(self, *args, **kwargs):
        super().__init__(self, *args, **kwargs)

        configure_logging()
        self.runner = CrawlerRunner(get_project_settings())

    @defer.inlineCallbacks
    def crawl(self):
        for variable1, variable2 in mydict.item():
            yield self.runner.crawl(MySpider, variable1, varialbe2)  # input issue that result in missing 1 positional argument
        reactor.stop()

    def run_spider_in_loop(self):
        self.crawl()
        reactor.run()

runner = Run_Spider_From_SubClass()
runner.run_spider_in_loop()

在 Runner 中输入蜘蛛变量的正确方法应该是什么?谢谢

【问题讨论】:

    标签: python variables scrapy runner


    【解决方案1】:

    您无需在MySpider 中覆盖__init__(请注意,您仍然缺少_)。

    要传递参数,您需要使用命名/关键字参数,而不是位置参数:

    yield self.runner.crawl(MySpider, variable1=variable1, variable2=variable2)
    

    这将自动使其在您的蜘蛛中作为类变量可用:self.variable1

    【讨论】:

    • 谢谢,现在可以了。我搞砸了 Run_Spider_From_SubClass 中的 super()。
    猜你喜欢
    • 1970-01-01
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    • 1970-01-01
    • 2016-03-17
    • 1970-01-01
    相关资源
    最近更新 更多