2014-02-17 34 views
5

我正試圖在Tor上使用scrapy。我一直在試圖讓我的頭腦圍繞如何編寫一個使用socksipy連接的scrapy的DownloadHandler。如何爲通過socksipy發出請求的scrapy編寫DownloadHandler?

Scrapy的HTTP11DownloadHandler是在這裏:https://github.com/scrapy/scrapy/blob/master/scrapy/core/downloader/handlers/http11.py

以下是創建一個自定義的下載處理程序的例子: https://github.com/scrapinghub/scrapyjs/blob/master/scrapyjs/dhandler.py

下面的代碼創建一個SocksiPyConnection類:http://blog.databigbang.com/distributed-scraping-with-multiple-tor-circuits/

class SocksiPyConnection(httplib.HTTPConnection): 
    def __init__(self, proxytype, proxyaddr, proxyport = None, rdns = True, username = None, password = None, *args, **kwargs): 
     self.proxyargs = (proxytype, proxyaddr, proxyport, rdns, username, password) 
     httplib.HTTPConnection.__init__(self, *args, **kwargs) 

    def connect(self): 
     self.sock = socks.socksocket() 
     self.sock.setproxy(*self.proxyargs) 
     if isinstance(self.timeout, float): 
      self.sock.settimeout(self.timeout) 
     self.sock.connect((self.host, self.port)) 

隨着scrapy代碼中扭曲反應堆的複雜性,我無法弄清楚它是如何插入的。有什麼想法嗎?

請不要回答類似privoxy的替代方案或發表回答說「scrapy不適用於襪子代理」 - 我知道,這就是爲什麼我想寫一個自定義的下載程序,使用socksipy發出請求。

回答