0

私の仕事

http://www.asus.com/Notebooks_Ultrabooks/ASUS_TAICHI_21/#specificationsからすべての仕様を抽出し、スプレッドシートに入れます (フォーマットは後で行います)。

問題

スプレッドシートは作成されますが、出力が空白になります。

マイコード

require 'Nokogiri'
require 'open-uri'
require 'spreadsheet'

doc = Nokogiri::HTML(open("http://www.asus.com/Notebooks_Ultrabooks/ASUS_TAICHI_21/#specifications"))

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

Spreadsheet.client_encoding = 'UTF-8'
book = Spreadsheet::Workbook.new

sheet1 = book.create_worksheet
sheet1.name = 'My First Worksheet'

sheet1[0,0] = data
book.write 'C:/Users/Barry/Desktop/output.xls'

次のコードは私のために働いた

require 'Nokogiri'
require 'open-uri'
require 'spreadsheet'

doc = Nokogiri::HTML(open("http://www.asus.com/Notebooks_Ultrabooks/ASUS_TAICHI_21/#specifications"))

data = doc.css('div#specifications div#spec-area ul.product-spec')[0].text

Spreadsheet.client_encoding = 'UTF-8'
book = Spreadsheet::Workbook.new

sheet1 = book.create_worksheet
sheet1.name = 'My First Worksheet'

sheet1[0,0] = data
book.write 'C:/Users/Barry/Desktop/output.xls'
4

1 に答える 1

1

ここにはいくつかの問題があります。

  1. css行の呼び出しの結果を出力してデバッグしようとしているようです:

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

    このメソッドは をputs返すnilので、 となり、結果として何も表示されませんdatanil

  2. 解析しているページでは、リストは実際には ID ではなくクラスであるため、 (の代わりに)product-specが必要です。.product-spec.#

  3. 使用している構文は実際には CSS ではありません。CSS と Xpath を混在させているようです。次のようなものが必要です。

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

    (この最後のポイントは、実際には結果に影響を与えないようです。Nokogiri は CSS セレクターを xpath に変換し、いずれにせよ変換の結果は有効な xpath になるようです)。

于 2013-02-02T20:01:57.727 に答える