2012-10-25 7 views
5

私はXPathを初めて使用しています。それは私にはやや難解です。時々、私はそれがうまくいくと思っているように働いていないことがわかります。ノコギリとXPath;チュートリアル/サンプル?

XPathとNokogiriを使用してウェブサイトからデータをスクラップすると、ウェブサイトが複雑な構造を持つと難しいと感じます。私は、要素のXPathを取得するためにFirePathを使用しますが、時にはうまく動作しないようです。 tbodyのように、ブラウザで追加された余分なタグを削除する必要があります。

XPathとNokogiriのチュートリアルや例があるかどうか本当に知りたいです。私はGoogleの検索の後に多くを見つけることができませんでした。

+0

Nokogiriについての素晴らしい点の1つは、CSSアクセサーもサポートしていることです。ときどきCSSが見つかるより速いパスです。時にはXPathがあります。必要に応じて自由に交換してください。 –

+0

ええ、私は両方のCSSセレクタとXPathを使用します。両方を併用すると、実際にはより強力になります。 –

答えて

14

Nokogiriまたは任意のXML/HTMLパーサーを使用して要素または要素のグループを見つけるのに最も大きなトリックは、短いアクセサーから始めて、探しているものの一般的な近傍に入り、あなたが望むものがあるまで、あなたが行くように微調整してください。

第2の秘訣は、ドキュメントのルートから始めることを絶対に確かめない限り、//を使用してXPathを起動することを覚えておいてください。/ではありません。 //は、Linuxのコマンドラインで'**/*'ワイルドカードと似ています。どこでも検索します。

また、ブラウザから提供されているXPathまたはCSSアクセサを信頼しないでください。あなたは見たように、彼らはtbodyを含むHTMLソースにあらゆる種類の修正を行います。代わりに、RubyのOpenURIまたはcurlまたはwgetを使用して、元のソースを取得し、viまたはvimのようなエディタで表示するか、lessまたはcatを画面に使用してください。このようにファイルを変更する機会はありません。

最後に、検索をXPathでチャンクに分割してから、Rubyが繰り返し実行するようにするのは、複雑でXPathを維持するのが難しく、壊れやすいからです。

ノコギリ自体はかなり簡単です。あなたがしたいことの大部分は、2つの異なる方法の簡単な組み合わせです:searchatです。どちらもCSSまたはXPathセレクタを使用します。 searchは、兄弟メソッドxpathcssとともに、NodeSetを返します。これは、基本的に反復処理できるノードの配列です。 at,css_atおよびxpath_atは、CSSまたはXPathアクセサに一致する最初のノードを返します。これらのすべてのメソッドでは、...xpathバリアントはXPathを受け入れ、...cssはCSSアクセサーを受け取ります。

ノードを作成したら、一般的にはパラメータを抽出するか、テキスト/コンテンツを取得するかのいずれかを行います。 [attribute_to_get]と、textを使用して簡単に属性を取得できます。出力

require 'awesome_print' 
require 'nokogiri' 
require 'open-uri' 
doc = Nokogiri::HTML(open('http://www.example.com')) 
ap doc.search('a').map{ |a| [a['href'], a.text] }[0, 5] 

[ 
    [0] [ 
     [0] "/", 
     [1] "" 
    ], 
    [1] [ 
     [0] "/domains/", 
     [1] "Domains" 
    ], 
    [2] [ 
     [0] "/numbers/", 
     [1] "Numbers" 
    ], 
    [3] [ 
     [0] "/protocols/", 
     [1] "Protocols" 
    ], 
    [4] [ 
     [0] "/about/", 
     [1] "About IANA" 
    ] 
] 
+0

ノコギリは簡単です。私の答えに私の追加テキストを見てください。 –

8

初めにNokogiriとXPathを使用してかなり険しい学習曲線があることがわかりましたが、多くの試行錯誤の後、私は今、両方のハングアップを取得できました。ノコギリは本当に強く、学ぶ価値があります。

チュートリアル/例については、Nokogiri tutorials pageを見たと思います。

XPathでは、私はthis summary in five paragraphsを読むことをお勧めします。その中核となるXPathはかなりシンプルで、本当に直感的ではありません!私はCSSを覚えるのがはるかに簡単だと思うし、私は唯一だとは思わない。

しかし、最後に、チュートリアルが役立ちますが、できることはコンソールを開けて開こうとすることです(require 'nokogiri')。しばらくすると意味をなさないでしょう。

+0

あなたの素敵な答えをありがとう。私はstart_making_senseに行くために多くの練習をする必要があることを知っています。あなたに幸運と再び感謝します。 –

+0

そして、私はこの答えからxpathについていくつかの素晴らしいことを学びました:http://stackoverflow.com/questions/2080799/how-to-use-xpath-nokogiri?lq=1 –

+0

喜んで私は助けることができました!あなたにも幸運。 –

4

最良の例のようなものを使用して、我々はページ内のすべてのリンクを検索し、そのテキストおよび関連のhrefを返すことができ、これらの方法を使用して

私は本当に役に立つと思ったが、以下のリンクにあった。 xmlファイルから情報をナビゲート/検索するのに使用できるさまざまな方法の難しさが増している別のチュートリアルを示しています。

http://www.zvon.org/xxl/XPathTutorial/General/examples.html

は、あなたがあまりにもそれが役に立つことを願っ! 幸運!

関連する問題