2014-09-18 35 views
3

我目前通過自定義中間件爲請求分配隨機代理。我想將關鍵碼下載限制到請求正在使用的特定代理,但據我所知,開箱即可,只有綁定到域或IP時纔有可能。我擔心在代理中間件中實現池化邏輯會導致線程安全問題。有沒有人做過這個?任何指針將不勝感激。使用多個代理限制請求

回答

2

As recommended on the Scrapy mailing list,有一個特殊的請求元變量,Autothrottle middleware obeys,稱爲download_slot - 這允許程序化分組/限制請求。

在我的自定義代理中間件:

self.proxies = get_proxies() #list of proxies 
proxy_address = random.choice(self.proxies) 
request.meta['proxy'] = proxy_address 
request.meta['download_slot'] = hash(proxy_address) % MAX_CONCURRENT_REQUESTS 

我使用哈希函數作爲一種廉價的方式來鬥通過請求外部定義的限制的請求。

+0

我不確定我完全按照這個解決方案,你介意分享你的自定義代理中間件代碼嗎? – bergonzzi 2015-04-13 14:31:32