2013-02-02 64 views
0

突破的元素,我需要我如何符合引入nokogiri

執行引入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' 

回答

2

你不想更換列表元素,你只是想將它們映射到自己的文本,然後通過換行符分隔在一起。

如果你抓住這個元素:

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

然後你可以使用mapjoin獲得通過換行分隔的所有列表元素的列表,像這樣:

lines = data.map(&:text).join("\n") 

(從評論)我從來沒有使用過紅寶石電子表格,但這應該允許你輸入數據:

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」應該全部小寫。

+0

但是這很好地工作......如預期的輸出不會出現。我假定每個\ n都將表格逐行添加到電子表格中。有任何想法嗎? – Ninja2k

+0

更新了我的答案。但是,真的,你應該只問一個問題。 –

+0

好吧將發佈爲新問題!謝謝你的幫助。 – Ninja2k

0

爲每個L1之後添加一個新行:

ul = doc.at('div#specifications div#spec-area ul.product-spec') 
ul.search('li').each{|li| li.after "\n"} 
puts ul.text