我需要什么
执行Nokogiri查询,添加换行符,以便在输出数据时不会将其捆绑起来。
data = doc.css('div#specifications div#spec-area ul.product-spec')[0].text
我试过这个
data = doc.css('div#specifications div#spec-area ul.product-spec')[0].css('li').each{ |li| li.replace 'n' }.text
我的完整代码
require 'Nokogiri'
require 'open-uri'
require 'spreadsheet'
doc = Nokogiri::HTML(open("http://www.asus.com/Notebooks_Ultrabooks/ASUS_TAICHI_21/#specifications"))
#Grab our product specifications - we only need the text not HTML
data = doc.css('div#specifications div#spec-area ul.product-spec')[0].text
#Create the Spreadsheet
Spreadsheet.client_encoding = 'UTF-8'
book = Spreadsheet::Workbook.new
sheet1 = book.create_worksheet
sheet1.name = 'My First Worksheet'
#Output our data to the Spreadsheet
sheet1[0,0] = data
book.write 'C:/Users/Barry/Desktop/output.xls'
您不想
替换列表元素,只想将它们映射到其文本,然后用换行符将它们连接在一起。
如果你用这个抓住元素:
data = doc.css('div#specifications div#spec-area ul.product-spec li')
然后,您可以使用map
和join
获取由换行符分隔的所有列表元素的列表,如下所示:
lines = data.map(&:text).join("n")
(来自评论)我以前从未使用过 ruby 电子表格,但这应该允许您输入数据:
data = doc.css('div#specifications div#spec-area ul.product-spec li')
data.each_with_index { |line, i| sheet1[i,0] = line.text }
希望有帮助。
附言:require "nokogiri"
中的"Nokogiri"应该全部小写。
在每个 li 后添加一个换行符:
ul = doc.at('div#specifications div#spec-area ul.product-spec')
ul.search('li').each{|li| li.after "n"}
puts ul.text