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