「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系関数が用意されています。目的に応じて使い分けましょう。
| 関数 | 取得対象 | 用途例 |
|---|---|---|
| IMPORTXML | XPathで指定した要素 | Webページの特定要素をピンポイントで取得 |
| IMPORTHTML | HTMLのtable / list | Webページの表やリストをまるごと取得 |
| IMPORTDATA | CSV / TSVデータ | 公開されているCSVファイルを取得 |
| IMPORTFEED | RSS / 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の基本がわかれば、応用の幅はぐんと広がりますよ。
