为什么Nokogiri将空白输出返回到Excel?

时间:2013-02-02 19:08:21

标签: ruby nokogiri

我的任务

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 个答案:

答案 0 :(得分:1)

这里有一些问题:

  1. 看起来您正在尝试通过在行中打印css调用的结果进行调试:

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

    方法puts会返回nil,因此data将为nil,并且不会显示任何内容。

  2. 在您正在解析的页面中,product-spec列表实际上是一个类,而不是ID,因此您需要.product-spec.而不是{{1 }})。

  3. 您使用的语法实际上不是CSS,看起来您正在混合使用CSS和Xpath。你想要这样的东西:

    #

    (最后一点似乎并没有真正影响结果.Nokogiri将CSS选择器转换为xpath,看起来转换会产生有效的xpath。)