logo
languageJPdown
menu

XPathでWebスクレイピングする手順とXPathを取得する方法のまとめ

約7分で読めます

Webスクレイピングを行う上で、重要な役割を担うのが「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要素を選択することを意味しています。

XPathでスクレイピングする手順は?

XPathを使用したスクレイピングの手順は以下の通りです:

1、ライブラリのインポート: Pythonの場合、lxmlなどのXPathをサポートするライブラリをインポートします。例えば、import lxml.etree as etreeとします。

2、HTMLの取得: スクレイピングしたいウェブページのHTMLを取得します。これは、リクエストを送信してHTMLのレスポンスを取得するなどの方法で行えます。例えば、requestsライブラリを使用してresponse = requests.get(url)とします。

3、XPathを作成: 取得したHTMLに対してXPathを作成します。XPathは、要素や属性を指定して特定の要素を選択するためのパスです。XPath式はウェブページの構造に基づいて構築されます。上記のXPathの書き方が参照になれると思います。

4、XPathを使用して要素を選択: etreeライブラリを使用してXPathを適用し、HTML内の特定の要素を選択します。例えば、tree = etree.HTML(response.text)でHTMLを解析し、tree.xpath(“//h1”)のようにXPathを適用して要素を選択します。

5、取得したデータの処理: 選択した要素から必要なデータを取得し、必要に応じて処理します。これには、テキストの抽出や属性の取得などが含まれます。

まとめ

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

初心者の方にはやや難しい内容ですが、XPathはWebスクレイピングに活用するために、不可欠なものですので、ぜひ頑張って理解してみてください。Webスクレイピングツールで直接にデータを取得したい場合、便利で使いやすいスクレイピングソフトOctoparseをおすすめします。

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

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

人気記事

トピックを検索する

今すぐOctoparseを始めて、業務効率化を実現しましょう。

ダウンロード

関連記事

  • avatarTakahashi
    「Webスクレイピングツールを自分でゼロから構築したい」こうしたニーズが近年急増しています。Webスクレイピングツールは、インターネットの情報を収集・保存・分析に役立ちます。そのWebスクレイピングツールで、重要な役目を持つのが「Webクローラー」です。本記事ではプログラミング初心者の方でも、かんたんに作れるWebクローラーの構築方法について解説します。実際に構築をしなくても、Webクローラーの仕組みを理解することは、ITリテラシーを高める上でとても大切です。ぜひ参考にしてみてください。
    2024.02.21 · 7 min read
  • avatarMurata
    Webスクレイピングを実行していると、403エラーが表示されて、データの抽出ができないことがあります。403エラーには、さまざまな原因があります。この記事では、Webスクレイピングの初心者の方に向けて、403エラーの原因や403エラーの解決策を解説します。
    2023.02.13 · 7 min read
  • avatarTakahashi
    ビッグデータは、市場動向、顧客の好み、競合他社の分析に関連した情報を提供します。今やWebスクレイピングは、単にデータを収集するだけでなく、企業のマーケティング活動において必要不可欠と言ってもよいでしょう。ただし、Webスクレイピングプロセスをスケールアップすると、ブロッキングメカニズムなどの多くの課題が発生し、データを取得できなくなる可能性があります。ここではWebスクレイピングが抱える8つの課題と解決方法を紹介します。
    2023.02.06 · 7 min read
  • avatarTakahashi
    近年、ビッグデータ分析に用いるデータ収集のために、Webスクレイピングを利用するケースが増えています。しかし、ビッグデータの専門家ではない多くの人からすれば、「そもそもWebスクレイピングとは何か?」と疑問に思うことでしょう。そうした疑問を解消するために、今回はWebスクレイピングに関してよくある質問15選をまとめて紹介します。
    2023.01.30 · 7 min read