2017-02-17 6 views
1

私は2つのCrawlerProcessを持っています。それぞれは異なるスパイダーを呼び出しています。CrawlerProcessでカスタム設定をスクレイピーで渡す方法はありますか?

storage_settings = {'FEED_FORMAT': 'csv', 'FEED_URI': 'foo.csv'} 
process = CrawlerProcess(get_project_settings()) 
process.crawl('ABC', crawl_links=main_links, custom_settings=storage_settings) 
process.start() 

と私のクモで、私は、引数として、それらを読んで:

def __init__(self, crawl_links=None, allowed_domains=None, customom_settings=None, *args, **kwargs): 
    self.start_urls = crawl_links 
    self.allowed_domains = allowed_domains 
    self.custom_settings = custom_settings 
    self.rules = ...... 
    super(mySpider, self).__init__(*args, **kwargs) 
私はCSVファイルへのクモの出力を保存するために、これらのプロセスのいずれかにカスタム設定を渡したい、私はこれを行うことができると思いました

しかし、これらのカスタム設定についてプロジェクト設定ファイル "settings.py"をどのように伝えることができますか?私はそれらをハードコーディングするのではなく、自動的にそれらを読みたいと思っています。

+0

これが可能かどうかわかりませんが、各スパイダーの設定ファイルアプローチは解決策ですか?それは私のプロジェクトでどのように行うのですか? – voidpointercast

+0

このようにするのが私の目標です。ループの場合はプロセスを接続してから、自動的にcsv出力ファイルの名前を変えることができます。設定ファイルを使ってもいいですか?それについてもっと詳しく説明できますか? – owise

答えて

2

これらの設定については、ファイルには言えません。クローラの設定とスパイダー設定の間にはおそらく混乱があります。治療中には、この訓練の時点での餌のパラメタは、クモのプロセスに渡され、スパイダには渡される必要はありません。クローラ・プロセスにパラメータとして渡す必要があります。私はあなたと同じユースケースを持っています。あなたがすることは、現在のプロジェクト設定を読み込んで、各クローラプロセスに対してオーバーライドします。以下のサンプルコードを参照してください:

process.crawl()への呼び出しが正しくありません。スパイダーの名前は最初の引数として文字列として渡されるべきです:process.crawl('MySpider', crawl_links=main_links)そしてもちろんMySpiderはスパイダークラスのname属性に与えられた値にする必要があります。

0

crawl()メソッドに設定を渡さないでください。また、最初の引数としてあなたのクモのクラス名をcrawl()に渡します。

from my_crawler.spiders.my_scraper import MySpider 
from scrapy.crawler import CrawlerProcess 
from scrapy.settings import Settings 
from scrapy.utils.project import get_project_settings 
from twisted.internet import reactor 

process = CrawlerProcess(get_project_settings()) 

process.crawl(MySpider(), crawl_links=main_links) 

process.start() 
+0

これは私が今やっていることです、私は最初の引数としてスパイダー 'ABC'の名前を渡しています。 – owise

+0

名前ではなく、私が言及したようにクラス名を渡します – Umair

+0

私はそれから何を得ますか? – owise

関連する問題