当数组为空时如何不保存到csv

时间:2012-11-13 12:55:58

标签: ruby xpath csv nokogiri conditional

我正在通过一个网站解析,我正在寻找可能有数百万行的内容。但是,csv / excel / ods不允许超过一百万行。

这就是我尝试使用临时排除保存空内容的原因。但是,它不起作用:我的代码在csv中继续创建空行。

这是我的代码:

# create csv
CSV.open("neverending.csv", "w") do |csv|
csv << ["kuk","date","name"]

# loop through all urls
File.foreach("neverendingurls.txt") do |line|
begin
doorzoekbarefile = Nokogiri::HTML(open(line))
for k in 1..999 do

# PROVISIONARY / CONDITIONAL
unless doorzoekbarefile.at_xpath("//td[contains(style, '60px')])[#{k}]").nil?

# xpaths
kuk = doorzoekbarefile.at_xpath("(//td[contains(@style,'60px')])[#{k}]")
date = doorzoekbarefile.at_xpath("(//td[contains(@style, '60px')])[#{k}]/following-sibling::*[1]")
name = doorzoekbarefile.at_xpath("(//td[contains(@style, '60px')])[#{k}]/following-sibling::*[2]")

# save to csv
csv << [kuk,date,name]

end
end
end

rescue
puts "error bij url #{line}"
end
end
end

任何人都知道出了什么问题或如何解决问题?基本上我只需要更改代码,以便在xpath为空时不会创建新的csv数据行。

1 个答案:

答案 0 :(得分:1)

这与xpath无关。这是简单的Array#empty?

row = [kuk,date,name]
csv << row if row.compact.empty?
顺便说一下,你的代码很乱。学习如何缩进至少再次发布。