2017-05-31 3 views
2

現在、私は現在2つのパイプラインを持っています。Scrapy - パイプラインで追加アイテムを作成

ITEM_PIPELINES = { 
    'myproject.pipelines.mutatorPipeline': 300, 
    'myproject.pipelines.submitDatabasePipeline': 800, 
} 

これらは正しい順序で実行されます。

1.)最初のパイプラインはミューテータです。

2.)2番目の情報は、情報をデータベースに送信します。

データが正しくデータベースに送信されます。

私の問題は、データが私のmutator pipelineに届くときに、2番目のパイプラインに渡すために「追加」アイテムを作成したいということです。 (変異なし)現在

が、それは次のようになります。

def process_item(self, item, spider): 
      #Mutate the item 
      return item 

私はできませんが、何度もreturn以上。また、パイプライン1の開始から始まる追加項目を作成したくありません。

多くのことを事前に助けます。

答えて

2

ドキュメントをすばやく見ると、おそらくサブクラスのscrapy.item.Itemを作成できます。これはリンクリストのようなものです。

このように何かに触れているわけではありません。いくつかの変更が必要かもしれませんが、開始するのに十分なはずです。

class Myitem(Item): 
    my_field = scrapy.Field() 

    def __init__(self): 
     self.next = None 
     super(Myitem,self).__init__() 

これで、プロセスアイテムで複数のアイテムを作成してチェーン化できるようになりました。

def process_item(self, item, spider): 
     # Mutate the item, get additional my_value 
     item.next = MyItem() 
     item.next['my_field'] = my_value 
     return item 

これで、データベースパイプラインで各アイテムを処理できます。

def process_item(self, item, ...): 
    current = item 
    while current: 
     # process current 
     current = item.next 
+0

常に項目をリストにしてループします。良いアイデア! –

関連する問題