使用 Sidekiq 和 Nokogiri 进行抓取
Using Sidekiq with Nokogiri for scraping
我正在使用 Rails 和 Nokogiri。我有一些繁重的抓取任务,我想使用 Sidekiq 在后台执行。
问题是,我按照 sidekiq.org 中提到的三个步骤进行操作,但没有任何反应。我错过了什么?
下面是我在不使用 Sidekiq 的情况下进行的一次抓取,效果很好,但主要问题是,像这样的几次抓取会使页面加载速度非常慢。
#my controller
doc = Nokogiri::HTML(open("http://www.example.com"))
@head = {}
doc.xpath('//div[5]/h3/a').each do |link|
@head[link.text.strip] = link['href']
end
#my view
<% if @head %>
<% @head.each do |key, value| %>
<a href="<%= "#{value}" %>" target='_blank'><%= "#{key}" %></a><% end %>
<% end %>
以下是我对Sidekiq的尝试:
#my controller
class HomeController < ApplicationController
HardWorker.index_async('index', 1)
end
#my hard_worker
class HardWorker
include Sidekiq::Worker
def index
doc = Nokogiri::HTML(open("http://www.example.com"))
@head = {}
doc.xpath('//div[5]/h3/a').each do |link|
@head[link.text.strip] = link['href']
end
end
#my view
the same
如果您在 *nix 主机上,我建议 运行ning 一个单独的、非 Rails Ruby 脚本,允许与数据库对话,并且更新包含您需要 return 给客户的信息的摘要 table。没有理由将它 运行 放在 Rails 中,甚至加载 Rails 堆栈。
您可以使用rails runner
到运行Ruby代码:
runner
runs Ruby code in the context of Rails non-interactively.
该代码将可以访问 Active Record 并且能够使用所有相同的 Rails-like 配置和方法,它只是不会加载堆栈的 Web 端,这使得它更重量更轻,加载速度更快。
使用 cron 定期触发单独的 Ruby 脚本,循环遍历 table 或 YAML 文件,其中包含要处理的 URL,然后插入结果。
我正在使用 Rails 和 Nokogiri。我有一些繁重的抓取任务,我想使用 Sidekiq 在后台执行。
问题是,我按照 sidekiq.org 中提到的三个步骤进行操作,但没有任何反应。我错过了什么?
下面是我在不使用 Sidekiq 的情况下进行的一次抓取,效果很好,但主要问题是,像这样的几次抓取会使页面加载速度非常慢。
#my controller
doc = Nokogiri::HTML(open("http://www.example.com"))
@head = {}
doc.xpath('//div[5]/h3/a').each do |link|
@head[link.text.strip] = link['href']
end
#my view
<% if @head %>
<% @head.each do |key, value| %>
<a href="<%= "#{value}" %>" target='_blank'><%= "#{key}" %></a><% end %>
<% end %>
以下是我对Sidekiq的尝试:
#my controller
class HomeController < ApplicationController
HardWorker.index_async('index', 1)
end
#my hard_worker
class HardWorker
include Sidekiq::Worker
def index
doc = Nokogiri::HTML(open("http://www.example.com"))
@head = {}
doc.xpath('//div[5]/h3/a').each do |link|
@head[link.text.strip] = link['href']
end
end
#my view
the same
如果您在 *nix 主机上,我建议 运行ning 一个单独的、非 Rails Ruby 脚本,允许与数据库对话,并且更新包含您需要 return 给客户的信息的摘要 table。没有理由将它 运行 放在 Rails 中,甚至加载 Rails 堆栈。
您可以使用rails runner
到运行Ruby代码:
runner
runs Ruby code in the context of Rails non-interactively.
该代码将可以访问 Active Record 并且能够使用所有相同的 Rails-like 配置和方法,它只是不会加载堆栈的 Web 端,这使得它更重量更轻,加载速度更快。
使用 cron 定期触发单独的 Ruby 脚本,循环遍历 table 或 YAML 文件,其中包含要处理的 URL,然后插入结果。