在哪里添加从Scrapy中的其他文件计算的字段

时间:2017-11-03 10:14:05

标签: scrapy

我正在使用Scrapy抓住房地产补充。

我有字段BadRequest(myErrors)price(以m2为单位),因此我可以将size计算为price_per_m2

根据Scrapy的最佳实践,我的问题是我应该在哪里(在什么课堂上)?

现在我已经在我的price/size中了,但是我应该在其他地方(如管道)以及如何(代码示例首选)?

2 个答案:

答案 0 :(得分:1)

如果您对所有项目都有一个共同的计算(或一般的后处理),那么使用管道是一种可能的方法。在房地产中,我可以想象例如地理编码地址或将每个项目存储在数据库中。在我看来,使用管道的主要原因是你将这些额外的逻辑从蜘蛛中分离出来,这样当你需要改变这个逻辑时你就有了一个维护点。在上面给出的示例中,您可能决定更改地理编码提供程序,或者不使用一个数据库引擎,而是切换到另一个数据库引擎。这是管道的真正优势。也就是说,从价格和尺寸计算每平方米的价格,这是很难改变的,可以安全地直接进入蜘蛛代码。另一方面,如果有更多这样简单的计算,您可以考虑使用管道来节省在每个蜘蛛中重复相同代码的时间。

答案 1 :(得分:1)

虽然我在某些方面同意Tomas,但我绝不会把这个计算放在蜘蛛本身。

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

想象一下,你有十几个蜘蛛,你在里面计算price_per_m2。您的项目已经增长,您开始为另一个国家编写蜘蛛编码。你有蜘蛛获得英镑,欧元和美元的价格。现在,如果您想要比较price_per_m2,您必须1)在计算之前转换每个蜘蛛中的单位,或者2)将元数据添加到项目以进行后期处理。在我看来,这两种方法都很繁琐。我的方法:蜘蛛提取数据,ItemLoader将每个价格转换为相同的单位,一些Pipeline为每个项目计算price_per_m2(所有这些都以相同的单位计算)。