スプレッドシートのIMPORTXML関数の使い方|XMLデータ取得

スポンサーリンク

「Webページから特定のデータだけを取り出したいのに、表まるごとしか取得できない」。そんな経験はありませんか。

IMPORTHTML関数では表やリスト単位の取得しかできず、「ページタイトルだけ」「特定のリンクだけ」といったピンポイントの抽出には向いていません。

そんなときに活躍するのが IMPORTXML関数 です。XPathという指定方法を使えば、Webページ内の好きな要素をピンポイントで取得できます。

この記事では、スプレッドシートのIMPORTXML関数の基本からXPathの書き方、実践的な活用パターンまで解説します。

IMPORTXML関数とは?

IMPORTXML関数は、XMLやHTML形式のデータからXPathで指定した要素を取得する関数です。

名前は英語の「import(取り込む)」と「XML(データの構造化形式)」が由来です。

たとえば、次のようなデータを取得できます。

  • Webページのタイトルタグの内容
  • 特定のHTMLタグに含まれるテキスト
  • メタディスクリプションの内容
  • リンクのURL一覧
  • 見出し(h2やh3)のテキスト一覧

IMPORTHTML関数が「表やリストをまるごと取得」するのに対し、IMPORTXML関数は「欲しい要素だけをXPathで指定して取得」できるのが特徴です。

NOTE

IMPORTXML関数はGoogleスプレッドシート専用の関数です。Excelには同じ関数は存在しません。ExcelでXMLデータを取得するには、Power Queryの「XMLから」機能やXMLの読み込み機能を使います。

IMPORTXML関数の書き方(構文と引数)

基本構文

=IMPORTXML(URL, XPathクエリ)

カッコの中に2つの引数を指定します。

引数の説明

引数必須/任意説明
URL必須データを取得したいWebページのURL。文字列で指定
XPathクエリ必須取得したい要素を指定するXPath式。文字列で指定

第1引数にはWebページのURLを指定します。ダブルクォーテーションで囲むか、URLが入力されたセルを参照します。

第2引数にはXPathクエリを指定します。XPathとは、XMLやHTMLの中から特定の要素を指定するための記法です。次のセクションで基本的な書き方を紹介します。

TIP

URLはセル参照で指定するのがおすすめです。数式が見やすくなりますし、複数の数式で同じURLを使い回せます。

IMPORTXML関数の基本的な使い方

XPathの基本構文

IMPORTXML関数を使うには、XPathの書き方を知っておく必要があります。ちょっとむずかしく見えますが、基本パターンは数個だけなのでシンプルです。

よく使うXPathの書き方をまとめました。

XPath取得できるもの
//titleページのタイトルタグの内容
//h2すべてのh2見出しのテキスト
//a/@hrefすべてのリンクのURL
//meta[@name='description']/@contentメタディスクリプションの内容
//pすべての段落テキスト
//img/@srcすべての画像のURL
//liすべてのリスト項目のテキスト

// は「ページ内のどこにあっても検索する」という意味です。タグ名を続けるだけで、そのタグの中身を取得できます。

/@属性名 を付けると、タグの属性値を取得できます。たとえば //a/@href は「aタグのhref属性(リンク先URL)」を取得します。

ページタイトルを取得する

最もシンプルな使い方です。Webページのtitleタグの内容を取得します。

=IMPORTXML("https://example.com", "//title")

1つのセルにページタイトルが表示されます。

見出し一覧を取得する

ページ内のすべてのh2見出しを一覧で取得できます。

=IMPORTXML("https://example.com/article", "//h2")

h2タグが複数ある場合は、縦方向にすべての見出しが展開されます。h3見出しを取得したい場合は "//h3" に変えるだけです。

リンクURLを取得する

ページ内のすべてのリンク先URLを取得するにはこう書きます。

=IMPORTXML("https://example.com", "//a/@href")

@href はaタグの「href属性」を指定しています。ページ内のすべてのリンクURLが縦方向に展開されます。

メタディスクリプションを取得する

SEOの調査で使えるテクニックです。ページのメタディスクリプションを取得します。

=IMPORTXML("https://example.com", "//meta[@name='description']/@content")

[@name='description'] は「name属性がdescriptionであるmetaタグ」を指定する条件式です。/@content でそのタグのcontent属性の値を取得します。

TIP

XPathの [] は条件を指定する書き方です。[@属性名='値'] の形で、特定の属性を持つ要素だけに絞り込めます。

IMPORTXML関数の実践的な使い方・応用例

複数ページのタイトルを一括取得する

A列にURLを並べておけば、各ページのタイトルをまとめて取得できます。

A1セルにURLを入力し、B1セルに次の数式を入れます。

=IMPORTXML(A1, "//title")

この数式をB列にコピーすれば、各URLのタイトルを一覧表にできます。競合調査やサイト内のタイトル確認に便利ですよ。

ただし、IMPORT系関数は1つのスプレッドシートにつき50個までという制限があります。大量のURLを調査する場合は50個以内に抑えてください。

特定のクラスを持つ要素を取得する

XPathの条件指定を使えば、特定のclass属性を持つ要素だけを取り出せます。

=IMPORTXML("https://example.com", "//div[@class='price']")

この数式は、class="price" が付いたdivタグの内容だけを取得します。

Webページから価格情報やステータス表示などを取り出すときに使えるテクニックです。

XPathで特定の位置の要素を取得する

見出しの中から「最初の1つだけ」を取得したい場合は、XPathに位置指定を追加します。

=IMPORTXML("https://example.com", "(//h2)[1]")

(//h2)[1] は「すべてのh2の中から1番目だけ」を意味します。2番目なら [2] に変えてください。

複数のデータが展開されると困る場面で、ピンポイントで1つだけ取り出したいときに役立ちます。

IMPORTXML関数の結果を加工する

IMPORTXML関数の結果は他の関数と組み合わせて加工できます。

たとえば、取得した文字列の文字数をカウントするにはこう書きます。

=LEN(IMPORTXML("https://example.com", "//title"))

LEN関数(文字列の文字数を返す関数)と組み合わせれば、ページタイトルの文字数を確認できます。

よくあるエラーと対処法

IMPORTXML関数で「データが取得できない」ケースをまとめました。

症状原因対処法
#N/A エラーXPathで指定した要素が存在しないXPathの記述を確認する。ブラウザの開発者ツールでHTML構造を確認してタグ名やクラス名を再確認
#N/A エラーURLが間違っている・ページが存在しないURLをブラウザで開いて正しいか確認する
#VALUE! エラーXPathの構文が間違っているクォーテーションの閉じ忘れやスラッシュの抜けを確認する
データが取得できないサイト側がアクセスを拒否しているrobots.txtやサーバー設定で制限されているサイトからは取得できない
データが空になるJavaScriptで動的に生成されたコンテンツIMPORTXML関数はHTMLソースの静的な要素のみ取得可能。JavaScriptで後から描画されるデータは対象外
古いデータが表示されるキャッシュが更新されていないスプレッドシートを再読み込みする。または数式を一度消して再入力する
#ERROR! エラーIMPORT系関数の上限(50個)を超えた1つのスプレッドシートで使えるIMPORT系関数は合計50個まで。不要な数式を削除する

#N/A エラーが最もよく出ます。まずはシンプルな "//title" で取得テストしてみてください。タイトルが取得できればURLは正しいので、XPathの指定に問題があるとわかります。

TIP

XPathのデバッグには、ブラウザの開発者ツール(F12)が便利です。「Elements」タブでHTML構造を確認すれば、どのタグ名・クラス名を指定すべきかがわかります。

Excelとの違い

IMPORTXML関数はGoogleスプレッドシート専用の関数です。Excelには存在しません。

項目GoogleスプレッドシートExcel
IMPORTXML関数使えるなし
XMLデータ取得の代替手段IMPORTXML関数Power Query「XMLから」
操作方法セルに数式を入力するだけGUIウィザードで設定
XPath指定数式の引数で直接指定Power Queryエディタで操作
自動更新シート再読み込み時手動更新または自動更新設定

ExcelでXMLデータを取り込みたい場合は、「データ」タブ →「データの取得」→「XMLから」でPower Queryを使います。

スプレッドシートのIMPORTXML関数なら数式1つで完結するので、手軽さでは圧倒的に便利です。

IMPORT系関数の使い分け

Googleスプレッドシートには、IMPORTXML以外にもデータを取得するIMPORT系関数が用意されています。目的に応じて使い分けましょう。

関数取得対象用途例
IMPORTXMLXPathで指定した要素Webページの特定要素をピンポイントで取得
IMPORTHTMLHTMLのtable / listWebページの表やリストをまるごと取得
IMPORTDATACSV / TSVデータ公開されているCSVファイルを取得
IMPORTFEEDRSS / Atomフィードニュースサイトの更新情報を取得
IMPORTRANGE別のスプレッドシート別ファイルのセル範囲を取得

使い分けのポイント: Webページの「表」がほしいだけならIMPORTHTMLが手軽です。特定の要素をピンポイントで取り出したい場合はIMPORTXMLを使いましょう。CSVファイルの読み込みにはIMPORTDATAが最適です。

IMPORTXML関数はXPathの知識が必要なぶん、最も自由度が高い関数です。「表やリストでは取得できない要素を取りたい」と感じたら、IMPORTXML関数の出番ですよ。

TIP

IMPORT系関数は1つのスプレッドシートにつき合計50個までしか使えません。複数のIMPORT関数を組み合わせる場合は、上限に注意してください。

まとめ

IMPORTXML関数は、XPathを使ってWebページやXMLデータから特定の要素を取得できる関数です。

ポイントを整理します。

  • 構文は =IMPORTXML(URL, XPathクエリ) で、引数は2つ
  • XPathでタグ名や属性を指定して、欲しいデータだけをピンポイントで取得できる
  • よく使うXPath: //title(タイトル)、//h2(見出し)、//a/@href(リンクURL)
  • Googleスプレッドシート専用の関数で、Excelには存在しない
  • JavaScriptで動的に生成されたコンテンツは取得できない
  • 1スプレッドシートあたりIMPORT系関数は合計50個まで
  • 表の取得にはIMPORTHTML関数、CSV取得にはIMPORTDATA関数と使い分ける

まずは =IMPORTXML("好きなURL", "//title") でページタイトルの取得から試してみてください。XPathの基本がわかれば、応用の幅はぐんと広がりますよ。


関連記事

タイトルとURLをコピーしました