Nie mogę zmienić ustawień pająka w metodzie parsowania. Ale to zdecydowanie musi być droga.Scrapy. Jak zmienić ustawienia pająka po rozpoczęciu indeksowania?
Na przykład:
class SomeSpider(BaseSpider): name = 'mySpider' allowed_domains = ['example.com'] start_urls = ['http://example.com'] settings.overrides['ITEM_PIPELINES'] = ['myproject.pipelines.FirstPipeline'] print settings['ITEM_PIPELINES'][0] #printed 'myproject.pipelines.FirstPipeline' def parse(self, response): #...some code settings.overrides['ITEM_PIPELINES'] = ['myproject.pipelines.SecondPipeline'] print settings['ITEM_PIPELINES'][0] # printed 'myproject.pipelines.SecondPipeline' item = Myitem() item['mame'] = 'Name for SecondPipeline'
Ale! Przedmiot zostanie przetworzony przez FirstPipeline. Nowe parametry ITEM_PIPELINES nie działają. Jak mogę zmienić ustawienia po rozpoczęciu pobierania? Z góry dziękuję!
Rurociągi są inicjowane i aktywowane przy starcie silnika. Nie jestem pewien, czy możesz to zmienić podczas wykonywania. Można jednak aktywować oba potoki przy starcie i dodać trochę logiki do potoku, który przetwarza tylko element, jeśli spełnia określony warunek. –
Tak, to moja ostatnia opcja. Dziękuję za odpowiedź. Myślę, że coś w rodzaju sygnałów pająka może pomóc, ale jest to dość trudne. – fcmax
Na pewno można dołączyć różne funkcje do różnych sygnałów pająka. Chciałbyś dołączyć obsługę do sygnałów w rozszerzeniu. Zobacz także: http://doc.scrapy.org/en/latest/topics/extensions.html#writing-your-own-extension –