Während ich in einigen Punkten mit Tomas übereinstimmen kann, würde ich diese Berechnung nie in die Spinne selbst setzen.
Ich benutze Spinnen, um Daten von Seiten zu extrahieren. Für mich ist das der einzige Zweck einer Spinne. Ich benutze ItemLoader zum Reinigen von extrahierten Daten und grundlegende Manipulation (wie alles in die gleiche Basiseinheit konvertieren). Und schließlich verwende ich Pipelines für jede Datenmanipulation auf hohem Niveau, wie das Kombinieren von Feldern aus Elementen.
Stellen Sie sich vor Sie haben ein Dutzend Spinnen und Sie berechnen price_per_m2 in ihnen. Ihr Projekt ist gewachsen und Sie beginnen, Spinnen für ein anderes Land zu programmieren. Sie haben Spinnen, die Preise in GBP, EUR und USD erhalten. Wenn Sie nun price_per_m2 vergleichen möchten, müssen Sie 1) Einheiten in jeder Spinne vor Berechnungen umrechnen oder 2) Metadaten zu Elementen hinzufügen, um eine Nachbearbeitung durchzuführen. Beide Ansätze sind meiner Meinung nach belastend. Mein Ansatz: Spinnen extrahieren Daten, ItemLoader konvertiert jeden Preis in dieselbe Einheit, einige Pipeline berechnet price_per_m2 für jeden Artikel (alle in den gleichen Einheiten).
Ich wählte Antwort von Tomas, nur weil er zuerst war, Entschuldigung dafür :-). Können Sie mir erklären, warum würden Sie jeden Preis in ItemLoader (https://doc.scrapy.org/en/latest/topics/loaders.html#input-and-output-processors) und nicht in Spyder in dieselbe Einheit konvertieren? Ich versuche die Logik hinter dem Scrapy Framework zu verstehen. – WebOrCode
1) Idealerweise möchte ich im Artikel selbst Operationen wie Einheitenumrechnungen durchführen. Aber Scrapy Design folgt einem anderen Ansatz und ich kämpfe nicht dagegen. ItemLoader ist der Item, wo ich diese Operation machen kann, am nächsten. 2) Es ist mehr DRY: wenn ItemLoader verwendet wird, würde alles, was mit Einheitenumwandlungen zu tun hat, in einem einzigen Prozessor sein, während wenn ich es in Spiders mache, würde ich Code/Logik duplizieren. – Djunzu