如何在Python中使用两级代理设置?

时间:2011-04-19 16:24:10

标签: python web-crawler

我正在使用web-crawler [使用python]。

例如,情况是我在服务器-1后面,我使用代理设置连接到外部世界。所以在Python中,使用代理处理程序我可以获取URL。 现在的事情是,我正在构建一个爬虫,所以我不能只使用一个IP [否则我将被阻止]。为了解决这个问题,我有一堆代理,我想要洗牌。

我的问题是:这是两级代理,一个连接到主服务器-1,我使用代理然后通过代理后洗,我想使用代理。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:6)

更新听起来好像您正在寻找连接到代理A并从那里通过A之外的代理B,C,D启动HTTP连接。您可能会查看{{3}这表示它可以“通过用户定义的TOR,SOCKS 4/5和HTTP代理链来隧道传输任何协议”。

版本3.1在Ubuntu Lucid中作为一个包提供。如果它不能直接为您服务,proxychains project可能会提供一些有关如何为您的应用实施此功能的信息。

原创回答: 查看proxychains source code。以下是如何使用多个不同代理打开网址的示例:

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)

答案 1 :(得分:1)

我建议你看看CherryProxy。它允许您向中间服务器(运行CherryProxy)发送代理请求,然后将您的HTTP请求转发到二级机器上的代理(例如另一台服务器上的squid代理)进行处理。中提琴!一个两级代理链。

http://www.decalage.info/python/cherryproxy