我的任务
从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'
答案 0 :(得分:1)
这里有一些问题:
看起来您正在尝试通过在行中打印css
调用的结果进行调试:
data = puts doc.css('//div#specifications/div#spec-area/ul#product-spec/li')
方法puts
会返回nil
,因此data
将为nil
,并且不会显示任何内容。
在您正在解析的页面中,product-spec
列表实际上是一个类,而不是ID,因此您需要.product-spec
(.
而不是{{1 }})。
您使用的语法实际上不是CSS,看起来您正在混合使用CSS和Xpath。你想要这样的东西:
#
(最后一点似乎并没有真正影响结果.Nokogiri将CSS选择器转换为xpath,看起来转换会产生有效的xpath。)