0

我需要的

执行 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'
4

2 回答 2

3

您不想替换列表元素,只想将它们映射到它们的文本,然后将它们连接在一起,用换行符分隔。

如果你用这个抓取元素:

data = doc.css('div#specifications div#spec-area ul.product-spec li')

map然后,您可以使用and获取由换行符分隔的所有列表元素的列表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 }

希望有帮助。

ps "nokogiri" inrequire "nokogiri"应该全部小写。

于 2013-02-02T22:54:03.150 回答
0

在每个 li 之后添加一个换行符:

ul = doc.at('div#specifications div#spec-area ul.product-spec')
ul.search('li').each{|li| li.after "\n"}
puts ul.text
于 2013-02-03T00:42:37.440 回答