我想合并从站点A获得项目和从站点B获得项目的项目。
A个项目和B个项目共享一些字段,这些字段使我可以关联项目。否则,每个字段都具有A或B唯一的字段。
我想基于相关性合并这些项目,创建包含
的项目A或B特有的项目应不变地通过。
我不能假设:
我该如何在Scrapy中做到这一点?在Scrapy中进行或更合理的后期处理步骤有意义吗?
实施思路:
由于我无法接受订单,因此需要临时存储。我正在查看<1000个项目,因此在内存中临时存储似乎是可行的。
伪代码:
A_items = list() # in-memory temp storage
for A_item in A_site:
A_items.append(A_item)
for B_item in B_site:
for A_item in A_items:
if is_correlated(A_item, B_item):
AB_item = merge(A_item, B_item)
A_items.remove(A_item)
yield AB_item
else:
yield B_item # B_item without A_item
# remaining A_items, for which we did not find a B_item
for A_item in A_items:
yield A_item
该逻辑放在哪里?
我无法使用项目管道,因为我需要产生多个项目 用于清空临时存储。我了解项目管道可以 返回正好为零或一项,但不能更多。
我可以建造一个蜘蛛,该蜘蛛知道如何刮擦两个站点。我可以 将逻辑放入蜘蛛。
我应该构建一个自定义提取器并将逻辑放在这里。
答案 0 :(得分:1)
对于这种排序用例,我认为后处理是最简单,最直接和可靠的途径。如果您以后还要进行任何其他后期处理/汇总,也将使事情变得更容易。