将多个项目合并为一个管道 - 带有scrapy用例的{NEI4J数据库

时间:2015-05-05 16:14:39

标签: python neo4j scrapy pipeline py2neo

我使用scrapy来刮取社交网络,然后在NEO4J数据库中获取数据。

我的挑战是将两个项目相互关联:

class person(scrapy.Item):
name=Field()

class AnotherPerson(scrapy.Item):
name=Field()

我想通过说:

将这两个项目保存在我的图表数据库中

人与AnotherPerson()

有关系

我需要的是在一个管道中发送两个项目!!我们应该怎么做 ? 我试图通过列表发送它,但是只要集合在那里,scrapy就不接受列表。

这是我的伪代码:

  1. 我得到一份人员名单(每个人都有个人资料和像facebook一样的朋友名单)

  2. 对于此列表中的每个人:

    • 我打开他的个人资料(通过请求并将回复发送给 回调)
    • 我接受回复并创建一个项目:Person()并填写
    • 我发送带有“yield”的项目
    • 然后我打开他的朋友名单(通过请求发送 回应另一个回调)
    • 我有好友列表页面
    • 然后对于此列表中的每个朋友(页面显示一个名称和一个 城市):
    • 创建一个项目:AnotherPerson()
    • 我用名称和城市
    • 填写此项目
    • 我发送带有“yield”的项目
  3. 我有两条管道。它们可以很好地将数据保存在数据库中,但我没有任何关于如何将它们联系起来的线索,因为我需要在同一个过程中(即管道)执行此操作。

    我不确定自己是否清楚,所以请不要犹豫要求澄清。

1 个答案:

答案 0 :(得分:2)

如何将Person项添加为AnotherPerson的字段呢?请记住,您始终可以在请求上使用meta参数在回调之间传递信息。

您可以执行以下操作:

parse_person(self, response):
    ...
    yield Request(self, url=someurl, callback=parse_anotherperson, 
                    meta={"some_key":"some_person_id"})

然后,您可以在Person项目上添加对上一个AnotherPerson的引用作为字段或其他内容。