Web マーケティングや広告運用などの仕事では、Web ページ上のデータをチェックしたり、収集する作業が多いですよね。例えば、ブログ記事のタイトルや見出しをチェックしたり、データフィードの更新のために商品ページから価格データを集めるという作業は、単純ながら時間がかかるものです。たくさん作業しているうちに間違うこともあるかもしれません。
この記事ではそんな Web ページからデータを取得したい時に役立つ、「IMPORTXML 関数」について解説します。プログラミング言語を使って一からデータ収集の仕組みを作ったり、専用のツールを使ったりせずに、オンライン環境の Google スプレッドシートと Google Chrome を使ってできる方法なので、気軽にチャレンジしてみてください。
Web ページからテキスト情報を取得するには、下記のような方法があります。
しかし、どちらの方法も知識や費用など準備の段階でハードルが高く感じられますよね。そこで今回は一番簡単で初めての方でも、比較的チャレンジしやすい IMPORTXML 関数を使った方法を紹介します。必要なものは Google スプレッドシートと Google Chrome だけなので、特別なツールは必要ありません。
IMPORTXML 関数とは、指定した Web ページのデータを取得できる関数で、Google スプレッドシートで使用できます。この関数は一度設定すれば、 定期的に Web にアクセスして最新のデータを取得します。そのためオンラインの環境であれば、自動的に Google スプレッドシートに記録されます。
IMPORTXML 関数を使うには、URL(データを取得したい Web ページの URL)、Xpath クエリ(ページ上で取得したいデータの位置を指定するもの)、locale(言語コード)の3つの情報が必要です。
このような関数を動かす時に必要な情報を引数といいます。引数は、基本的にコンマで区切って入力します。
1つ目の引数は、情報を取得したい Web ページの URL です。今回は例としてこの URL「https://www.kwm.co.jp/blog/excel-shortcut-keys/ 」を使います。URL は「http」などの部分をすべて含んだ状態で使用します。
例えば Google Chrome で Web ページを開いたとき、アドレスバー上では 「kwm.co.jp/」 のようにドメイン部分からしか表示されないこともありますが、アドレスバーをダブルクリックすれば URL の全てを見ることができます。これをコピーして使いましょう。
数式内では URL を文字列として扱うため、両端をダブルクォーテーション(”)で囲んで入力します。この時点でセルに入力した数式は次のようになります。
=IMPORTXML(“https://www.kwm.co.jp/blog/excel-shortcut-keys/”
2つ目の引数は Xpath クエリです。Xpath クエリとは、取得したいデータの Web ページ上での位置を指定できるものです。
そして最後の3つ目の引数は locale です。 locale はデータ取得の際に使用される地域と言語のコードで、この関数の動作に必須ではないオプションの引数です。入力しない時はスプレッドシートの言語設定が使用されるので問題ありません。今回は入力せずに進めます。
Xpath クエリとは、 XML や HTML という Web ページを構成しているデータのなかから、必要なデータを探したり特定のデータがある位置を指定するものです。
IMPORTXML 関数に使用する Xpath クエリを取得するには、Google Chrome で、データを取得したい Web ページを開きます。画面右上の三点リーダーから「その他のツール」を選び、「デベロッパーツール」をクリックします。
画面右側にデベロッパーツールが表示され、初めは左端の Elements タブで Web ページ のソースコードが表示されています。
次は Elements タブから今回取得したいデータのソースコードを探します。そのためにまずは、デベロッパーツールの左上にある、矢印カーソルのアイコンをクリックします。
矢印カーソルが描かれているアイコンをクリックすると、画面左側の Web ページ上でカーソルを載せた箇所にハイライトが掛かります。その状態で取得したいデータの上にカーソルをあわせることで、画面右側のデベロッパーツール上のソースコードもハイライトされます。
以下は記事のタイトルである、【効率化ナレッジ】新卒1年目で知ってよかった「Excelのショートカットキーまとめ」にカーソルをあわせ、ハイライトされたソースコードを確認しているものです。
デベロッパーツール上でソースコードがハイライトされた箇所にマウスオーバーすると、左側に三点リーダーが表示されます。
三点リーダーをクリックし、「Copy」の中から「Copy Xpath」をクリックします。
ここまでの操作で、このWebページのタイトル箇所を表す Xpath「//*[@id=”wrap”]/div[3]/section[1]/div/div[1]/h1」がクリップボード上に取得できました。
最後に、取得した Xpath を数式内に入力します。URL と同様に数式内では Xpath を文字列として扱うため、両端をダブルクォーテーション(”)で囲みましょう。下記のような数式になります。
=IMPORTXML(“https://www.kwm.co.jp/blog/excel-shortcut-keys/”,”//*[@id=”wrap”]/div[3]/section[1]/div/div[1]/h1”)
今の状態では、Xpath の初めに付けた「”」と、Xpath の中に含まれている1つ目の「”」の間にある文字列が Xpath と認識されてしまい、実際の Xpath が途切れて動きません。このような場合には Xpath の中に含まれているダブルクォーテーション(”)を、シングルクォーテーション(’)に書き換えます。
この変更で Xpath 自体には影響がなく、Xpath の両端に付けたダブルクォーテーションが正常に機能するようになるため、エラーが解消されます。 これまでの手順をおこなった数式は下記のようになります。
=IMPORTXML(“https://www.kwm.co.jp/blog/excel-shortcut-keys/”,”//*[@id=’wrap’]/div[3]/section[1]/div/div[1]/h1”)
ここまでの操作で、意図したデータ(今回の例では「【効率化ナレッジ】新卒1年目で知ってよかった「Excelのショートカットキーまとめ」)がセルに出力されたら完成です!
Xpath 書き換えの手間がかからない方法として、Xpath を別のセルに入力して関数の引数としてセルを参照することができます。このとき XPath はダブルクォーテーションで囲まずに使えるため、 XPath の中身も書き換えが必要ありません。
なお、1つ目の引数(URL)も同様の方法が使えます。下のキャプチャでは、B1セルに1つ目の引数(URL)、C1セルに2つ目の引数(Xpath)を入力しています。A1セルには下記のように、それらを参照する IMPORTXML 関数を入力します。入力した式は以下のようになります。
=IMPORTXML(B1,C1)
ここまでの操作で IMPORTXML 関数が動かない場合もあるかもしれません。この関数を使っていると起こりがちなエラーについて、理由と解決方法を紹介するので、関数が動かないときに参考にしてみてください。
IMPORTXML 関数は、Web ページにアクセスすることでデータを取得しています。そのため、使用している関数の数が多くなるとスプレッドシートの処理が重くなることがあります。
関数を入力したばかりの時は、一度「Loading」が表示されたあと、少し待つと取得されたデータが表示されることもあります。しかし、しばらく経ってもデータの取得が完了しないエラーが起きることがあります。
参考:IMPORT 関数について|Google ドキュメント エディタ ヘルプ
使用できる関数の数には制限がありますが、明確な数は示されていないようです。今回は1つのシートに300件の IMPORTXML 関数を使用したところ、そのうちの約100件が「Loading」のエラーで止まってしまいました。
このような時は使用している関数を減らすことで、「Loading」で止まっている関数を動かすことができます。関数を減らすために、すでにデータが取得されたセルを選択し、値のみ貼り付けで値データにします。
これでセル内は、値のみになった(関数がはいっていない)ので、シート内で動く IMPORTXML 関数が減り、しばらく待つとエラーだった関数が動くようになります。
「Loading」ではなく、「#N/A」エラーがでるときは、 Google Chrome のデベロッパーツールで取得した XPath がそのままでは使用できないことが考えられます。この場合は Web ページを構成するデータそのものをチェックして、適切な XPath クエリ を用意する必要があります。
今回はデータフィードの更新に使うため、5つの商品ページから価格を取得してみます。対象のページの URL を A 列に入力しました。
A1に入力した URL の商品ページから、価格部分の XPath を取得します。Google Chrome で商品ページを開いて、ブラウザ右上の三点リーダーからその他のツール、デベロッパーツールを順でクリックします。
デベロッパーツールの左上にある、矢印カーソルのアイコンをクリックしてから、カーソルを価格に合わせるとハイライトされます。同時にデベロッパーツール内のソースコード上の価格の位置にもハイライトがかかります。
該当のソースコードの左上に表示される三点リーダーをクリックし、「Copy」の中から「Copy Xpath」をクリックすると、 XPath が取得できます。
取得できた XPath をB1セルに入力し、C1セルには IMPORTXML 関数を入力します。今回は引数をそれぞれのセルに入力して使用しているので、数式は下記のようになります。
=IMPORTXML(A1,B1)
C1セルに A1セルに入力した URL のページの商品価格が取得されたら成功です。
C1セルに入力した数式を残りの2〜5行目にも入れます。同じの XPath を使用するので、2つ目の引数は同じセルを参照します。各商品ページの構造が同じなので、それぞれの URL と同一の XPath で各商品の価格が取得できます。
最後に、必要に応じてフィードで使用できる表記にデータを編集します。今回は価格に通貨コードの「JPY」を付けます。
まず、IMPORTXML 関数で取得されたデータを D 列に値貼り付けします。
次に「¥マーク」を「空白」に置換をして、価格を数値だけの状態にします。
最後に全ての価格の末尾に「JPY」を付けるため、E1セルに「JPY」と入力し、D 列にある数値と結合するために、F1セルに、「=D1&$E$1」と入力します。
これまで説明したように、IMPORTXML 関数はとても便利な関数ですが、注意するべき点もあるので下記を参考にして使用してください。
IMPORTXML 関数は Web ページにアクセスする関数です。たくさんの関数を設定すればその分サーバーにアクセスが発生し、負担をかけます。そのため、スクレイピングを禁止しているサイトや Web サービスがあります。必ず利用規約などを確認してから実施するようにしましょう。
一度 IMPORTXML 関数を設定しても、時間が経過するとデータ取得対象の URL やページの構造が変更されて、うまく動かなくなることがあります。そのような時はこれまで紹介した手順を使って数式を修正しましょう。
同じ Web ページを長い間チェックしたい時など、後から修正が必要になるときは、関数に直接引数を入力せずに、別セルに引数を入力してから、関数でそのセルを指定するやり方が管理しやすくておすすめです。
例えば、A1には「IMPORTXML(B1,C1)」と入力し、B1に情報を取得したいページの URL を、C1には XPath を入力するイメージです。このような入力方法であれば、URL や XPath の変更があっても、関数を直接変更しないで、対象のセルの情報のみ修正すれば正常に動くようになります。
IMPORTXML 関数は1時間毎に自動的に Web ページにアクセスし、最新のデータを取得していますが、更新されるタイミングが明確にはわかりません。ヘルプページには下記のように記載されています。
ユーザーがドキュメントを開いている間、この3つの関数は1時間ごとに自動的に更新を確認します。数式とシートが変更されていない場合でも、確認します。
引用元:Googleドキュメント エディタ ヘルプ IMPORT 関数について
スプレッドシートを見る直前に Web 上のデータが更新されていた場合、スプレッドシート上のデータが最新ではない可能性もあります。確実に現時点のデータを取得したい時には、そのセルをコピーして「数式のみ貼り付け」をして、同じ数式で上書きしましょう。数式が再更新されます。
IMPORTXML 関数を使えば、Web ページをひとつひとつ開く手間をなくして、かんたんにデータを取得できます。今回例に挙げたデータフィード更新以外にも、Web からデータを集めたいろいろな場面で応用することができるので、ぜひ使ってみてください。
広告運用 オペレーション
2019年4月に新卒入社。オペレーション業務を通して、本社広告運用担当者のサポートを行う。現在、日々のルーティン業務の効率化を進めるべく、業務と並行してプログラミングを勉強中。趣味はゲームや読書などインドア派。
あなたの広告アカウントを無料診断します
広告アカウント診断詳細なお見積りをご希望の方はこちら
お問い合わせ支援事例などをまとめたサービス紹介資料はこちら
サービス資料のダウンロードはこちら