मुझे एक आइटम पाइपलाइन लोड करने के लिए अपना स्क्रैपर प्राप्त करने में समस्याएं आ रही हैं। अपने कस्टम पाइपलाइन को जोड़ने और जोड़ने के अपने प्रयासों में मुझे निम्न त्रुटि मिल रही है:
ImportError: No module named pipelines
मैंने प्रलेखन की कोशिश की है लेकिन यह वास्तव में यह नहीं बताता है कि ITEM_PIPELINE
विकल्प पथ कैसे सेट करें। यह डॉक्स से उदाहरण है:
ITEM_PIPELINES = {
'myproject.pipelines.PricePipeline': 300,
'myproject.pipelines.JsonWriterPipeline': 800,
}
myproject
कहां से आता है?
नीचे मेरे आवेदन की निर्देशिका संरचना है:
├── README.md
├── bot.py
├── data
│ └── formax.json
├── pipelines
│ ├── FormaxPipeline.py
│ └── __init__.py
├── praw.ini
├── requirements.txt
└── scrapers
├── __init__.py
├── formax.py
formax.py
कक्षा में मैंने कुछ सेटिंग्स सेट की हैं।
custom_settings = {
'ITEM_PIPELINES': {
'pipelines.FormaxPipeline': 100
},
'USER_AGENT': 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)'
}
मैं रूट डायरेक्टरी से इस तरह दौड़ता हूं:
scrapy runspider scrapers/formax.py -o data/formax.json
स्क्रैपर निम्न त्रुटि के साथ विफल रहता है:
ImportError: No module named pipelines
मैं सेटिंग्स में कस्टम पाइपलाइन कैसे जोड़ सकता हूं?
2 जवाब
एक दो बातें हैं। सबसे पहले, स्क्रेपी यहां यह अपेक्षा करता है कि आपके पास मानक स्क्रेपी प्रोजेक्ट संरचना है जहां myproject
आपके प्रोजेक्ट का नाम है (और उस प्रोजेक्ट के फ़ोल्डर का नाम)।
दूसरा, ITEM_PIPELINES
आपको अपनी पाइपलाइनों की कक्षाएं निर्दिष्ट करने की आवश्यकता है, जो मैं देख सकता हूं (आपके आवेदन की संरचना और आपके custom_settings
) से आपने केवल मॉड्यूल निर्दिष्ट किया है। pipelines.FormaxPipeline
के बजाय आपके पास ITEM_PIPELINES
सेटिंग में pipelines.FormaxPipeline.FormaxPipeline
होना चाहिए। (यहां मुझे लगता है कि आपकी कक्षा का नाम FormaxPipeline
है और इसे FormaxPipeline.py
फ़ाइल में परिभाषित किया गया है।)
लेकिन वास्तविक त्रुटि इस तथ्य से आती है कि स्क्रेपी मॉड्यूल का पता नहीं लगा सकता है। यह नहीं पता कि इसे और अधिक सफाई से कैसे हल किया जाए, क्योंकि आप पहले से ही कुछ ऐसा करते हैं जो स्क्रेपी को उम्मीद नहीं है (परियोजना संरचना नहीं है), लेकिन मकड़ी को इस तरह से चलाने के लिए एक समाधान है:
PYTHONPATH="$PYTHONPATH:." scrapy runspider scrapers/formax.py -o data/formax.json
यानी पायथन को यह बताने के लिए कि आपका कोड कहां देखना है।
पुराना सवाल, लेकिन मुझे ठीक वैसी ही समस्या थी और यह मुझे घंटों तक मार रहा था! मेरे पास मेरे स्पाइडर क्लास में कस्टम_सेटिंग्स वैरिएबल सेट था और मेरे पास पाइपलाइन क्लास में पाइपलाइन क्लास परिभाषित थी। फ़ाइल जो कुछ फ़ोल्डर्स ऊपर थी। फिर, आप की तरह, मैंने कुछ इस तरह से किया: "myprojname.pipelines.CsvPipeline" और उस पर विविधताएं। हर बार मुझे मॉड्यूल त्रुटि मिली।
तब मुझे कुछ समझ में आया। दस्तावेज़ीकरण में, वे शायद यह मान रहे हैं कि आप इसे सेटिंग.py फ़ाइल में सेट कर रहे हैं, न कि स्पाइडर क्लास के अंदर custom_settings चर में (मुझे लगता है कि आपने यहां सेटिंग फ़ाइल शामिल नहीं की है, लेकिन यह स्क्रैपी के साथ आता है) स्टार्टप्रोजेक्ट कमांड, मुझे यकीन है)। इसलिए, इसके बजाय मैंने उसी फ़ोल्डर में पाइपलाइन्स.py नाम की एक फ़ाइल बनाई, जिसमें मेरी स्पाइडर फ़ाइल थी। और फिर मैंने बस "पाइपलाइन्स.सीएसवीपाइपलाइन" किया और यह काम कर गया!
इसलिए, मैंने इसे सामान्य सेटिंग्स में सेट करने का भी प्रयास किया। यहाँ मुझे अपनी मकड़ी चलाते समय कोई शिकायत नहीं मिली, लेकिन ऐसा भी लग रहा था कि इसने इसका उपयोग नहीं किया। तो यह मेरे लिए कोई विकल्प नहीं था।
संबंधित सवाल
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।