如何为Python中的每个multiprocessing.Process设置单独的Tor连接?

时间:2014-01-29 15:40:12

标签: python process proxy ip multiprocessing

我正在使用多处理编写Python脚本,这将产生多个进程。它使用mechanize模块访问网页。我想匿名这样做,所以我使用Tor浏览器作为代理。此外,每个进程应每隔十五秒对其IP进行加扰。

我找到了这个,这可能有用: http://blog.databigbang.com/distributed-scraping-with-multiple-tor-circuits/ 但是,这个问题的主要问题是它使用的是Urllib2,而不是机械化,而且它似乎不易于机械化。另外,这使用线程而不是进程,所以我不知道它是否会以相同的方式工作。

简而言之,我的Tor设置为具有多个具有不同IP的不同端口,我可以将其设置为每个进程使用特定端口,但是,我无法将其设置为每个进程使用不同的Tor端口(即通过Tor有自己的单独连接)。我需要找到一种不需要切换端口的切换IP的新方法,但是一旦我找出每个进程的各个连接,这将更容易找出。

我的简化代码:

from mechanize import Browser
import multiprocessing

basePort = 9048 #base port for Tor.  I also have the following ports enabled: 9049, 9050, 9051, 9052.


class Worker(multiprocessing.Process):
    def __init__(self):
        multiprocessing.Process.__init__(self)
        self.browser = Browser()
        #somehow setup a unique connection to the Tor server?  The port to use is stored in the name.

def Attempt(argument):
    browser = multiprocessing.current_process().browser
    #process argument using mechanize
    #if some condition met:
        #somehow scramble IP

def main():
    global basePort
    f = open(file, 'rb')
    for i in range(5):
        Worker(target=Attempt, args=f.read().split(), name=str(basePort + i)).start()

if __name__=="__main__":
    main()

以下是我用于设置端口以供所有进程使用的代码,但我不知道如何使其特定于单个进程。

import socks
import socket

socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050)
socket.socket = socks.socksocket

from mechanize import Browser
b = Browser()
print b.open('http://icanhazip.com').read()

编辑:当我运行代码时,它说“TypeError: init ()得到一个意外的关键字参数'args'”。但是Process类将args作为关键字,为什么这不起作用呢?

0 个答案:

没有答案