1

次のコードを使用して、テキストのWebページをスクレイピングしています

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 に出力する方法はありますか?

4

1 に答える 1

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[text()=#{clue}]/following-sibling::td") 呼び出しには、最後に .value が必要な場合がありますか?

余談ですが; 次のように配列を設定することもできます。

clues = ['Operating system', 'Processors', 'Chipset']  

編集(@Ninja2Kからの最後のコメントの後)

各 xpath 呼び出しの結果を保存する必要があります。ここにいくつかの作業コードがあります:

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-17T14:46:29.390 に答える