ruby - 存储在 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
解决方案
我认为这里的问题是您没有将元素正确地推入array
变量中。基本上,您的数组最终看起来像这样:
['Movie 1 Title', 'Movie 1 rating', 'Movie 2 Title', 'Movie 2 rating', ...]
您真正想要的是一个数组数组,如下所示:
[
['Movie 1 Title', 'Movie 1 rating'],
['Movie 2 Title', 'Movie 2 rating'],
...
]
一旦正确设置了数组,您甚至不需要在 CSV 选项中指定行分隔符。
以下应该可以解决问题:
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
循环更改为 a times
,它更像红宝石;))
推荐阅读
- docker - 如何将 DNS 条目添加到 Windows 容器的主机文件?
- amazon-web-services - 如何通过 AWS EC2 实例在浏览器中运行 Jupyter lab?
- typescript - rollupjs dist 不包含图像
- cmake - 是否可以使用带有安装依赖项的 cmake FetchContent
- security - 如何使用桌面安装安全地管理证书
- java - 具有自定义 where 条件的自引用 OneToOne
- spring - 能够通过 crud 存储库检索 tasklet 中的记录,但无法在 Azure sql 表中保存或更新表(使用 .save/.saveAll)
- javascript - 函数 windows.print 打印两页
- gherkin - 只有保留然后,我可以在小黄瓜中有一个单独的场景吗?
- c - BST 中的分段错误(核心转储)