我对编程完全陌生,所以请耐心等待。我想用动态内容抓取大约50,000个网页。我用Ruby编写了一个脚本,让我可以使用Watir和Nokogiri来完成这个,但是我需要7秒才能看到动态内容。所以,如果我一次刮一页,我需要将近100个小时。
显然我可以同时运行两个或三个单独的脚本,但是有更高效的“Ruby”方法吗?我正在使用Windows 7的常规桌面工作。
答案 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以获取有关编写并行(与并发)代码的一些建议。