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. 在您正在解析的页面中,product-spec列表实际上是一个类,而不是一个 id,因此您需要.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 回答