2011-11-15 8 views
1

xpathでNokogiriを使用してHTMLの場所からデータを削り取ろうとしています。私が使用していますXPathは次のとおりです。xpathsを使用してHTMLスクレイピングを使用することについて特別なことはありますか?

/html/body/table/tbody/tr[2]/td/table/tbody/tr[2]/td[2] 

XPathのポイントに:

<td class="anatxt" nowrap=""> CELL TXT DATA <div id="div0" style="visibility: hidden; position: absolute"> 

コードは単純です:それは他の短いパスで動作しますが、それだけのために""を返し

#!/usr/bin/ruby -w 

require 'rubygems' 
require 'nokogiri' 

page1 = Nokogiri::HTML(open('test1.html')) 

a = page1.xpath("/html/body/table/tbody/tr[2]/td/table/tbody/tr[2]/td[2]").text 
p a 

この特定の場合。

なぜこれが起こっているのでしょうか?私は何が欠けているのですか、またはいくつかのバグのために面白いノコギリの行動がありますか?どのポインタも歓迎します。

+1

実験用のマークアップサンプルをいくつか投稿できますか?それが長いのなら、それを握ってください。 https://gist.github.com/ – d11wtq

+2

いいえ、XPathが非常に壊れやすいように見えることを除いて、特別なことはありません。可能であれば、ページのより意味論的な側面( 'id'や' class'属性など)に固執する必要があります。 @ d11wtqによれば、使用するXMLの実際の例を示す必要があります。 – Phrogz

+0

ありがとう!それは実際にmozillaによって追加された 'tbody'タグであり、本来はそこにはありません。 xpathから削除すると動作します – tengee

答えて

4

tbodyタグが実際には存在しない可能性があります。 一部のブラウザでは表示されないときにブラウザが追加されますが、Nokogiriでは表示されません。

+0

この問題もありました。あなたは私のスタックオーバーフローの質問をここで見ることができます:http://stackoverflow.com/questions/7540506/ff-xpather-to-nokogiri-can-i-just-copy-and-paste –

+0

正しい、いくつかのブラウザは 'tbodyそれは赤いニシンの役目を果たします。アクセサーを生成するためにブラウザに頼るのではなく、XPathアクセサーを構築するときにソーステキストを見るのが常にベストです。 –

+0

'tbody'タグを削除しました。気になるブラウザ(この特定のケースではMozilla)!おかげでpguardiario :) – tengee

関連する問題