添加从Scrapy中的其他文件计算的字段的位置

添加从Scrapy中的其他文件计算的字段的位置,scrapy,Scrapy,我用刮痧爬房地产补充道 我有字段price和size(单位为m2),因此我可以将price\u/m2计算为price/size 我的问题是,根据Scrapy中的最佳实践,我应该在哪里(在哪门课上)这样做 现在我在我的scrapy.Spider中有了它,但是我是否应该在其他地方有它(比如管道)以及如何使用它(首选代码示例)?如果所有项目都有一个通用的计算(或一般的后处理),那么使用管道是一种可行的方法。在房地产领域,我可以想象,例如,对地址进行地理编码或将每个项目存储在数据库中。在我看来,使用管道

我用刮痧爬房地产补充道

我有字段
price
size
(单位为m2),因此我可以将
price\u/m2
计算为
price/size

我的问题是,根据Scrapy中的最佳实践,我应该在哪里(在哪门课上)这样做

现在我在我的
scrapy.Spider
中有了它,但是我是否应该在其他地方有它(比如管道)以及如何使用它(首选代码示例)?

如果所有项目都有一个通用的计算(或一般的后处理),那么使用管道是一种可行的方法。在房地产领域,我可以想象,例如,对地址进行地理编码或将每个项目存储在数据库中。在我看来,使用管道的主要原因是,您将这个额外的逻辑从spider中分离出来,以便在需要更改这个逻辑时有一个单独的维护位置。在上面给出的示例中,您可能决定更改地理编码提供程序,或者不使用一个数据库引擎,而是切换到另一个数据库引擎。这就是管道的真正强度。这就是说,根据价格和大小计算每平方米的价格,这几乎是不可能改变的,可以安全地放入spider代码中。另一方面,如果有更多这样简单的计算,你可以考虑使用流水线来节省时间,在每个蜘蛛中重复相同的代码。

< p>虽然我可以在某些点上同意,但我永远不会把这个计算放在蜘蛛本身。

我使用爬行器从页面中提取数据。对我来说,这是蜘蛛的唯一目的。我使用ItemLoader清理提取的数据和基本操作(如将所有内容转换为相同的基本单元)。最后,我使用管道进行任何高级数据操作,比如组合项目中的字段


假设你有一打蜘蛛,你计算它们里面每平方米的价格。您的项目已经增长,您开始为另一个国家编写spider。您可以获得英镑、欧元和美元的价格。现在,如果你想比较每平方米的价格,你必须1)在计算前转换每个蜘蛛的单位,或者2)在项目中添加元数据以便进行后期处理。在我看来,这两种方法都很繁重。我的方法是:蜘蛛提取数据,ItemLoader将每个价格转换为相同的单位,一些管道计算每个项目的每平方米价格(所有项目都在相同的单位中)。

我选择了Tomas的答案,仅仅因为他是第一个,很抱歉:-)。你能解释一下为什么你要在ItemLoader()中将每个价格转换成相同的单位,而不是在spyder中?我试图理解Scrapy框架背后的逻辑。1)理想情况下,我希望在项目本身中进行类似单位转换的操作。但“刮擦设计”采用了不同的方法,我不反对。ItemLoader是最接近我可以执行此操作的Item的东西。2) 它更加枯燥:当使用ItemLoader时,所有与单元转换有关的事情都将在一个处理器中进行,而如果我在Spider中进行,那么我将复制代码/逻辑。