में क्रॉलर को प्रोग्रामेटिक रूप से शुरू करने का सबसे आसान तरीका क्या है मैं एक पाइथन मॉड्यूल से स्केपर में क्रॉलर शुरू करना चाहता हूं। मैं अनिवार्य रूप से $ scrapy crawl my_crawler -a some_arg=value -L DEBUG
स्केपर> = 0.14
का सार की नकल करना चाहते हैं मैं जगह में निम्नलिखित बातें है:
- परियोजना के लिए एक settings.py फ़ाइल
- वस्तुओं और पाइपलाइनों
- एक क्रॉलर वर्ग जो BaseSpider फैली और प्रारंभिकरण पर तर्क की आवश्यकता है।
मैं काफी खुशी से scrapy
आदेश का उपयोग कर अपने प्रोजेक्ट चला सकते हैं के रूप में ऊपर निर्दिष्ट, हालांकि मैं एकीकरण परीक्षणों लिख रहा हूँ और मैं करने के लिए प्रोग्राम के हैं: settings.py
और में
- लांच क्रॉल सेटिंग्स का उपयोग क्रॉलर
my_crawler
नाम विशेषता है कि (मैं अपने परीक्षण मॉड्यूल से आसानी से इस वर्ग का दृष्टांत कर सकते हैं। - मैं सभी पाइपलाइनों और मिडलवेयर
settings.py
में विनिर्देश के अनुसार इस्तेमाल किया जा करना चाहते हैं। - जब तक क्रॉलर समाप्त नहीं हो जाता है तब तक प्रक्रिया को अवरोधित करने के लिए मैं काफी खुश हूं। पाइपलाइनें डीबी में चीजें डंप करती हैं और डीबी की सामग्री मैं अपने परीक्षणों को पूरा करने के लिए क्रॉल करने के बाद निरीक्षण करूँगा।
तो, क्या कोई मेरी मदद कर सकता है? मैंने नेट पर कुछ उदाहरण देखे हैं लेकिन वे या तो कई मकड़ियों के लिए हैंक्स, या लगभग Twisted's
प्रकृति अवरुद्ध कर रहे हैं, या स्केपर 0.14 या उससे ऊपर के साथ काम नहीं करते हैं। मुझे बस कुछ वास्तविक सरल चाहिए। :-)
क्या 'subprocess.check_output ([ 'scrapy' साथ कुछ गड़बड़ है , ...], stderr = subprocess.STDOUT) '? – jfs
मुझे लगता है कि एक और प्रक्रिया शुरू करना और बाहरी लिपि को निष्पादित करना एक हैक का थोड़ा सा है। मुझे पता है कि इसे एक ही प्रक्रिया (स्पष्ट रूप से) के भीतर से करना संभव है, और मैं जानना चाहता हूं कि इसे स्वयं कैसे करें। :-) – Edwardr
यह एक हैक नहीं है यदि यह एकीकरण परीक्षण है अन्यथा आप स्क्रैप के विशिष्ट संस्करण पर निर्भर करेंगे (आंतरिक लाइन कमांड लाइन इंटरफ़ेस से तेज़ी से बदलते हैं) – jfs