为什么 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. 看起来您正在尝试通过打印出行中css调用的结果来进行调试:

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

    该方法puts返回nil,因此data将被nil,并且将导致不显示任何内容。

  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)。

相关内容

  • 没有找到相关文章

最新更新