Nein, AFAIK Die benutzerdefinierten Einstellungen können während des Laufs der Spinne nicht geändert werden.
Die Lösung, die Sie hier suchen, besteht darin, die Erkennungslogik den Pipelines selbst hinzuzufügen. Fügen Sie zum Beispiel ein zusätzliches Feld zu dem Element _to_pipeline2
hinzu und brechen Sie Ihre Pipeline, wenn sie nicht vorhanden ist.
Zum Beispiel:
def parse(self, response):
item = MyItem()
#....
if item_should_be_pipelined:
item['_to_pipeline2'] = True
return item
und in der Pipeline:
def process_item(self, item, spider):
if not item.get("_to_pipeline2", False):
return item # do not use this pipeline
# normal pipeline continues otherwise
del item['_to_pipeline2']
oder für Ihren Fall:
def process_item(self, item, spider):
if 'http://stackoverflow.com' in spider.start_urls:
return item # do not use pipeline
# otherwise execute pipeline code here
Das Problem ist, dass es nicht einmal, wenn ich custom_settings funktioniert ändern in "__init__". – VladimirLenin
ja könnte es sein, dass diese Einstellung geladen wird, wenn Crawler die Spinne auf Crawl-Initiierung zieht, so gibt es wirklich keine Möglichkeit, die Pipeline-Warteschlange danach ändern und würde wahrscheinlich eine wirklich schlechte Idee sowieso sein. Setzen Sie solche Logik in die Pipelines selbst ist in der Regel bevorzugte Ansatz, auch 'process_item 'erhält Spinne als Argument, so dass Sie" spider.start_urls "darin überprüfen und entweder ein Element zurückgeben/ändern können. Ich habe das Beispiel aktualisiert, um dies zu zeigen. – Granitosaurus