2010-11-06 9 views
11

नहीं कहा जा रहा है मुझे स्कैपी पाइपलाइन के साथ कुछ परेशानी हो रही है। मेरी जानकारी को फॉर्म साइट्स को स्क्रैप किया जा रहा है ठीक है और process_item विधि को सही तरीके से बुलाया जा रहा है। हालांकि स्पाइडर_ओपेन और स्पाइडर_क्लोज्ड विधियों को नहीं कहा जा रहा है।स्केपर पाइपलाइन स्पाइडर_ओपेन और स्पाइडर_क्लोस्ड

class MyPipeline(object): 

    def __init__(self): 
     log.msg("Initializing Pipeline") 
     self.conn = None 
     self.cur = None 

    def spider_opened(self, spider): 
     log.msg("Pipeline.spider_opened called", level=log.DEBUG) 

    def spider_closed(self, spider): 
     log.msg("Pipeline.spider_closed called", level=log.DEBUG) 

    def process_item(self, item, spider): 
     log.msg("Processsing item " + item['title'], level=log.DEBUG) 

दोनों __init__ और process_item प्रवेश संदेशों लॉग में displyed हैं, लेकिन spider_open और spider_close प्रवेश संदेशों नहीं हैं।

मुझे स्पाइडर_ओपेन और स्पाइडर_क्लोज्ड विधियों का उपयोग करने की आवश्यकता है क्योंकि मैं उन्हें डेटाबेस से कनेक्शन खोलने और बंद करने के लिए उपयोग करना चाहता हूं, लेकिन उनके लिए लॉग में कुछ भी दिखाई नहीं दे रहा है।

यदि किसी ने भी सुझाव दिया है कि यह बहुत उपयोगी होगा।

उत्तर

8

क्षमा करें, मैंने इसे पोस्ट करने के बाद ही पाया।

dispatcher.connect(self.spider_opened, signals.spider_opened) 
dispatcher.connect(self.spider_closed, signals.spider_closed) 

__init__ में अन्यथा यह कभी नहीं संकेत प्राप्त कॉल करने के लिए यह

+0

आपके उत्तर के लिए धन्यवाद, लेकिन आपको 'प्रेषक' चर कहां मिलता है? और मैं इसे http://doc.scrapy.org/en/latest/topics/item-pipeline.html में कैसे नहीं ढूंढ सकता? :( – wrongusername

+4

इसके लिए काम करने के लिए, आपको यह सुनिश्चित करना होगा कि आप निम्न चीज़ें आयात करें: 'scrapy.xlib.pydispatch आयात प्रेषक से ' स्केपर आयात सिग्नल से – herrherr

4

उचित विधि के नाम open_spider और close_spider, नहीं spider_opened और spider_closed हैं: आप जोड़ने के लिए। इसे यहां दस्तावेज किया गया है: http://doc.scrapy.org/en/latest/topics/item-pipeline.html#writing-your-own-item-pipeline

+1

यह गलत है। 'Spider_open' और 'spider_closed' सिग्नल नहीं हैं विधियों। जैसा कि यहां दस्तावेज किया गया है http://doc.scrapy.org/en/latest/topics/signals.html?highlight=spider_opened#std:signal-spider_opened और यहां http://doc.scrapy.org/en /latest/topics/signals.html?highlight=spider_closed#std:signal-spider_closed –

+1

ओपन_स्पिडर और क्लोज_स्पीडर नामक विधियां हैं, हालांकि वे प्रश्न से संबंधित नहीं हैं। –

+1

ठीक है, लेकिन आप अपने स्पाइडर_पेन और स्पाइडर_क्लोज्ड विधियों को क्यों बनाते हैं उदाहरण पाइपलाइन और उन्हें कॉल करने की उम्मीद है? और यदि आपको पहले से ही बुलाए जा रहे तरीकों को मैन्युअल रूप से सिग्नल संलग्न करने की आवश्यकता क्यों है? –

संबंधित मुद्दे