在Ruby中以CSV格式进行刮擦和存储

时间:2017-10-01 10:32:12

标签: ruby csv

我是一个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')

非常感谢您的回答,这对我帮助很大!

3 个答案:

答案 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