爲了闡明mb2nd的評論,您的每個塊都不正確地引用該數組。這應該工作:
clues.each do |clue|
doc.xpath("//td[text()=#{clue}]/following-sibling::td")
end
要輸出的拍攝數據,以CSV,你可以運行:
csv = ""
clues.each do |clue|
csv << doc.xpath("//td[text()=#{clue}]/following-sibling::td")
csv << ", " unless clues.last == clue
end
的doc.xpath(「// TD [文本()=#{}線索] /以下-sibling :: td「)調用最終可能需要.value?
在附註上;你還可以填寫你的陣列,像這樣:
clues = ['Operating system', 'Processors', 'Chipset']
編輯
您需要保存每個XPath的調用的結果(來自@ Ninja2K最後的評論之後)。這裏有一些工作代碼:
require 'rubygems'
require 'nokogiri'
require 'open-uri'
doc = Nokogiri::HTML(open("http://h10010.www1.hp.com/wwpc/ie/en/ho/WF06b/321957-321957-3329742-89318-89318-5186820-5231694.html?dnr=1%22"))
clues = ['Operating system', 'Processors', 'Chipset']
csv_text = ""
clues.each do |clue|
csv_text << doc.at_xpath("//td[text()='#{clue}']/following-sibling::td").text
csv_text << ", " unless clues.last == clue
end
puts csv_text
順便說一句。您也許會發現這篇文章很有用:http://hunterpowers.com/data-scraping-and-more-with-ruby-nokogiri-sinatra-and-heroku/
來源
2012-07-17 14:46:29
gef
不確定這是否是您的問題,但在您的陣列版本中,文本週圍沒有引號。嘗試將其更改爲:'... text()='#{clues}'] ...'。 – MrDanA 2012-07-17 13:24:59
我不清楚你是如何填充你的數組,但我看到的一個錯誤是,你在數組上運行你的doc.xpath而不是數組中的對象。 doc.xpath(「// td [text()=#{clues}]/following-sibling :: td」)線索是你數組的名字。我認爲它應該是doc.xpath(「// td [text()=#{clue_storage}]/following-sibling :: td」),它是數組中的一個對象 – mb2nd 2012-07-17 13:29:40