Django 内からScrapy Web クロール フレームワークを実行できるようにしたいと考えています。Scrapy 自体は、scrapy
そのコマンドを実行するためのコマンド ライン ツールのみを提供します。つまり、このツールは、外部プログラムから呼び出されるように意図的に作成されたわけではありません。
ユーザーMikhail Korobovは、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:])
eg を呼び出す代わりに、Django プロジェクト内からscrapy crawl domain.com
実行できるようになりました。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 のドキュメントはあまり充実していません。Python のoptparse モジュールのドキュメントも読みましたが、その後はよくわかりませんでした。この点で誰かが私を助けることができますか? よろしくお願いします!