【问题标题】:how to use two level proxy setting in Python?如何在 Python 中使用两级代理设置?
【发布时间】:2011-04-19 16:24:10
【问题描述】:

我正在研究网络爬虫 [使用 python]。

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

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

【问题讨论】:

    标签: python web-crawler


    【解决方案1】:

    更新听起来您正在寻找连接到代理 A 并从那里通过 A 外部的代理 B、C、D 发起 HTTP 连接。您可能会查看 proxychains project 哪个表示它可以“通过用户定义的 TOR、SOCKS 4/5 和 HTTP 代理链来传输任何协议”。

    3.1 版在 Ubuntu Lucid 中作为一个包提供。如果它不能直接为您工作,proxychains source code 可能会提供一些关于如何为您的应用实现此功能的见解。

    原答案: 查看urllib2.ProxyHandler。下面是一个示例,说明如何使用多个不同的代理打开 url:

    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)
    

    【讨论】:

    • 我的问题不是如何使用代理集。让我举个例子:有2台服务器。我在 Http 代理 [外部服务器] 后面。我必须使用一些代理 ['proxy:port] 连接到互联网。连接到外部服务器后,现在我想使用我拥有的一组代理 [Random.choice]。如果我说得更好,那么这就是代理的系列[链接]。就像,使用 http 代理连接到外部服务器,然后通过一组代理进行洗牌。 server1--httpProxy--external server--shuffle proxies--让IP保持随机。让我知道它是否含糊。
    • 糟糕,抱歉,我误读了问题的那一部分。我会用一些额外的信息更新我的答案。
    • 感谢您的链接。我将尝试将它与 Python 联系起来。同时,如果你在 python [ Some python module ] 周围找到任何东西,请告诉我。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-15
      • 1970-01-01
      • 1970-01-01
      • 2017-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-28
      相关资源
      最近更新 更多