2011-10-14 6 views
13

पर एक स्केपर स्पाइडर को दोबारा चलाने के लिए मैंने कुछ वेबसाइटों को स्क्रैप करने के लिए Scrapy का उपयोग शुरू कर दिया है। अगर मैं बाद में अपने मॉडल में एक नया फ़ील्ड जोड़ता हूं या अपने पार्सिंग फ़ंक्शंस को बदलता हूं, तो मैं इसे फिर से स्क्रैप करने के लिए डाउनलोड किए गए कच्चे डेटा को "पुनः चलाने" में सक्षम होना चाहता हूं। ऐसा लगता है कि Scrapy एक बिंदु पर एक रीप्ले फ़ाइल में अधूरी डाटा स्टोर करने की क्षमता थी:संग्रहीत डेटा

http://dev.scrapy.org/browser/scrapy/trunk/scrapy/command/commands/replay.py?rev=168

लेकिन इस कार्यक्षमता Scrapy के वर्तमान संस्करण में हटा दिया गया है लगता है। क्या यह हासिल करने का कोई और तरीका है?

+1

आप एमएल में पूछने का प्रयास किया फिर से शुरू करने की कोशिश? अगर मैं आपके प्रश्न पूछता हूं और सिर्फ जवाब पेस्ट करता हूं तो मुझे यह अनुचित लगता है: पी – naeg

+1

यदि आपके पास मेरी समस्या का समाधान है, तो यह मेरे द्वारा ठीक है - बस अपने स्रोत का संदर्भ लें;) – del

उत्तर

18

यदि आप crawl --record=[cache.file] [scraper] चलाते हैं, तो आप replay [scraper] का उपयोग कर पाएंगे।

वैकल्पिक रूप से, आप DOWNLOADER_MIDDLEWARES में शामिल करके HttpCacheMiddleware के साथ सभी प्रतिक्रियाओं को कैश कर सकते हैं:

DOWNLOADER_MIDDLEWARES = { 
    'scrapy.contrib.downloadermiddleware.httpcache.HttpCacheMiddleware': 300, 
} 

आप ऐसा करते हैं, हर बार जब आप स्क्रेपर चलाने के लिए, यह फाइल सिस्टम पहले की जाँच करेगा।

+0

मैंने 'स्क्रैप क्रॉल --record = mycache myspider' और त्रुटि संदेश मिला "क्रॉल: त्रुटि: ऐसा कोई विकल्प नहीं: --record"। मैं स्केपर 0.12.0.2548 का उपयोग कर रहा हूँ। HttpCacheMiddleware का उपयोग करना काम नहीं करेगा क्योंकि मैं समय के साथ कई समान अनुरोध करता हूं जो विभिन्न प्रतिक्रियाओं को वापस कर देगा। – del

3

आप के रूप में कहा http://scrapy.readthedocs.org/en/latest/topics/downloader-middleware.html?highlight=FilesystemCacheStorage#httpcache-enabled

सभी http अनुरोध और प्रतिक्रिया को फिर से शुरू रेंगने लागू करने के लिए कैश करने के लिए HTTPCACHE_ENABLED सक्षम कर सकते हैं।

या नौकरी को रोकते हैं और रेंगने http://scrapy.readthedocs.org/en/latest/topics/jobs.html

+0

यह काम नहीं करेगा अगर मैं समय के साथ समान अनुरोध करना चाहता हूं जो विभिन्न प्रतिक्रियाओं को वापस कर देगा। उदाहरण के लिए, अगर मैं हर घंटे slashdot.org होम पेज को स्क्रैप करना चाहता हूं तो क्या होगा? मैं इसे फिर से नहीं चला सकता, क्योंकि कैश किए गए प्रवेश को हर घंटे ओवरराइट किया जाएगा। – del

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