最近はPython書いてます。
さて、settings.py に記述したカスタムの設定をItem Pipeline
で使いましょう。
Scrapyのバージョンは1.0.3
を想定しています。
まぁ、公式ドキュメントのサンプルそのままなんですけど。
まずは settings.py に適当に書く
ssettings.py
# -*- coding: utf-8 -*- # Scrapy settings for sample project # # For simplicity, this file contains only settings considered important or # commonly used. You can find more settings consulting the documentation: # # http://doc.scrapy.org/en/latest/topics/settings.html # http://scrapy.readthedocs.org/en/latest/topics/downloader-middleware.html # http://scrapy.readthedocs.org/en/latest/topics/spider-middleware.html BOT_NAME = 'sample' # ... 中略 ... # カスタム設定 FOO = "foo_value"
Item Pipeline に渡す
pipeline.py の中でfrom_crawler()
を定義して、Crawler
が持っているsettings
を受け取る。
そしてItem Pipeline
に渡す。
pipeline.py
# -*- coding: utf-8 -*- # Scrapy 1.0.3 class SamplePipeline(object): def __init__(self, settings): # __init__() の引数に settings を追加して # from_crawler() から受け取る # そして使う self.foo = settings["FOO"] # あんまり良くないけど settings をまるごと # インスタンス変数にしちゃうこともできる self.settings = settings @classmethod def from_crawler(cls, crawler): settings = crawler.settings # cls() を呼び出して __init__() に受け渡す # あんまり良くないけど crawler.settings をまるごと渡しちゃう return cls(settings) def process_item(self, item, spider): print self.foo # => foo_value print self.settings["FOO"] # => foo_value return item
いい感じですね。
取り急ぎ、私からは以上です。