我已经写了一个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
答案 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