Settings
オブジェクト自体が不変であるが、元settings.set
https://github.com/scrapy/scrapy/blob/129421c7e31b89b9b0f9c5f7d8ae59e47df36091/scrapy/settings/init.py#L234
ために、setメソッドの数を持っています(1.0から始まる)Scrapyクモのの
最近のバージョンでは、クモのcustom_settings
プロパティに提示するものと設定を上書きすることを目的としたクラスメソッドupdate_settings
@classmethod
def update_settings(cls, settings):
settings.setdict(cls.custom_settings or {}, priority='spider')
を持っています。だから、あなたの目標を達成するために、あなたはその
class TheSpider(scrapy.Spider):
name = 'thespider'
is_debug = True
custom_debug_settings = {
# Put your debug settings here
}
@classmethod
def update_settings(cls, settings):
settings.setdict(getattr(cls, 'custom_debug_settings' \
if getattr(cls, 'is_debug', False) \
else 'custom_settings', None) or {},
priority='spider')
のようないくつかの方法で、そのメソッドをオーバーライドして、それができるので、もちろん、プロジェクト全体のデバッグの目的のためにカスタム設定ファイルを持つ方法「ジャンゴの2つのスクープ」が存在することができますそのような何か:
settings.py(ファイルの末尾に追加):
try:
from dev_settings import *
except ImportError:
pass
、あなたがのsettings.pyの横dev_settings.pyを作成することができますし、開発目的にカスタマイズしたい設定を追加してください。dev_settings.pyが存在する場合は上書きされ、そうでない場合はインポートが無視されます。
これは部分的に機能するようです。私の 'custom_debug_settings'は正しく設定されていますが、適用されません。私はログレベルを "DEBUG"に設定しようとしましたが、 'parse()'関数で 'self.settings.attributes ['LOG_LEVEL']'を呼び出すと、正しい値を返しますが、デバッグメッセージは表示されません。何か案は? – user1068464
もちろん。 Scrapyのソースコードを見ると、spider custom_settingsを処理する前にloggerが作成されるので、設定を変更してデフォルトのロガーに影響を与える方法はありません。上記のインポート設定の方法を使用するか、カスタムログハンドラを追加するかカスタムロガーを作成する必要があります。 – mizhgun
ありがとうございました。私の問題は別の問題なので、私はあなたの答えを受け入れました。インポート設定のアプローチは私のニーズには適していません。作成されたログは実際にスパイダーではなくクローラーによって作成されるため、カスタムログ処理も簡単ではないようです。そこで、私は、クローラで新しいロガーを作成する方法(スパイダーの実際の設定を使用する方法)があるかどうかを試してみます。 – user1068464