Scrapy, проблема с вводом нескольких переменных паука в CrawlerRunner - PullRequest
0 голосов
/ 16 марта 2019

Я пишу свой паук-скрап, который начинается с двух переменных класса, а затем хочу запустить его из 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()

каким должен быть правильный способ ввода переменной паука в Runnner?Спасибо

1 Ответ

0 голосов
/ 16 марта 2019

Вам не нужно переопределять __init__ в MySpider (и заметьте, что у вас все равно отсутствует _).

Для передачи параметров вам нужно использовать named/ ключевое слово аргументы, а не позиционные аргументы:

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

Это автоматически сделает его доступным в вашем пауке в качестве переменной класса: self.variable1.

...