डिफ़ॉल्ट रूप से प्रत्येक आइटम प्रत्येक पाइपलाइन के माध्यम से जाता है।
उदाहरण के लिए, यदि आप 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'
बढ़ता है।
आप, आइटम अनुरोध में से एक पाइपलाइन संभाल केवल एक ही प्रकार हो सकता है, हालांकि अगर वह आइटम प्रकार से निपटने अद्वितीय है, आगे बढ़ने से पहले आइटम प्रकार देख सकते हैं:
def process_item(self, item, spider):
if not isinstance(item, ProfileItem):
return item
# Handle your Profile Item here.
आप उपरोक्त दो process_item
तरीकों था विभिन्न पाइपलाइनों में सेटअप, आइटम उन दोनों के माध्यम से जाएगा, ट्रैक किया जा रहा है और संसाधित किया जा रहा है (या दूसरे पर नजरअंदाज कर दिया गया है)।
साथ ही आप सभी 'से संबंधित' आइटम को संभालने के लिए एक पाइपलाइन सेटअप हो सकता है:
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
या, आप तो यह और भी अधिक जटिल बनाने के लिए और एक प्रकार प्रतिनिधिमंडल प्रणाली है कि कक्षाओं में लोड करता है और डिफ़ॉल्ट प्रबंधक तरीकों कॉल विकसित कर सकता, स्केपर कैसे मिडलवेयर/पाइपलाइनों को संभालता है। यह वास्तव में आप पर निर्भर करता है कि आपको इसकी कितनी जटिल आवश्यकता है, और आप क्या करना चाहते हैं।