如何同时运行多个Tor/Privoxy进程的不同ip的Scrapy?

yeotifhr  于 2022-12-13  发布在  其他
关注(0)|答案(1)|浏览(171)

有人能告诉我如何让它工作吗?我想通过privoxy同时运行多个tors为我的scrapy项目...每一个应该有一个不同的ip地址。

vh0rcniy

vh0rcniy1#

首先为我糟糕的英语感到抱歉,因为这不是我的母语(我是俄罗斯人)。我遇到了许多“问题”,而试图建立一个多个示例的tor和privoxy,使每一个可以与不同的ip为我的scrapy工作。我会告诉你它是如何做的。
我将在Kali Linux 2.0上工作,我也将作为根用户工作。
步骤1.获取tor和privoxy:

apt-get install tor
apt-get install privoxy

步骤2.制作或复制...

cp /var/lib/tor -r /var/lib/tor2
cp /var/lib/tor -r /var/lib/tor3
cp /var/lib/tor -r /var/lib/tor4

步骤3.制作torrc副本...

cp /etc/tor/torrc torrc2
cp /etc/tor/torrc torrc3
cp /etc/tor/torrc torrc4

步骤4.现在我们要编辑每个torrc文件,你可以删除里面的所有内容,并输入以下配置:

SocksPort 9050 (9060, 9070, 9080)
ControlPort 9051 (9061, 9071, 9081)
DataDirectory /var/lib/tor (tor2, tor3, tor4)

第5步.让我们测试一下是否一切正常,让我们打开4个终端并像这样在每个人中启动tor:

Terminal 1: tor -f /etc/tor/torrc
Terminal 2: tor -f /etc/tor/torrc2
Terminal 3: tor -f /etc/tor/torrc3
Terminal 4: tor -f /etc/tor/torrc4

现在打开一个新的终端,让我们 curl 这个网站“http://ipinfo.io/ip“,它会给予我们我们的ip。每个tor的命令如下:

curl --proxy socks5h://localhost:9050 http://ipinfo.io/ip
curl --proxy socks5h://localhost:9060 http://ipinfo.io/ip
curl --proxy socks5h://localhost:9070 http://ipinfo.io/ip
curl --proxy socks5h://localhost:9080 http://ipinfo.io/ip

如果一切都做得很好,每一个都应该返回一个不同的ip。现在我们有4个tor示例同时运行。但是tor使用sock 5代理,而对于我们的scrapy项目,我们需要它是http代理。所以我们要插入privoxy。
第一步。让我们复制我们的privoxy文件夹3倍一样与托...

cp -a /etc/privoxy /etc/privoxy2
cp -a /etc/privoxy /etc/privoxy3 
cp -a /etc/privoxy /etc/privoxy4

步骤2.现在我们要编辑每个privoxy文件夹中的每个配置文件:

mousepad /etc/privoxy(2,3,4)/config

首先,我们必须取消选中“forward-socks 5 t”并更改每个配置文件的端口:

forward-socks5t   /               127.0.0.1:9050 .
    forward-socks5t   /               127.0.0.1:9060 .
    forward-socks5t   /               127.0.0.1:9070 .
    forward-socks5t   /               127.0.0.1:9080 .

同时更改收听地址:

listen-address  127.0.0.1:8118
listen-address  127.0.0.1:8128
listen-address  127.0.0.1:8138
listen-address  127.0.0.1:8148

步骤3.我们将制作另一个privoxy文件夹的副本:

cp /etc/init.d/privoxy /etc/init.d/privoxy2 
 cp /etc/init.d/privoxy /etc/init.d/privoxy3
 cp /etc/init.d/privoxy /etc/init.d/privoxy4

步骤4.编辑每个文件夹中的privoxy文件:

mousepad /etc/init.d/privoxy(2,3,4)
NAME=privoxy(2,3,4)  
OWNER=privoxy(2,3,4)    
LOGDIR=/var/log/privoxy(2,3,4)
CONFIGFILE=/etc/privoxy(2,3,4)/config

步骤5.最后,为每个权限创建日志副本:

cp -a /usr/sbin/privoxy /usr/sbin/privoxy2 
cp -a /usr/sbin/privoxy /usr/sbin/privoxy3 
cp -a /usr/sbin/privoxy /usr/sbin/privoxy4

完成。让我们进行测试,在不同的终端重新启动4个tors,如步骤5所示。现在,我们将在不同的终端启动4个privoxys,如下所示:

start-stop-daemon --start --exec /usr/sbin/privoxy --pidfile /var/run/privoxy.pid -- --user root /etc/privoxy/config 
start-stop-daemon --start --exec /usr/sbin/privoxy2 --pidfile /var/run/privoxy2.pid -- --user root /etc/privoxy2/config 
start-stop-daemon --start --exec /usr/sbin/privoxy3 --pidfile /var/run/privoxy3.pid -- --user root /etc/privoxy3/config 
start-stop-daemon --start --exec /usr/sbin/privoxy4 --pidfile /var/run/privoxy4.pid -- --user root /etc/privoxy4/config

为了测试它是否有效,让我们 curl 同一个网站:

curl --proxy http://127.0.0.1:8118 http://ipinfo.io/ip
curl --proxy http://127.0.0.1:8128 http://ipinfo.io/ip
curl --proxy http://127.0.0.1:8138 http://ipinfo.io/ip
curl --proxy http://127.0.0.1:8148 http://ipinfo.io/ip

如果它给你不同的ips,那么你做的一切都很好。如果你想关闭所有privoxys只需键入:

pkill privoxy(2,3,4)

现在,当你要在Scrappy中创建spider时,你可以为每个spider使用不同的代理,下面是一个例子:

import requests
from stem import Signal
from stem.control import Controller

def get_new_ip(2,3,4)():
    with Controller.from_port(port=9051(9061,9071,9081) as controller:
        controller.authenticate()
        controller.signal(Signal.NEWNYM)
    response = requests.get('https://api.myip.com/', proxies={'https': '127.0.0.1:8118(8128,8138,8148)'})
    print(response.text)

class ProxyMiddleware(2,3,4)(object):
    _requests_count = 0

    def process_request(self, request, spider):
        self._requests_count += 1
        if self._requests_count > 5:
            self._requests_count = 0
            get_new_ip1()

        request.meta['proxy'] = 'http://127.0.0.1:8118(8128,8138,8148)'
        spider.log('Proxy : %s' % request.meta['proxy'])

就是这样,我希望这能帮助你!))我曾经挣扎了很多,让所有这些工作在一起,并没有找到任何教程,解释一步一步如何使它工作。
祝你好运!)

  • -米哈伊尔·亚历山德罗夫斯基(海上47)

相关问题