Webスクレイピングに不可欠!Xpathのまとめ

Webスクレイピングを行う上で、重要な役割を担うのが「XPath」です。しかし、XPathについて正しく理解できていない方も多いでしょう。そこで今回はXPathについて、基本から書き方までわかりやすく解説します。

目次

XPathとは

XPathを表示・取得するには

XPathの書き方

XPathを試してみる

XPathとは

そもそもXPathとは、「XML Path Language」の略で、XML形式で記述された文書から、特定のデータを指定して抽出するための、問い合わせ言語を指します。

XPathで条件を指定することで、Webページ上の任意のテキストや画像などを抽出します。Xpathは、Webスクレイピングによってデータを取得する際に利用されることの多い言語です。

XPathを表示・取得するには

XPathを取得する方法は、お使いのブラウザによって異なります。ここでは、「Chrome」と「Firefox」を使ったXPathの取得方法を解説します。

Chrome

「Chrome」では、右クリックメニューの「検証」から開発者ツールを表示します。表示されているElementsタブのhtmlで、要素を右クリックします。メニューの「Copy」→「Copy XPath」でその要素を取得するためのXPathがクリップボードにコピーされます。

Firefox

「Firefox」でXPathを表示するには、 Firefox のアドオンである『Firebug』を使います。Firebugは、Webページ上の任意の要素のHTML / CSSを検索して、Webページのデバッグと開発を容易にするFirefoxアドオンです。

FirefoxでWebページを開き、Firebugボタンをクリックし、ページ内の要素をクリックして、そのXPathを取得できます。または、ページを右クリックするだけで、「Inspect in FirePath」オプションが表示されます。「Inspect in FirePath」は Firefox のアドオン「FirePath」の機能であるため、「FirePath」アドオンがインストールされていることが前提となります。

表示されているElementタブのhtmlで、要素を右クリックし、「Copy XPath」でその要素を取得するためのXPathがクリップボードにコピーされます。

Firebugは旧バージョンのFirefoxでのみ利用可能です。古いバージョンのFirefoxをダウンロードする

現在は Firefox に代わって「Firefox 開発者ツール」が推奨されており、「Firefox 開発者ツール」にも XPath の機能があります。

XPathの書き方

OctoparseはXPath を自動的に見つけ出すデータ抽出ツールです。Octoparseで自動認識したXPathはブラウザでコピーしたXPathと同じです。

しかし、XPathの表示式が多いため、多くのページを処理する場合は、XPathが無効になる可能性があります。その場合は、XPathを自分で書く必要があります。

ここではXPathについて解説していきます。

まず、XPathフォーマットには、以下のような主要な要素があります。

1.軸(Axis):軸と呼ばれる概念を使用して、文書のノードを検索するための基準を設定します。軸には、祖先、子孫、兄弟などがあります。

2.ノード(Node):XML文書の中のノードを特定するために使用されます。ノードには、要素、属性、テキスト、コメントなどがあります。

3.パス(Path):XML文書内のノードを指定するためにパス表記を使用します。パスには、相対パスと絶対パスがあり、それぞれのパス表記でノードを指定することができます。

4.述語(Predicate):述語は、XPathの条件式で使用されます。述語を使用して、ノードを選択する条件を指定することができます。例えば、特定の属性値を持つ要素だけを選択するために述語を使用することができます。

5.関数(Function):関数を使用して、ノードや文字列などを処理することができます。XPathでは、数学関数、文字列関数、日付関数、ノード関数などのさまざまな種類の関数があります。

XPathは、親子関係や属性、テキスト値といった要素を指定することができます。また、XPathは論理演算子、算術演算子、比較演算子を含めた多彩な構文を持ち、さらには関数を組み合わせることもできます。これらの構文を駆使することで、XMLドキュメント内の要素を高度に特定し、必要な情報を取得することができます。これらには、次のようなものがあります。

XPathは、スラッシュ(/)を使用してXMLドキュメントの要素を参照します。 XPath式は、XMLノードツリー内のパスを示し、各ノードはスラッシュで区切られます。たとえば、以下のXPath式は、XMLドキュメント内のルート要素の最初の子要素を参照します。

/ルート要素/最初の子要素

1.ノードタイプ:XPath式では、XMLノードの種類を指定することができます。たとえば、次のXPath式は、ドキュメント内のすべての要素ノードを選択します。

//要素ノード

2.属性:XPath式では、属性も参照することができます。たとえば、次のXPath式は、XMLドキュメント内のすべてのhref属性を含む要素を選択します。

//要素[@href]

3.テキストノード:XPath式は、テキストノードも指定できます。たとえば、次のXPath式は、XMLドキュメント内のすべてのテキストノードを選択します。

//テキスト()

XPathフォーマットについての説明をテーブル形式で示します。

要素

意味

軸::ノードテスト[式]

XPathの書式

ツリー上の位置関係を指定するもの

child::

子ノード

self::

カレントノード

parent::

親ノード

descendant-or-self::

すべてのノード

//

ルートノードの子孫ノードから要素ノードelementを全て選択

attribute::

属性ノード

ancestor::

祖先ノード

descendant::

子孫ノード

following::

起点より後に位置するノードすべて(子孫ノードを除く)

preceding::

起点より前に位置するノードすべて(祖先ノードを除く)

following-sibling::

起点より後に位置する兄弟ノード

preceding-sibling::

起点より前に位置する兄弟ノード

ノードテスト

選択するノードの型と名前を指定するもの

ロケーションパス

特定のノードの位置を指定するための式

相対ロケーションパス

現在位置のノードを起点として指定するロケーションパス

絶対ロケーションパス

ルートノードを起点として指定するロケーションパス

省略シンタックス

記述方法を簡略化したロケーションパス

name

子要素nameまたは属性name

/

ルートノードを選択

//

ルートノードの子孫ノードから要素ノードelementを全て選択

.

カレントノード(現在位置のノード)を選択

..

カレントノードの親を選択

@

属性ノードを選択

*

指定したパスの直下の全ての子要素または属性

text()

指定したパスの直下のテキストを選択

node()

指定したパスの直下のノードを選択(属性ノードは含まない)

ノードを限定するために使用する条件

XPathを試してみる

XPathの書き方を理解できたところで、いくつかの例を通して、実際にXPathを書いてみましょう。

ここでは、以下のXML文書を例として使います。

<books>

  <book>

    <title>Harry Potter and the Philosopher's Stone</title>

    <author>J.K. Rowling</author>

    <year>1997</year>

  </book>

  <book>

    <title>The Catcher in the Rye</title>

    <author>J.D. Salinger</author>

    <year>1951</year>

  </book>

  <book>

    <title>To Kill a Mockingbird</title>

    <author>Harper Lee</author>

    <year>1960</year>

  </book>

</books>

この文書から、タイトルが「To Kill a Mockingbird」の書籍の著者を取得するXPathは次のようになります。

/books/book[title='To Kill a Mockingbird']/author

このXPathは、books要素の下にあるbook要素の中で、title要素が「To Kill a Mockingbird」というテキストノードを持つ要素の下にあるauthor要素を選択することを意味しています。

まとめ

Webスクレイピングに便利なXPathについて解説しましたが、いかがでしょうか?

初心者の方にはやや難しい内容ですが、XPathはWebスクレイピングに活用するために、不可欠なものですので、ぜひ頑張って理解してみてください。

もしこの記事の内容だけではわかりにくいと感じましたら、以下の記事も併せて参考にしてください。

参考:XPathとは?基本概念や書き方をわかりやすく解説!

関連記事

【iタウンページ】無料で簡単に営業リストを自動作成する方法|今すぐ使える

YouTubeコメントをスクレイピングで自動取得して羽生結弦選手のファン感情を分析する

Twitterの人気ハッシュタグを収集する方法