2012-07-17 56 views
1

我颳了文字網頁,使用如下代碼XPath和陣列

doc.xpath("//td[text()='Operating system']/following-sibling::td") 
doc.xpath("//td[text()='Processors']/following-sibling::td") 

我對這些30,所以我想我可能會使用一個數組,但它不工作,這是我的代碼

clues = Array.new 
clues << 'Operating system' 
clues << 'Processors' 
clues << 'Chipset' 

clues.each do |clue_storeage| 
doc.xpath("//td[text()=#{clues}]/following-sibling::td") 
end 

有沒有一種方法可以將數組饋送到該循環,然後將其輸出到CSV?

+0

不確定這是否是您的問題,但在您的陣列版本中,文本週圍沒有引號。嘗試將其更改爲:'... text()='#{clues}'] ...'。 – MrDanA 2012-07-17 13:24:59

+4

我不清楚你是如何填充你的數組,但我看到的一個錯誤是,你在數組上運行你的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

回答

0

爲了闡明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/

+0

好吧,我輸入了clues.each do | clue | doc.xpath(「// td ... [text()='#{clues}']/following-sibling :: td」) end並返回=> [「Operating system」,「Processors」, 「chipset」]但我需要數組值來輸入該xpath片 – Ninja2k 2012-07-17 16:48:25

+0

像這樣doc.xpath(「// td /following-sibling :: td」) – Ninja2k 2012-07-17 16:48:57

+0

刪除s。 #{clue} not#{clues} – gef 2012-07-17 18:49:14