如何同时运行多个nokogiri屏幕刮线程

Nic*_*ett 5 screen-scraping ruby-on-rails nokogiri

我有一个网站,需要在许多不同的网站上使用Nokogiri来提取数据.此过程使用delayed_job gem作为后台作业运行.但是,每页运行大约需要3-4秒,因为它必须暂停并等待其他网站响应.我目前只是通过基本上说来运行它们

Websites.all.each do |website|
  # screen scrape
end
Run Code Online (Sandbox Code Playgroud)

我想分批执行它们而不是每个都执行它们,这样我就不必等待来自每个站点的服务器响应(在一段时间内最多可能需要20秒).

什么是最好的红宝石或铁路方式来做到这一点?

感谢您的帮助.

yba*_*kos 5

您可能想查看Typhoeus,它可以让您发出并行的http请求.

我在这里发现了一篇关于将它与Nokogiri一起使用的简短发帖,但我自己没有尝试过.

包含在DJ中,这应该可以解决很少的客户端延迟问题.


the*_*gah 2

您需要使用延迟作业。看看这个Railscasts

请记住,大多数房东都会对此类事情收费。

如果您不关心管理线程,您也可以使用spawn插件,但它要容易得多!

这实际上就是您需要做的全部事情:

  1. rails plugin/install https://github.com/tra/spawn.git
  2. 然后在您的控制器或模型中添加方法

例如:

 spawn do
    #execute your code here :)
 end 
Run Code Online (Sandbox Code Playgroud)

http://railscasts.com/episodes/171-delayed-job

https://github.com/tra/spawn