Пользовательская команда управления Django, запускающая Scrapy: как включить параметры Scrapy?

Я хочу иметь возможность запускать фреймворк сканирования веб-сайтов Scrapyиз Django. Сам Scrapy предоставляет только инструмент командной строки scrapyдля выполнения своих команд, то есть инструмент не был специально написан для вызова из внешней программы.

Пользователь Михаил Коробовпредложил хорошее решение, а именно вызвать Scrapy из пользовательской команды управления 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Теперь я могу выполнять python manage.py scrapy crawl domain.comиз проекта Django. Однако параметры команды Scrapy вообще не анализируются. Если я выполню python manage.py scrapy Crawl domain.com -o scraped_data.json -t json, я получу только следующий ответ:

Usage: manage.py scrapy [options] 

manage.py: error: no such option: -o

Итак, мой вопрос: как расширить пользовательскую команду управления на принять параметры командной строки Scrapy?

К сожалению, документация Django по этой частине очень обширна. Я также читал документацию модуля Python optparse, но после этого он не стал мне понятнее.Может ли кто-нибудь помочь мне в этом отношении? Заранее большое спасибо!

11
задан Community 23 May 2017 в 12:31
поделиться