Я хочу иметь возможность запускать фреймворк сканирования веб-сайтов 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, но после этого он не стал мне понятнее.Может ли кто-нибудь помочь мне в этом отношении? Заранее большое спасибо!