【问题标题】:How to run multiple Tor/Privoxy processes for Scrapy with different ips at the same time?如何同时为具有不同 ips 的 Scrapy 运行多个 Tor/Privoxy 进程?
【发布时间】:2020-11-14 15:48:22
【问题描述】:

有人可以解释一下如何使它工作吗? 我想通过privoxy为我的scrapy项目同时运行多个tors... 每个人都应该使用不同的 IP 地址。

【问题讨论】:

  • 是否需要 privoxy?你可以使用 Tor 的 HTTPTunnelPort 指令指定多个 HTTP 代理端口,每个端口都有流隔离(不同的 IP),然后配置 scrapy 的 HTTP 代理中间件使用 Tor 的 HTTP 代理。每个scrapy 实例都可以使用自己的HTTPTunnelPort,并且他们每个人都有自己的IP,所有这些都来自一个Tor 实例。

标签: proxy scrapy tor privoxy


【解决方案1】:

首先很抱歉我的英语不好,因为它不是我的母语(我是俄语)。 我在尝试设置多个 tor 和 privoxy 实例时遇到了许多“问题”,以便每个实例都可以为我的 scrapy 使用不同的 ip。 我会告诉你它是怎么做的。

我将致力于 Kali Linux 2.0 我还将以 root 身份工作。

步骤 1. 获取 tor 和 privoxy:

apt-get install tor
apt-get install privoxy

第 2 步。制作 tor 副本...

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 使用 sock5 代理,对于我们的 scrapy 项目,我们需要它是 http 代理。 所以我们要插入 privoxy。

第 1 步。让我们像使用 tor 一样将 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-socks5t”并更改每个配置文件的端口:

    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 步。最后,为每个 privoxy 制作日志副本:

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)

现在,当你要在 scrapy 中制作蜘蛛时,你可以为每个蜘蛛使用不同的代理 蜘蛛,这是一个例子:

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'])

就是这样,希望对你有所帮助!)) 我曾经很努力才能将所有这些工作放在一起,但没有找到任何教程 它逐步解释了如何使其工作。

祝你好运!)

-Mikhail Aleksandrovskiy(离岸47)

【讨论】:

    猜你喜欢
    • 2017-12-14
    • 2012-12-28
    • 2017-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多