如何加快使用watir抓取动态页面的速度?

时间:2016-11-06 18:52:50

标签: ruby watir

我对编程完全陌生,所以请耐心等待。我想用动态内容抓取大约50,000个网页。我用Ruby编写了一个脚本,让我可以使用Watir和Nokogiri来完成这个,但是我需要7秒才能看到动态内容。所以,如果我一次刮一页,我需要将近100个小时。

显然我可以同时运行两个或三个单独的脚本,但是有更高效的“Ruby”方法吗?我正在使用Windows 7的常规桌面工作。

1 个答案:

答案 0 :(得分:0)

假设您有一个下载页面的方法,例如:

def get_page
  url = "some url"
  page = Nokogiri.parse open url
  sleep 7 # wait for page to be ready
  # extract data here
end

现在你想同时运行N次

3.times do
  Thread.new do
    get_page
  end
end

线程有很多细微差别,但使用也可以这么简单。您可以从全局变量读取/写入线程,即如果您有一个包含1000个URL的变量,则您有一个运行urls.pop的线程来获取下一个URL。请记住,可能存在竞争条件(即两个线程pop同时为一个url并获得相同的值)。如果这是一个问题,请参阅https://www.toptal.com/ruby/ruby-concurrency-and-parallelism-a-practical-primer以获取有关编写并行(与并发)代码的一些建议。