0

是否可以使用 Nokogiri 进行多域搜索。我知道您可以对单个域/页面进行多个 Xpath/CSS 搜索,但可以搜索多个域?

例如我想抓取http://www.asus.com/Notebooks_Ultrabooks/S56CA/#specificationshttp://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"))

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

#Modify our data
lines = data.map(&:text)

#Create the Spreadsheet
Spreadsheet.client_encoding = 'UTF-8'
book = Spreadsheet::Workbook.new

sheet1 = book.create_worksheet
sheet1.name = 'My First Worksheet'

#Output our data  to the Spreadsheet
lines.each.with_index do |line, i|                                                        
  sheet1[i, 0] = line                                                                     
end    

book.write 'C:/Users/Barry/Desktop/output.xls'
4

1 回答 1

2

Nokogiri 没有 URL 的概念,它只知道 XML 或 HTML 的字符串或 IO 流。您将 OpenURI 的目的与 Nokogiri 的目的混淆了。

如果您想从多个站点读取,只需遍历 URL,并将当前 URL 传递给 OpenURI 到open页面:

%w[
  http://www.asus.com/Notebooks_Ultrabooks/S56CA/#specifications 
  http://www.asus.com/Notebooks_Ultrabooks/ASUS_TAICHI_21/#specifications
].each do |url|

  doc = Nokogiri::HTML(open(url))
  # do somethng with the document...
end

OpenURI 将读取页面,并将其内容传递给 Nokogiri 进行解析。Nokogiri 仍然一次只能看到一页,因为这就是 OpenURI 传递的全部内容。

于 2013-02-04T14:52:17.403 回答