デフォルトでは、すべてのアイテムがすべてのパイプラインを通過します。例えば
、あなたがProfileItem
とCommentItem
を得た場合、彼らは両方とも、すべてのパイプラインを通過します。あなたは、トラックの項目タイプにパイプラインを設定している場合は、あなたのprocess_item
方法は次のようになります。
def process_item(self, item, spider):
self.stats.inc_value('typecount/%s' % type(item).__name__)
return item
ProfileItem
が伝わってくるときは、'typecount/ProfileItem'
がインクリメントされます。 CommentItem
が届くと、'typecount/CommentItem'
がインクリメントされます。
は商品リクエストの一種類のみ、しかし、その項目タイプを扱う場合は先に進む前に、アイテムの種類を確認することで、ユニークである1つのパイプラインのハンドルを持つことができます:あなたは上記の2つのprocess_item
方法を持っていた場合
def process_item(self, item, spider):
if not isinstance(item, ProfileItem):
return item
# Handle your Profile Item here.
を別のパイプラインで設定すると、そのアイテムは両方を通過し、追跡され、処理されます(または2番目のアイテムでは無視されます)。 、あなたはそれがさらに複雑にし、クラスをロードすると、デフォルトのハンドラメソッドを呼び出すタイプの委譲システムを開発することができ、
def process_item(self, item, spider):
if isinstance(item, ProfileItem):
return self.handleProfile(item, spider)
if isinstance(item, CommentItem):
return self.handleComment(item, spider)
def handleComment(item, spider):
# Handle Comment here, return item
def handleProfile(item, spider):
# Handle profile here, return item
または:
はまた、あなたはすべての「関連」の項目を処理するための1つのパイプラインを設定している可能性がありScrapyがミドルウェア/パイプラインをどのように処理するかと同様です。どのくらい複雑で必要なのか、何をしたいのかはあなた次第です。