技術的には、スパイダーの初期化後に設定を上書きすることはできますが、ほとんどの場合、以前に適用されたため何も影響しません。
あなたが実際に行うことができますが元のため、-s
を使用して-a
を使用して、コマンドラインオプションとオーバーライドのプロジェクト設定とスパイダーにパラメータを渡すことです)
スパイダー:
class TheSpider(scrapy.Spider):
name = 'thespider'
def __init__(self, *args, **kwargs):
self.spider_id = kwargs.pop('spider_id', None)
super(TheSpider).__init__(*args, **kwargs)
CLI:
scrapy crawl thespider -a spider_id=XXX -s SETTTING_TO_OVERRIDE=YYY
あなたが何かより高度なものが必要な場合は、あなたのスパイダーをラッピングするカスタムランナーを書くことを検討してください。以下はdocsからの例です:
from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings
process = CrawlerProcess(get_project_settings())
# 'followall' is the name of one of the spiders of the project.
process.crawl('followall', domain='scrapinghub.com')
process.start() # the script will block here until the crawling is finished
だけSettingsインスタンスを返す、独自のルーチンでget_project_settings
を交換してください。
とにかく、スパイダーのコードがクリーンで再利用可能な状態に保たれるように、非スクレイピングロジックでオーバーロードされないようにしてください。
あなたは '__init__'の周りにクラスを投稿できますか?特に、他のクラスからそれを派生させますか? – hansaplast
いいえ、その場で設定を上書きすることはできませんが、あなたの場合に役立つクラスパラメータを渡すことができます。 – eLRuLL