20

一部のスパイダーに対して 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
    }

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

4

5 に答える 5

14

これを行う新しい簡単な方法があります。

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

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

Scrapy 1.3.1 を使用しています

于 2017-03-11T18:40:48.987 に答える
8

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
}
于 2014-08-28T22:43:29.187 に答える
4

次のように、独自のプロキシ ミドルウェアを簡単に定義できます。

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次に、プロキシを有効にするスパイダーの属性を定義します。デフォルトのプロキシ ミドルウェアを無効にし、変更したものを有効にすることを忘れないでください。

于 2013-10-14T12:21:36.847 に答える
-2

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

proj1これら 2 つのプロジェクトにとを付けて名前を付けましょうproj2。に、次proj1settings.py設定を入力します。

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

に、次proj2settings.py設定を入力します。

DOWNLOADER_MIDDLEWARES = {
     'myproject.middlewares.RandomUserAgentMiddleware': 400,
     'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': None
}
于 2013-10-12T03:51:35.600 に答える