如何自动运行Ruby脚本?

时间:2015-09-20 21:45:49

标签: ruby-on-rails ruby nokogiri

我已经写了一个ruby脚本(下面的代码),以便从Deliveroo.co.uk中删除。

现在我通过前往终端并输入'ruby .... rb'手动运行它。

如何自动执行操作以使此脚本每小时自动运行一次? 另外,如何在不覆盖以前输出的情况下保存每次运行的输出?

代码在下面..谢谢。

require 'open-uri'
require 'nokogiri'
require 'csv'

# Store URL to be scraped
url = "https://deliveroo.co.uk/restaurants/london/maida-vale?postcode=W92DE"

# Parse the page with Nokogiri
page = Nokogiri::HTML(open(url))

# Display output onto the screen
name =[]
page.css('span.list-item-title.restaurant-name').each do |line|
  name << line.text.strip
end

category = []
page.css('span.restaurant-detail.detail-cat').each do |line|
  category << line.text.strip
end

delivery_time = []
page.css('span.restaurant-detail.detail-time').each do |line|
  delivery_time << line.text.strip
end

distance = []
page.css('span.restaurant-detail.detail-distance').each do |line|
  distance << line.text.strip
end

status = []
page.css('li.restaurant--details').each do |line|
  if line.attr("class").include? "unavailable"
    sts = "closed"
  else
    sts = "open"
  end
  status << sts
end

# Write data to CSV file
CSV.open("deliveroo.csv", "w") do |file|
file << ["Name", "Category", "Delivery Time", "Distance", "Status"]
  name.length.times do |i|
      file << [name[i], category[i], delivery_time[i], distance[i], status[i]]
  end
end

1 个答案:

答案 0 :(得分:5)

有两个问题,我将在下面尝试回答。

如何定期运行 您正在寻找的是一个cronjob,有很多资源用于创建一个。

查看cron或宝石,例如whenever / clockwork

在多次运行之间保存输出:为了保存输出,您可以直接在ruby中写入文件,这与您现在正在执行的操作非常相似。

你现在保存它的方式是:

CSV.open("deliveroo.csv", "w") do |file|

"w"打开文件并覆盖其中的所有内容,请尝试"a"(追加)。

CSV.open("deliveroo.csv", "a") do |file|

在此处阅读有关以不同模式打开文件的更多信息:File opening mode in Ruby