【问题标题】:Rotating Proxies for web scraping用于网络抓取的旋转代理
【发布时间】:2010-12-28 09:24:17
【问题描述】:

我有一个 python 网络爬虫,我想在许多不同的代理服务器之间分发下载请求,可能运行 squid(尽管我对替代方案持开放态度)。例如,它可以以循环方式工作,request1 到 proxy1,request2 到 proxy2,并最终循环回来。知道如何设置吗?

为了使它更难,我还希望能够动态更改可用代理列表,关闭一些代理,然后添加其他代理。

如果重要,IP 地址是动态分配的。

谢谢:)

【问题讨论】:

    标签: python proxy screen-scraping web-crawler squid


    【解决方案1】:

    让您的爬虫拥有一个代理列表,并在每个 HTTP 请求中让它以循环方式使用列表中的下一个代理。但是,这将阻止您使用 HTTP/1.1 持久连接。修改代理列表最终会导致使用新的或不使用代理。

    或者并行打开多个连接,每个代理一个,然后将您的抓取请求分发到每个打开的连接。动态可以通过让连接器向请求调度程序注册自身来实现。

    【讨论】:

    • 谢谢,给了我一些好主意,主要是用redis set来存储代理列表,srandmember命令获取代理。
    • @Jacob 您能否分享您的示例代码或 github 存储库,了解您是如何完成此操作的?
    【解决方案2】:

    我使用 HAProxy + DeleGate + 多个 Tor 实例设置了轮换代理。使用 Tor,您无法很好地控制带宽和延迟,但它对于网络抓取很有用。我刚刚发表了一篇关于这个主题的文章:Running Your Own Anonymous Rotating Proxies

    【讨论】:

    • 这很酷。不幸的是,越来越多的网站似乎禁止与 Tor 出口节点关联的 IP 地址。
    • @ChrisArmstrong 是的。如果您正在考虑走这条路线,则需要考虑这一点。
    【解决方案3】:

    编辑:甚至还有用于 gimmeproxy 的 Python 包装器:https://github.com/ericfourrier/gimmeproxy-api

    如果您不介意 Node,您可以使用 proxy-lists 收集公共代理并使用 check-proxy 来检查它们。这正是https://gimmeproxy.com 的工作原理,更多信息here

    【讨论】:

      猜你喜欢
      • 2020-07-28
      • 1970-01-01
      • 1970-01-01
      • 2011-02-12
      • 1970-01-01
      • 1970-01-01
      • 2021-11-22
      • 2018-06-30
      • 1970-01-01
      相关资源
      最近更新 更多