2011-10-17 6 views
-1

私は与えられたxpathの実際の値を取得しようとしています。私はnokogiriまたはhpricotのスクリーンスクレイピング

require 'rubygems' 
require 'nokogiri' 
require 'open-uri' 
doc = Nokogiri::HTML(open('http://www.changebadtogood.com/')) 
desc "Trying to get the value of given xapth" 
task :sample do 
    begin 
    doc.xpath('//*[@id="view_more"]').each do |link| 
     puts link.content 
    end 
    rescue Exception => e 
    puts "error" 
    end 
end 

出力があるsample.rbファイルに次のコードを持っています:

もっと見る問題..

私は他のAの値を取得しようとすると、
/html/body/div[4]/div[3]/h1/span などのような別のXPathの場合、「エラー」というメッセージが表示されます。

ノコギリでこれを試しました。なぜこれが数XPathだけで結果を出すのか分かりません。

私はHpricotで同じことを試みました。
http://hpricot.com/demonstrations

私は私のURLとXPathを貼り付け、私は
//*[@id="view_more"]
ビュー
など、より問題のために結果を参照してください。..

[このテキストは、最近の問題の一番下にあるヘッダー]

結果は表示されません: /html/body/div[4]/div[3]/h1/span このXPathの結果は、Badです。
[これは、クラスの最初のヘッダ=「英雄ユニット」DIVとして http://www.changebadtogood.com/中に存在した。】

+1

ここには多くの問題があります。エラーが発生しているコードは含まれていません。どのような善はエラーをキャッチし、 'エラー'を印刷するのですか?デバッグできるようにエラーを発生させてください。質問を投稿する前にインデントを修正する必要があります。 – pguardiario

+0

そして、あなたは14の質問をして、まだ1つの答えを受け入れていません。私はあなたの質問に答えましたが、私は[以前に尋ねられた質問](http://stackoverflow.com/users/792302/vinothini)を再訪することを強くお勧めします。 any)を選択し、それを受け入れます(チェックマークをクリックします)。 – Phrogz

答えて

2

あなたの問題が悪いのXPathセレクタと関係があり、そして鋸山又はHpricotとは無関係です。さんが調査してみましょう:このことから

irb:01:0> require 'nokogiri'; require 'open-uri' 
#=> true 
irb:02:0> doc = Nokogiri::HTML(open('http://www.changebadtogood.com/')); nil 
#=> nil 
irb:03:0> doc.xpath('//*[@id="view_more"]').each{ |link| puts link.content } 
View more issues .. 
#=> 0 
irb:04:0> doc.at('#view_more').text # Simpler version of the above. 
#=> "View more issues .." 
irb:05:0> doc.xpath('/html/body/div[4]/div[3]/h1/span') 
#=> [] 
irb:06:0> doc.xpath('/html/body/div[4]') 
#=> [] 
irb:07:0> doc.xpath('/html/body/div').length 
#=> 2 

我々は<body>要素の子であるので、div[4]一つを選択するために失敗した2つだけのdivがあることがわかります。

あなたがここにスパンを選択しようとしていることが表示されます:

<h1 class="landing_page_title"> 
    Change <span style='color: #808080;'>Bad</span> To Good 
</h1> 

の代わりに(要素の匿名の階層をインデックス)これに至るまでの脆弱なマークアップに頼って、文書の意味構造を使用しますよりシンプルでより堅牢なセレクターにとって有利です。 CSSまたはXPathのいずれかの構文を使用:

irb:08:0> doc.at('h1.landing_page_title > span').text 
#=> "Bad" 
irb:09:0> doc.at_xpath('//h1[@class="landing_page_title"]/span').text 
#=> "Bad" 
+0

ありがとうございました.....Phrogz この情報は私にとって非常に非常に便利です – vinothini

関連する問題