2017-11-04 1 views
0

Dieser Code ist ein Teil meiner Scrapy Spinne:Stopp Scrapy Spinne, wenn Datum von Seite älter ist, dass gestern

# scraping data from page has been done before this line 

publish_date_datetime_object = (datetime.strptime(publish_date, '%d.%m.%Y.')).date() 

yesterday = (datetime.now() - timedelta(days=1)).date() 

if publish_date_datetime_object > yesterday: 
    continue 

if publish_date_datetime_object < yesterday: 
    raise scrapy.exceptions.CloseSpider('---STOP---DATE IS OLDER THAN YESTERDAY') 

# after this is ItemLoader and yield 

Dies funktioniert gut.

Meine Frage ist Scrapy Spider am besten Ort, um diesen Code/Logik zu haben?

Ich weiß nicht, wie man es an einem anderen Ort implementieren.
Vielleicht kann es in einer Pipeline implementiert werden, aber AFAIK die Pipeline wird ausgewertet, nachdem das Kratzen getan wurde, so dass bedeutet, dass ich alle addieren muss, sogar tausend, die ich nicht brauche.
Eine Skala ist 5 addiert von gestern versus 500 addiert auf der ganzen Seite.
Ich sehe keinen Vorteil in Moving-Code zu Pipeline es bedeutet, dass Verarbeitung (Download und Scraping) 500 addiert, wenn ich nur 5 davon brauche.

+0

Haben Sie die Daten beim Scraping nicht bereits "heruntergeladen und verarbeitet"? Aus der Sicht eines Betreuers könnte es besser sein, Bedenken zu trennen. Die Pipeline ist der Ort, an dem du unerwünschte Gegenstände fallen lässt und die Spinne erledigt einfach die Aufgabe des Sammlers. –

+0

OK, ich verstehe Ihre Frage. Frage ist richtig. Es gibt mehrere Seiten (eine nach der anderen, wie Paginierung), jede Seite hat 25 hinzugefügte Seiten (wenn ich 500 hinzufüge, dann habe ich 20 Seiten, und ich muss nur die ersten N Seiten herunterladen, nichts danach). – WebOrCode

+0

Das ist richtig, sollte aus dem Code wissen, sorry. Dann ist es für mich absolut sinnvoll, es in die Spinne zu lassen, es spart wirklich Ressourcen auf praktische Weise. –

Antwort

1

Es ist der richtige Ort, wenn Ihre Spinne aufhören soll zu kriechen, nachdem etwas anzeigt, dass es keine nützlichen Daten mehr zu sammeln gibt.

Es ist auch der richtige Weg, es zu tun, eine CloseSpider-Ausnahme mit einer ausführlichen Schlussgrundmeldung zu erhöhen.

Eine Pipeline wäre nur dann besser geeignet, wenn nach der festgestellten Schwelle Objekte gesammelt werden, aber wenn sie ALLE zur Verfügung stehen, wäre dies eine Verschwendung von Ressourcen.