存储在CSV文件中 - ruby​​分隔符

时间:2018-05-23 11:19:32

标签: ruby csv export-to-excel export-to-csv

我正在尝试将我的报废执行结果存储到CSV文件中。

当前的CSV文件为我提供了以下输出:

Name of Movie 1

Rating 1

Name of Movie 2 

Rating 2     

我想得到以下输出:

Name of Movie 1 Rating 1 

Name of Movie 2 Rating 2 

这是我的代码,我想它必须处理行/列分隔符:

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

array = []


for i in 1..10
  url = "http://www.allocine.fr/film/meilleurs//?page=#{i}"
  html_file = open(url).read
  html_doc = Nokogiri::HTML(html_file)


  html_doc.search('.img_side_content').each do |element|
    array << element.search('.no_underline').inner_text
    element.search('.note').each do |data|
      array << data.inner_text
    end
  end
end

puts array


csv_options = { row_sep: ',', force_quotes: true, quote_char: '"' }
filepath    = 'allocine.csv'

CSV.open(filepath, 'wb', csv_options) do |csv|
  array.each { |item| csv << [item] }
end

1 个答案:

答案 0 :(得分:2)

我认为这里的问题是你没有正确地将元素推送到limits.h变量中。基本上,你的数组最终看起来像这样:

array

你真正想要的是一个数组数组,如下所示:

['Movie 1 Title', 'Movie 1 rating', 'Movie 2 Title', 'Movie 2 rating', ...]

一旦正确设置了阵列,您甚至不需要在CSV选项中指定行分隔符。

以下应该可以解决问题:

[
  ['Movie 1 Title', 'Movie 1 rating'],
  ['Movie 2 Title', 'Movie 2 rating'],
  ...
]

(我也冒昧地将你的require 'open-uri' require 'nokogiri' require 'csv' array = [] 10.times do |i| url = "http://www.allocine.fr/film/meilleurs//?page=#{i}" html_file = open(url).read html_doc = Nokogiri::HTML(html_file) html_doc.search('.img_side_content').each do |element| title = element.search('.no_underline').inner_text.strip notes = element.search('.note').map { |note| note.inner_text } array << [title, notes].flatten end end puts array filepath = 'allocine.csv' csv_options = { force_quotes: true, quote_char: '"' } CSV.open(filepath, 'w', csv_options) do |csv| array.each do |item| csv << item end end 循环改为for,这更像红宝石;)

相关问题