Scrapy:合并来自不同站点的项目

2024-05-14 08:53:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我想合并从站点A获取项目和从站点B获取项目的项目

A项目和B项目共享一些字段,这些字段允许我关联项目。否则,每个字段都是A或B所特有的

我想基于相关性合并这些项,创建包含

  • 共享字段
  • A所特有的字段,以及
  • B所特有的字段

A或B所独有的项目应原封不动地通过。你知道吗

我不能假定:

  • A和B上的项目顺序相同
  • 每个A项都有一个对应的B项
  • 每个B项都有一个对应的a项

我要怎么做呢?在后处理步骤中使用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

把这个逻辑放在哪里?你知道吗

  • 我不能使用项目管道,因为我需要生成多个项目 清空临时仓库。我知道一个项目管道可以 只返回零项或一项,但不能返回更多项。

  • 我可以建立一个蜘蛛知道如何刮两个网站。我可以 把逻辑放到蜘蛛网上。

  • 我可以建立一个自定义提取器,并将逻辑放在那里。


Tags: 项目infor管道ab顺序站点site
1条回答
网友
1楼 · 发布于 2024-05-14 08:53:12

对于这种用例,我认为后处理是最简单、最直接和可靠的方法。如果以后需要进行任何额外的后期处理/聚合,也会使事情变得更容易。你知道吗

  • 从理论上讲,你可以让你的管道缓冲这些项目,并定期将它们冲入你直接使用的任何存储中。但问题是,为了让管道/中间件看到跨多个spider生成的项目,您必须将它们设计为使用某种共享存储,因为scrapy engine只是一个spider。你知道吗
  • 一个蜘蛛解决方案是一个不错的选择,我认为,但不是最优雅的,加上据我所知,有没有直接的方式来产生项目后,蜘蛛已经完成,所以这将不得不作为一个额外的黑客实现。你知道吗

相关问题 更多 >

    热门问题