首先很抱歉我的英语不好,因为它不是我的母语(我是俄语)。
我在尝试设置多个 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)