我需要什么
执行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'
答案 0 :(得分:3)
您不想替换列表元素,只是想将它们映射到文本中,然后将它们连接在一起,用换行符分隔。
如果你抓住这个元素:
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 }
希望有所帮助。
P.S。 require "nokogiri"
中的“nokogiri”应全部小写。
答案 1 :(得分:0)
在每个li之后添加换行符:
ul = doc.at('div#specifications div#spec-area ul.product-spec')
ul.search('li').each{|li| li.after "\n"}
puts ul.text