Scrapy: передать аргумент в конвейер из CrawlerProcess - PullRequest
0 голосов
/ 12 июня 2018

У меня есть CrawlerProcess, который запускает нужного мне паука, но я бы хотел, чтобы он также передавал параметр freq в конвейер.

process = CrawlerProcess(get_project_settings())
process.crawl(spider, freq=freq)
process.start()

Я знаю, что способ получить параметрследует использовать:

@classmethod
def from_crawler(cls, crawler):

Но я понятия не имею, как получить параметр freq оттуда.Есть идеи?

1 Ответ

0 голосов
/ 13 июня 2018

Мне потребовалось некоторое время, чтобы понять это, но на самом деле все было в Core API описании метода.

Это решение, вероятно, не является оптимальным, так как я получаю параметр freqот паука, но можно было бы получить его непосредственно от сканера, если у кого-то есть лучшее решение.

Таким образом, конвейер выглядит следующим образом:

class Pipeline(object):

    def __init__(self, freq):
        self.freq = freq

    @classmethod
    def from_crawler(cls, crawler):
        return cls(freq=crawler.spider.data_test)

    def open_spider(self, spider):
        return

    def process_item(self, item, spider):
        print("Freq:{}\n".format(self.freq))

    def close_spider(self, spider):
        return

То, что вам нужно сделать, это заключитьпеременные, которые вы хотите передать в конвейер в cls, дать им имя и в __init__ сохранить их как атрибут класса.Чтобы иметь возможность получить его от паука, я должен был сохранить его также с атрибутом в пауке:

class TestSpider(scrapy.Spider):
    name = "test"

    def __init__(self, freq):
        self.freq = freq

Если у вас есть некоторые улучшения в этом решении, не стесняйтесь комментировать или предлагать лучшее,Я знаю, что это не оптимально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...