【发布时间】:2018-10-01 11:53:53
【问题描述】:
我想合并从站点 A 获取项目和从站点 B 获取项目的项目。
A 项目和 B 项目共享一些允许我关联项目的字段。否则,每个字段都有 A 或 B 独有的字段。
我想根据相关性合并这些项目,创建包含
的项目- 共享字段,
- A 独有的字段,以及
- B 独有的字段。
A 或 B 独有的项目应原样通过。
我不能假设:
- A 和 B 上的项目顺序相同
- 每个 A 项都有对应的 B 项
- 每个 B 项都有对应的 A 项
我将如何在 Scrapy 中做到这一点?在 Scrapy 中做还是在后处理步骤中做得更好?
实施思路:
因为我不能接受订单,所以我需要一个临时商店。我正在查看
伪代码:
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
把这个逻辑放在哪里?
我无法使用项目管道,因为我需要生成多个项目 用于清空临时存储。我了解项目管道可以 准确返回零或一项,但不会更多。
我可以构建一个蜘蛛,它知道如何抓取两个站点。我可以 将逻辑放入蜘蛛中。
我可以构建一个自定义提取器并将逻辑放在那里。
【问题讨论】:
-
我会单独做这个。