【问题标题】:ruby scrape with multiple ip addresses具有多个IP地址的红宝石刮擦
【发布时间】:2016-06-18 23:52:32
【问题描述】:


我想知道Ruby程序是否可以拥有多个IP地址?我正在尝试从网站下载大量数据,但一次只有 1 个连接,速度非常慢。
我打算将我的程序与每个线程使用自己的 IP 地址进行多线程处理,但我不知道这是否可能,任何帮助或提示将不胜感激。

【问题讨论】:

  • 每台机器 1 个 ip,唯一有效的方法是拥有多台机器,连接到代理或 vpn 并通过它生成您的进程。
  • 我的机器不能超过一台,所以我需要使用多个 IP 地址。是否可以在程序的线程上使用 vpn ?
  • 如果你把你的程序分解成几个组件可能会更好,1个主控器将以编程方式连接到VPN,2个组件刮取数据。你需要寻找一个带有 api 的 vpn 来做。此外,您可能想测试连接以找出网站上的速率限制,并且您应该使用随机变量来修改通话时间,因为某些网站正在寻找简洁的通话。或者,您可以尝试根据数据使用 Google 文档编写刮板。
  • 有很多方法可以通过 ruby​​ 中的代理下载。我个人喜欢机械化。
  • 感谢您的建议

标签: ruby multithreading web-scraping ip


【解决方案1】:

一台机器或一个程序绝对有可能拥有多个 IP 地址。您甚至可以拥有多个网络适配器,并将它们分别连接到不同的物理连接。

但是,维护起来真的很麻烦。挑战部分在于代码,部分在于系统维护,部分在于实现这一目标所需的网络。

您可以采取的一种更好的方法是设计您的程序,使其可以分布式运行。因此,您可以同步它的多个副本并并行执行工作。然后,您可以根据需要水平扩展它(构建更多副本),并在需要时跨越不同的机器和连接。

编辑:您提到您无法水平扩展,并且您更喜欢使用来自同一台机器的多个连接。

为此,您很可能必须在网络堆栈中降低一点,通过套接字自行开发连接,以便使用特定的网络接口。

查看an introduction to Ruby sockets

另外,请查看以下相关问题:

【讨论】:

  • 我正在使用多台机器,但我遇到了其他问题:它们根本没有相同的规格(也没有钱再投资)。因此,具有多个 IP 地址的 1 个程序是最佳可用解决方案。关于如何解决这个问题的任何线索?
  • 如果是连接慢,需要增加连接。我说的是独立的网络连接,而不仅仅是网络适配器。我现在没有更多信息要添加,抱歉。稍后我会看到是否有 gem 或可以用来在低级别控制 http 连接的东西。
  • @MatthieuRaynauddeFitte 我已经更新了我的答案。希望这会有所帮助!
猜你喜欢
  • 2013-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多