Ruby 如何一次运行多个rake任务?
我正在使用一个Rake任务,它运行多个抓取脚本,并将一个站点的35个不同城市的类别数据导出到35个不同的CSV文件 我遇到的问题是,当我从文件夹的根目录运行master Rake任务时,它会在父目录“resultsForCity.csv”中创建一个新文件,而不是查看给定子文件夹中的当前csv文件并向其中添加数据。为了解决这个问题,我认为我应该让我的主Rake任务(在父目录中)运行从属Rake任务,然后运行刮片脚本,但这也不起作用 但是,如果我将cdRuby 如何一次运行多个rake任务?,ruby,rake,rake-task,Ruby,Rake,Rake Task,我正在使用一个Rake任务,它运行多个抓取脚本,并将一个站点的35个不同城市的类别数据导出到35个不同的CSV文件 我遇到的问题是,当我从文件夹的根目录运行master Rake任务时,它会在父目录“resultsForCity.csv”中创建一个新文件,而不是查看给定子文件夹中的当前csv文件并向其中添加数据。为了解决这个问题,我认为我应该让我的主Rake任务(在父目录中)运行从属Rake任务,然后运行刮片脚本,但这也不起作用 但是,如果我将cdcd放入其中一个城市文件夹并从那里运行scrap
cd
放入其中一个城市文件夹并从那里运行scraper或Rake任务,它会将数据添加到该子文件夹中相应的CSV文件中。我是否没有明确定义依赖关系或其他东西
我尝试过的事情:
- 我已经尝试在我的主rake任务中要求每个单独的rakefile李>
- 尝试迭代所有文件并加载rake任务,但收到堆栈太深的错误李>
- 已尝试在Stackoverflow上搜索7天李>
require "rake"
task default: %w[getData]
task :getData do
Rake::FileList.new("**/*.rb*").each do |file|
ruby file
end
end
这是我的代码:
require "nokogiri"
require "open-uri"
require "csv"
url = "http:// example.com/atlanta"
doc = Nokogiri::HTML(open(url))
CSV.open("resultsForAtlanta.csv", "wb") do |csv|
doc.css(".tile-title").each do |item|
csv << [item.text.tr("[()]+0-9", ""), item.text.tr("^0-9$", "")]
end
doc.css(".tile-subcategory").each do |tile|
csv << [tile.text.tr("[()]+0-9", ""), tile.text.tr("^0-9$", "")]
end
end
需要“nokogiri”
需要“打开uri”
需要“csv”
url=“http://example.com/atlanta”
doc=Nokogiri::HTML(打开(url))
CSV.open(“resultsForAtlanta.CSV”、“wb”)do | CSV|
css文件(“.tile title”)。每个do |项|
csv如果让scraper脚本获取输出文件名并使用目录结构帮助您构建输出文件名,该怎么办
假设你有一个目录树,比如
Atlanta/scraper.rb
LosAngeles/scraper.rb
...
如果scraper.rb是您的刮取脚本,您应该能够像这样编写任务:
task :getData do
Rake::FileList.new("**/scraper.rb").each do |scraper_script|
dir = File.dirname(file)
city = File.basename(dir)
csv_file = File.join(dir, "resultsFor#{city}.csv")
ruby [scraper_script, csv_file].join(" ")
end
end
然后,您的Ruby脚本可以像这样从命令行中获取文件名:
CSV.open(ARGV[1], "wb") do |csv|
...
end
这不是一个真正的Nokogiri或CSV问题。虽然它们在您调用的代码中使用,但它们与并行运行它们的问题无关,因此将它们放在标记中不是必要的,甚至不是一个好主意。