मैं Django के भीतर से Scrapy web crawling framework चलाने में सक्षम होना चाहता हूं। स्केपर ही अपने आदेशों को निष्पादित करने के लिए केवल एक कमांड लाइन उपकरण scrapy
प्रदान करता है, यानी उपकरण को जानबूझकर बाहरी प्रोग्राम से बुलाया नहीं गया था।Django कस्टम प्रबंधन कमांड स्केलिंग चल रहा है: स्केपर के विकल्पों को कैसे शामिल करें?
उपयोगकर्ता Mikhail Korobovnice solution के साथ आया, अर्थात् एक Django कस्टम प्रबंधन कमांड से स्केपर को कॉल करने के लिए। सुविधा के लिए, मैं यहां अपना समाधान दोहराता हूं:
# -*- coding: utf-8 -*-
# myapp/management/commands/scrapy.py
from __future__ import absolute_import
from django.core.management.base import BaseCommand
class Command(BaseCommand):
def run_from_argv(self, argv):
self._argv = argv
return super(Command, self).run_from_argv(argv)
def handle(self, *args, **options):
from scrapy.cmdline import execute
execute(self._argv[1:])
उदा। scrapy crawl domain.com
अब मैं Django परियोजना के भीतर से python manage.py scrapy crawl domain.com
कर सकता हूं। हालांकि, एक स्केपर कमांड के विकल्प बिल्कुल पार्स नहीं किए जाते हैं।
Usage: manage.py scrapy [options]
manage.py: error: no such option: -o
तो मेरे सवाल, कैसे Scrapy के कमांड लाइन विकल्पों को अपनाने के लिए कस्टम प्रबंधन कमांड का विस्तार करने की है: अगर मैं python manage.py scrapy crawl domain.com -o scraped_data.json -t json
करते हैं, मैं केवल निम्नलिखित प्रतिक्रिया मिल?
दुर्भाग्य से, Django के documentation of this part बहुत व्यापक नहीं है। मैंने पायथन के optparse module के दस्तावेज़ीकरण को भी पढ़ा है लेकिन बाद में यह मेरे लिए स्पष्ट नहीं था। क्या कोई इस संबंध में मेरी मदद कर सकता है? आपका अग्रिम रूप से बोहोत धन्यवाद!
लेकिन क्या हमें क्रॉल करने के लिए शीर्ष निर्देशिका में नहीं होना चाहिए ?? यह कैसे किया जाता है? @pemistahl – Nabin