Scrapy web crawling frameworkをDjangoから実行したいと考えています。治療自体はコマンドラインツールscrapy
を提供してそのコマンドを実行する。すなわち、ツールは意図的に外部プログラムから呼び出されるようには書かれていない。Djangoのカスタム管理コマンドを実行するScrapy:Scrapyのオプションを含めるには?
ユーザMikhail Korobovは、nice solutionというDjangoのカスタム管理コマンドからScrapyを呼び出すことができました。便宜上、私はここで彼のソリューションを繰り返します:
# -*- 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
を実行できるようになりました。ただし、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のdocumentation of this partはそれほど広範ではありません。私もPythonのoptparse moduleのドキュメントを読んだことがありますが、それ以降は私には分かりませんでした。この点で誰も助けてくれますか?ありがとうございます!
しかし、私たちはトップディレクトリにあるべきではありませんか?それはどうですか? @pemistahl – Nabin