2013-02-02 36 views
0

我的任務爲什麼Nokogiri將空白輸出返回爲excel?

摘自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' 

回答

1

這裏有幾個問題:

  1. 它看起來像你試圖通過p調試打印出來的線上的css調用的結果:

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

    puts返回nil的方法,所以datanil,並且將導致在沒有被示出。

  2. 在你分析頁面,則product-spec列表實際上是一個類,而不是一個ID,所以你需要.product-spec.而不是#)。

  3. 您使用的語法實際上並不是CSS,它看起來像是在混合CSS和Xpath。你想是這樣的:

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

    (最後這一點似乎並沒有真正影響結果引入nokogiri CSS選擇器轉換爲XPath和它出現在有效的XPath轉換結果反正)。

+0

就是這樣!感謝那。 Nokogiri文檔稀少,非常令人沮喪。 – Ninja2k