如何在Python中使用双层代理设置?
我正在做一个网络爬虫,使用的是Python。
情况是这样的,比如我在服务器-1后面,通过代理设置来连接外部网络。所以在Python中,使用代理处理器我可以获取网址。
现在的问题是,我在构建爬虫的时候不能只用一个IP地址,否则会被封锁。为了解决这个问题,我有一堆代理,想要在这些代理之间切换。
我的问题是:这是一个两级代理,首先我用一个代理连接到主服务器-1,然后再在这些代理之间切换。我该怎么做到这一点呢?
2 个回答
1
我建议你看看CherryProxy。它可以让你把请求发送到一个中间服务器(也就是运行CherryProxy的地方),然后再把你的HTTP请求转发到第二台机器上的代理(比如在另一台服务器上的squid代理)进行处理。这样就形成了一个两级的代理链。
8
更新 听起来你想先连接到代理 A,然后再通过代理 B、C、D 来发起 HTTP 连接,而这些代理是在 A 之外的。你可以看看 proxychains 项目,它声称可以“通过用户定义的 TOR、SOCKS 4/5 和 HTTP 代理链来隧道任何协议”。
在 Ubuntu Lucid 中可以找到 3.1 版本的安装包。如果直接使用不成功,proxychains 的源代码 可能会给你一些关于如何在你的应用中实现这个功能的启示。
原始回答: 可以看看 urllib2.ProxyHandler。这里有一个示例,展示了如何使用多个不同的代理来打开网址:
import random
import urllib2
# put the urls for all of your proxies in a list
proxies = ['http://localhost:8080/']
# construct your list of url openers which each use a different proxy
openers = []
for proxy in proxies:
opener = urllib2.build_opener(urllib2.ProxyHandler({'http': proxy}))
openers.append(opener)
# select a url opener randomly, round-robin, or with some other scheme
opener = random.choice(openers)
req = urllib2.Request(url)
res = opener.open(req)