我是一个Ruby-newbie,今天我尝试了我的第一个刮刀。这是一个用于在CSV文件中存储配方的剪贴簿。然而,我无法弄清楚为什么它不起作用。这是我的代码:
recipe.rb:
require 'csv'
require 'nokogiri'
require 'open-uri'
def write_csv(ingredient)
doc = Nokogiri::HTML(open("http://www.marmiton.org/recettes/recherche.aspx?aqt=#{ingredient}"), nil, 'utf-8')
doc.search(".m_contenu_resultat").first(10).each do |item|
name = item.search('.m_titre_resultat a').text
description = item.search('.m_texte_resultat').text
cooking_time = item.search('.m_detail_time').text
diff = item.search('.m_detail_recette').text.split('-')
difficulty = diff[2]
recipes = [name, description, cooking_time, difficulty]
CSV.open('recueil.csv', 'wb') do |csv|
csv << recipes
end
end
end
write_csv('chocolat')
非常感谢您的回答,这对我帮助很大!
答案 0 :(得分:0)
当您打开CSV文件时,每次都会覆盖上一个文件。你应该将eighter附加到这样的文件:
CSV.open('recueil.csv', 'a') do |csv|
或者你可以在开始循环之前打开它:
def write_csv(ingredient)
doc = Nokogiri::HTML(open("http://www.marmiton.org/recettes/recherche.aspx?aqt=#{ingredient}"), nil, 'utf-8')
csv = CSV.open('recueil.csv', 'wb')
doc.search(".m_contenu_resultat").first(10).each do |item|
name = item.search('.m_titre_resultat a').text
description = item.search('.m_texte_resultat').text
cooking_time = item.search('.m_detail_time').text
diff = item.search('.m_detail_recette').text.split('-')
difficulty = diff[2]
recipes = [name, description, cooking_time, difficulty]
csv << recipes
end
csv.close
end
答案 1 :(得分:0)
你没有说明什么不起作用,错误的结果是什么,所以我必须推测。
我尝试过你的脚本并且编码很困难,因为网站是法语,有很多特殊字符。
在脚本的头部再试一次,至少应该解决这个问题。
volatile
答案 2 :(得分:0)
它工作了!我使用散列更改了我的代码,如下所示:
SomeClass.privateKeyFromPkcs8