我的目标是像here一样使用单个蜘蛛的多个命令,并为每个启动的命令获取不同的IP。因此,我在下面介绍一些想法。
据我了解,我可以在一个torrc
文件中写入几个端口,正如在topic中adrelanos的答案中介绍的那样。
如果为true,则很有用,因为我使用Vidalia启动它,并且我只能设置一个torrc
文件。 注意,我暂时未对其进行测试
但是我有几次审问。
在此page (在上一个topic中存在)中,torrc
文件也需要一个Socksport
和一个ControlPort
。首先真的有必要同时拥有两者吗?我可以在polipo config
文件中设置第二个文件吗,可以像socksParentProxy
(在polipo手册中找不到该文件一样)中设置几个不同的torrc
吗?第三,如何在下面的代码中用Socksport
在草率的middlewares.py
中实现controller
?
在我的项目中,我打算根据蜘蛛的不同命令设置不同的控制端口,如下所示:
在spider.py
def __init__ (self, arg1=None, arg2=None , controlport=None, proxyport=None, socksport=None) :
arg1= self.arg1
arg2= self.arg2
在middlewares.py
from toripchanger import TorIpChanger
from stem import Signal
from stem.control import Controller
def _set_new_ip(controlport):
with Controller.from_port(port=controlport) as controller:
controller.authenticate(password='tor_password')
controller.signal(Signal.NEWNYM)
class ProxyMiddleware(object):
def process_request(self, request, spider):
_set_new_ip(spider.controlport) #not sure it could work but you get the idea
request.meta['proxy'] = 'http://127.0.0.1:'+str(spider.proxyport)
spider.log('Proxy : %s' % request.meta['proxy'])
那么如何在其中设置socksport?我查看了stem
文件中使用的middlewares.py
库的Controller
文档,但看不到哪种方法可以帮助我做到这一点。
最后一个问题,代理服务器是可选的,如果我不使用代理服务器而仅使用Tor,会有什么风险?