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發出請求。