5

私はXPathを初めて使用しますが、少し注意が必要です。時々、私はそれがうまくいくはずだと思っているように機能していないことに気づきます。

XPathとNokogiriを使用してWebサイトからデータを取得する場合、Webサイトが複雑な構造であると難しいと感じます。FirePathを使用して要素のXPathを取得していますが、機能しない場合があります。のように、ブラウザによって追加された余分なタグを削除する必要がありますtbody

XPathとNokogiriの良いチュートリアルと例があるかどうか本当に知りたいです。グーグル検索であまり見つかりませんでした。

4

2 に答える 2

15

Nokogiriまたは任意のXML/HTMLパーサーを使用して要素または要素のグループを見つけるための最大の秘訣は、短いアクセサーから始めて、探しているものの一般的な近くに入り、それを繰り返し追加することです。 -必要なものが得られるまで、調整を進めます。

2番目のトリックは、ドキュメントのルートから開始することが絶対に確実でない限り//、XPathを開始するために使用することを忘れないでください。Linuxのコマンドラインでのワイルドカードのようなものです。どこでも検索します。///'**/*'

また、ブラウザーによって提供されるXPathまたはCSSアクセサーを信頼しないでください。tbodyあなたが見たように、彼らはHTMLソースに対してあらゆる種類の修正を行います。代わりに、RubyのOpenURIまたはcurlまたはwgetを使用して生のソースを取得し、またはなどのエディターでそれを確認するviか、またはvimを使用して画面に表示します。そのようにファイルに変更を加える可能性はありません。lesscat

最後に、XPathを使用して検索をチャンクに分割し、Rubyに繰り返し処理させる方が、保守が困難または脆弱な複雑なXPathを考え出すよりも、多くの場合、簡単/高速です。

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

ノードを作成したら、通常、パラメーターを抽出するか、そのテキスト/コンテンツを取得するという2つのことのいずれかを実行する必要があります。を使用して属性を簡単に取得し、を使用[attribute_to_get]してテキストを取得できますtext

これらのメソッドを使用すると、ページ内のすべてのリンクを検索し、次のようなものを使用して、テキストと関連するhrefを返すことができます。

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"
    ]
]
于 2012-10-26T02:03:33.430 に答える
9

また、最初はNokogiriとXPathを使用したかなり急な学習曲線があったこともわかりましたが、多くの試行錯誤の末、今では両方のコツをつかむことができたので、そこで頑張ってください!のこぎりは本当にパワフルで学ぶ価値があります。

チュートリアル/例については、のこぎりチュートリアルページを見たことがあると思います。XPathやXML解析などに慣れていない場合は、これらのチュートリアルのレベルが少し高くなる可能性があると思います。

その他の可能なリソース:

XPathでは、この要約を5つの段落で読むことをお勧めします。基本的に、XPathはかなり単純で、本当に直感的ではありません。CSSは覚えやすいと思いますが、私だけではないと思います。

結局のところ、チュートリアルは役に立ちますが、あなたができる最善のことは、コンソールを開けて、require 'nokogiri'プラグを抜くことです。しばらくすると、それは意味をなし始めます。

于 2012-10-25T14:29:52.780 に答える