私は最近、xpath を使用するいくつかのスクレイピー クローラー プログラムを作成し、使用状況を記録するログを書きました。
XPath とは
XPath は、xml や html などの構造化ドキュメント内の特定の要素を指定して検索するために使用される記述言語です
XPath の主な機能
以下では、次のテスト ドキュメントを例に挙げます。
<html> <body> <contents id="content"> <para><a href="one.html" class="normal-link">One</a></para> <para><a href="two.html" class="normal-link">Two</a></para> <para><a href="three.html" class="ex-link">Three</a></para> </contents> </body></html>
正確なパス アドレッシング
は、正確に指定されたパスを通じて要素を取得することを指します。たとえば、
は、UNIX ファイル システムの概念と一致しています。次のような配置方法がいくつかあります。
- 絶対パス、/html/body/contents/para で見つけることができます。ドキュメント内の 3 つの para 要素
- 相対パス。/html/body パスの下にある /contents/para も、これらの 3 つの para 要素
- の親パスを示します。 .. を表します 現在のパスの親パス
ファジー パス アドレス指定
は、絶対パスまたは現在のパスに基づいて決定される相対パスを指定する必要はありません。部分構造を指定して、この部分構造に適合するすべての要素を検索します。たとえば、
- //contents/para は、任意のパスの下の ドキュメント全体 でこれら 3 つの para 要素
- .//contents/ を見つけることができます。現在のパスの content/para 構造に一致する子ノード内の要素を検索します。
に一致するノード属性。形式: element [@attribute="xxx"]
- a[@class="normal-link"] は、normal-link クラスの 2 つのチェーンを見つけることができます。
- para[a/@class="ex-link" "] は、第 1 レベルの子要素に ex-link クラスのチェーンを持つ para 要素。ここでは e0e63714342f3a0893ffd7951fbd3c2cThree5db79b134e9f6b82c0b36e0489ee08ed /para>
属性の選択
次のような要素内の特定の属性値を検索します。 a[@class="ex-link"]/@ href は、href を読み取ることができます。 3 番目の値はチェーン
組み込み関数
- node() で、任意のタイプのノードを返します。たとえば、組み込みキーワード child と組み合わせて /html/body/contents/child::node() を形成すると、すべてのパラ ノード
- text() を選択し、ノードに含まれるテキストを返すことができます。 。 /html/body/content/para/a[@class="ex-link"]/text() は 3 を返します。特に、/html/body/contents//text() などのファジー パス アドレス指定と組み合わせると、コンテンツ
の下に One Two Three 文字列を返すことができます。