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とを使用して、改行で区切られたすべてのリスト要素のリストを取得できます。join

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 }

お役に立てば幸いです。

ps「nokogiri」はす​​べrequire "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 に答える