2013-10-11 3 views
10

一部のスパイダーではhttp-proxyを有効にし、他のスパイダーでは無効にしたいと考えています。さまざまなスパイダーのための異なる治療設定を設定するにはどうすればいいですか?

私はこれを行うことはできますか?

# settings.py 
proxy_spiders = ['a1' , b2'] 

if spider in proxy_spider: #how to get spider name ??? 
    HTTP_PROXY = 'http://127.0.0.1:8123' 
    DOWNLOADER_MIDDLEWARES = { 
     'myproject.middlewares.RandomUserAgentMiddleware': 400, 
     'myproject.middlewares.ProxyMiddleware': 410, 
     'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': None 
    } 
else: 
    DOWNLOADER_MIDDLEWARES = { 
     'myproject.middlewares.RandomUserAgentMiddleware': 400, 
     'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': None 
    } 

上記のコードが機能しない場合は、他にも提案はありますか?

答えて

3

あなたは、このように簡単な何か独自のプロキシミドルウェアを定義することができます。

from scrapy.contrib.downloadermiddleware import HttpProxyMiddleware 

class ConditionalProxyMiddleware(HttpProxyMiddleware): 
    def process_request(self, request, spider): 
     if getattr(spider, 'use_proxy', None): 
      return super(ConditionalProxyMiddleware, self).process_request(request, spider) 

次に、プロキシを有効にしたいスパイダーに属性use_proxy = Trueを定義します。デフォルトのプロキシミドルウェアを無効にして、変更したミドルウェアを有効にすることを忘れないでください。

-2

1つではなく2つのプロジェクトを使用してみませんか?

proj1proj2という2つのプロジェクトを指定しましょう。 proj1でのsettings.py、これらの設定を置く:proj2

HTTP_PROXY = 'http://127.0.0.1:8123' 
DOWNLOADER_MIDDLEWARES = { 
    'myproject.middlewares.RandomUserAgentMiddleware': 400, 
    'myproject.middlewares.ProxyMiddleware': 410, 
    'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': None 
} 

settings.pyを、これらの設定を置く:

DOWNLOADER_MIDDLEWARES = { 
    'myproject.middlewares.RandomUserAgentMiddleware': 400, 
    'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': None 
} 
+0

を使用し、あなたが同じプロジェクトで複数のクモをしたい特定のケースがあります。 – rajat

7

あなたが働くspider.pyファイル 例内setting.overridesを追加することができます。

from scrapy.conf import settings 

settings.overrides['DOWNLOAD_TIMEOUT'] = 300 

があなたのために、このようなものも少し遅れて

from scrapy.conf import settings 

settings.overrides['DOWNLOADER_MIDDLEWARES'] = { 
    'myproject.middlewares.RandomUserAgentMiddleware': 400, 
    'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': None 
} 
+3

これを忘れないでください。 'scrapy.confのインポート設定から ' –

+2

settings.overridesは、1より大きいScrapyバージョンで廃止されました。スパイダー宣言でcustom_settings辞書を使用すると動作します。 – v01d

21

を動作するはずですが、以来、 1.0.0をリリースすると、スパイダーごとの設定を次のようにオーバーライドすることができます。

class MySpider(scrapy.Spider): 
    name = "my_spider" 
    custom_settings = {"HTTP_PROXY":'http://127.0.0.1:8123', 
         "DOWNLOADER_MIDDLEWARES": {'myproject.middlewares.RandomUserAgentMiddleware': 400, 
                'myproject.middlewares.ProxyMiddleware': 410, 
                'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': None}} 




class MySpider2(scrapy.Spider): 
     name = "my_spider2" 
     custom_settings = {"DOWNLOADER_MIDDLEWARES": {'myproject.middlewares.RandomUserAgentMiddleware': 400, 
                 'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': None}} 
+0

私は '名前エラー" AUTOTHROTTLE_ENABLED "not defined"を取得します。あなたのスニペットには、あなたがimport settings.pyを表示していない –

8

これを行うためのもっと簡単な方法があります。

class MySpider(scrapy.Spider): 
    name = 'myspider' 

    custom_settings = { 
     'SOME_SETTING': 'some value', 
    } 

私は、ユーザーが何をしたいのかではありませんScrapy 1.3.1

関連する問題