効率化ナレッジ

【効率化ナレッジ】特別なツール無しでWebサイトの商品情報をスプレッドシートにインポートする方法

Web マーケティングや広告運用などの仕事では、Web ページ上のデータをチェックしたり、収集する作業が多いですよね。例えば、ブログ記事のタイトルや見出しをチェックしたり、データフィードの更新のために商品ページから価格データを集めるという作業は、単純ながら時間がかかるものです。たくさん作業しているうちに間違うこともあるかもしれません。

この記事ではそんな Web ページからデータを取得したい時に役立つ、「IMPORTXML 関数」について解説します。プログラミング言語を使って一からデータ収集の仕組みを作ったり、専用のツールを使ったりせずに、オンライン環境の Google スプレッドシートと Google Chrome を使ってできる方法なので、気軽にチャレンジしてみてください。

Web ページから簡単にテキスト情報を取得するには?

Web ページからテキスト情報を取得するには、下記のような方法があります。

  • Python などのプログラミング言語でデータを取得するプログラムを作る
  • データ収集専用のツールやサービスを利用する

しかし、どちらの方法も知識や費用など準備の段階でハードルが高く感じられますよね。そこで今回は一番簡単で初めての方でも、比較的チャレンジしやすい IMPORTXML 関数を使った方法を紹介します。必要なものは Google スプレッドシートと Google Chrome だけなので、特別なツールは必要ありません。

IMPORTXML 関数とは

IMPORTXML 関数とは、指定した Web ページのデータを取得できる関数で、Google スプレッドシートで使用できます。この関数は一度設定すれば、 定期的に Web にアクセスして最新のデータを取得します。そのためオンラインの環境であれば、自動的に Google スプレッドシートに記録されます。

IMPORTXML 関数を使う時に必要な情報

IMPORTXML 関数を使うには、URL(データを取得したい Web ページの URL)、Xpath クエリ(ページ上で取得したいデータの位置を指定するもの)、locale(言語コード)の3つの情報が必要です。

IMPORTXML 関数を入力しているスプレッドシート

このような関数を動かす時に必要な情報を引数といいます。引数は、基本的にコンマで区切って入力します。

1つ目の引数は、情報を取得したい Web ページの URL です。今回は例としてこの URL「https://www.kwm.co.jp/blog/excel-shortcut-keys/ 」を使います。URL は「http」などの部分をすべて含んだ状態で使用します。

例えば Google Chrome で Web ページを開いたとき、アドレスバー上では 「kwm.co.jp/」 のようにドメイン部分からしか表示されないこともありますが、アドレスバーをダブルクリックすれば URL の全てを見ることができます。これをコピーして使いましょう。

アドレスバーをダブルクリックして、URL の全てを表示させた状態

数式内では URL を文字列として扱うため、両端をダブルクォーテーション(”)で囲んで入力します。この時点でセルに入力した数式は次のようになります。

=IMPORTXML(“https://www.kwm.co.jp/blog/excel-shortcut-keys/”

IMPORTXML 関数に必要な引数を入れた状態

2つ目の引数は Xpath クエリです。Xpath クエリとは、取得したいデータの Web ページ上での位置を指定できるものです。

そして最後の3つ目の引数は locale です。 locale はデータ取得の際に使用される地域と言語のコードで、この関数の動作に必須ではないオプションの引数です。入力しない時はスプレッドシートの言語設定が使用されるので問題ありません。今回は入力せずに進めます。

Xpath クエリとは?

Xpath クエリとは、 XML や HTML という Web ページを構成しているデータのなかから、必要なデータを探したり特定のデータがある位置を指定するものです。

IMPORTXML 関数に使用する Xpath クエリを取得するには、Google Chrome で、データを取得したい Web ページを開きます。画面右上の三点リーダーから「その他のツール」を選び、「デベロッパーツール」をクリックします。

Google Chrome の三点リーダー > その他のツール > デベロッパーツール

画面右側にデベロッパーツールが表示され、初めは左端の Elements タブで Web ページ のソースコードが表示されています。

Google Chrome の三点リーダー > その他のツール > デベロッパーツール > Elements タブ

次は Elements タブから今回取得したいデータのソースコードを探します。そのためにまずは、デベロッパーツールの左上にある、矢印カーソルのアイコンをクリックします。

Google Chrome の三点リーダー > その他のツール > デベロッパーツール > Elements タブ

矢印カーソルが描かれているアイコンをクリックすると、画面左側の Web ページ上でカーソルを載せた箇所にハイライトが掛かります。その状態で取得したいデータの上にカーソルをあわせることで、画面右側のデベロッパーツール上のソースコードもハイライトされます。

以下は記事のタイトルである、【効率化ナレッジ】新卒1年目で知ってよかった「Excelのショートカットキーまとめ」にカーソルをあわせ、ハイライトされたソースコードを確認しているものです。

Google Chrome の三点リーダー > その他のツール > デベロッパーツール > Elements タブ(クリックで画像拡大)

デベロッパーツール上でソースコードがハイライトされた箇所にマウスオーバーすると、左側に三点リーダーが表示されます。

Google Chrome の三点リーダー > その他のツール > デベロッパーツール

三点リーダーをクリックし、「Copy」の中から「Copy  Xpath」をクリックします。

Google Chrome の三点リーダー > その他のツール > デベロッパーツール > 三点リーダー > Copy > Copy XPath

ここまでの操作で、このWebページのタイトル箇所を表す Xpath「//*[@id=”wrap”]/div[3]/section[1]/div/div[1]/h1」がクリップボード上に取得できました。

IMPORTXML 関数を動かしてみよう

最後に、取得した 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”)

スプレッドシートで IMPORTXML 関数を入力した状態

ここまでの操作で、意図したデータ(今回の例では「【効率化ナレッジ】新卒1年目で知ってよかった「Excelのショートカットキーまとめ」)がセルに出力されたら完成です!

スプレッドシートで IMPORTXML 関数が正常に動いている状態

Xpath 書き換えの手間がかからない方法として、Xpath を別のセルに入力して関数の引数としてセルを参照することができます。このとき XPath はダブルクォーテーションで囲まずに使えるため、 XPath の中身も書き換えが必要ありません。

なお、1つ目の引数(URL)も同様の方法が使えます。下のキャプチャでは、B1セルに1つ目の引数(URL)、C1セルに2つ目の引数(Xpath)を入力しています。A1セルには下記のように、それらを参照する IMPORTXML 関数を入力します。入力した式は以下のようになります。

=IMPORTXML(B1,C1)

別のセルに引数を入力し、そのセルを IMPORTXML 関数の式に入れた状態(クリックで画像拡大)

URLと Xpath を入力しても動かないとき

ここまでの操作で IMPORTXML 関数が動かない場合もあるかもしれません。この関数を使っていると起こりがちなエラーについて、理由と解決方法を紹介するので、関数が動かないときに参考にしてみてください。

IMPORTXML 関数に Xpath を入力しても動かない状態

1. IMPORTXML 関数をいれたセルが「Loading」の表示のまま止まってしまう

IMPORTXML 関数は、Web ページにアクセスすることでデータを取得しています。そのため、使用している関数の数が多くなるとスプレッドシートの処理が重くなることがあります。

関数を入力したばかりの時は、一度「Loading」が表示されたあと、少し待つと取得されたデータが表示されることもあります。しかし、しばらく経ってもデータの取得が完了しないエラーが起きることがあります。

参考:IMPORT 関数について|Google ドキュメント エディタ ヘルプ

使用できる関数の数には制限がありますが、明確な数は示されていないようです。今回は1つのシートに300件の IMPORTXML 関数を使用したところ、そのうちの約100件が「Loading」のエラーで止まってしまいました。

IMPORTXML 関数が「Loading」で止まってしまった状態

このような時は使用している関数を減らすことで、「Loading」で止まっている関数を動かすことができます。関数を減らすために、すでにデータが取得されたセルを選択し、値のみ貼り付けで値データにします。

右クリック > 特殊貼り付け > 値のみ貼り付け

これでセル内は、値のみになった(関数がはいっていない)ので、シート内で動く  IMPORTXML 関数が減り、しばらく待つとエラーだった関数が動くようになります。

2. Google Chrome で取得した Xpath がそのままでは使えないとき

「Loading」ではなく、「#N/A」エラーがでるときは、 Google Chrome のデベロッパーツールで取得した XPath がそのままでは使用できないことが考えられます。この場合は Web ページを構成するデータそのものをチェックして、適切な XPath クエリ を用意する必要があります。

データフィードの更新に IMPORTXML 関数を使ってみよう

今回はデータフィードの更新に使うため、5つの商品ページから価格を取得してみます。対象のページの URL を A 列に入力しました。

取得したいページの URL を記入

価格の部分の XPath を取得する

A1に入力した URL の商品ページから、価格部分の XPath を取得します。Google Chrome で商品ページを開いて、ブラウザ右上の三点リーダーからその他のツール、デベロッパーツールを順でクリックします。

Google Chrome 3点リーダー > デベロッパーツール > その他のツール

デベロッパーツールの左上にある、矢印カーソルのアイコンをクリックしてから、カーソルを価格に合わせるとハイライトされます。同時にデベロッパーツール内のソースコード上の価格の位置にもハイライトがかかります。

Google Chrome 三点リーダー > その他のツール > デベロッパーツール 

該当のソースコードの左上に表示される三点リーダーをクリックし、「Copy」の中から「Copy Xpath」をクリックすると、 XPath が取得できます。

Google Chrome 三点リーダー > その他のツール > デベロッパーツール > 右クリック > Copy Copy XPath

取得できた XPath をB1セルに入力し、C1セルには IMPORTXML 関数を入力します。今回は引数をそれぞれのセルに入力して使用しているので、数式は下記のようになります。

=IMPORTXML(A1,B1)

C1セルに A1セルに入力した URL のページの商品価格が取得されたら成功です。

C1セルに A1セルに入力した URL のページの商品価格が取得された状態

C1セルに入力した数式を残りの2〜5行目にも入れます。同じの XPath を使用するので、2つ目の引数は同じセルを参照します。各商品ページの構造が同じなので、それぞれの URL と同一の XPath で各商品の価格が取得できます。

C2セル以降に入力した URL のページの商品価格が取得された状態

最後に、必要に応じてフィードで使用できる表記にデータを編集します。今回は価格に通貨コードの「JPY」を付けます。

まず、IMPORTXML 関数で取得されたデータを D 列に値貼り付けします。

C 列のデータをコピーし、D 列に値貼り付けをおこなった状態

次に「¥マーク」を「空白」に置換をして、価格を数値だけの状態にします。

D 列に入っている「¥マーク」を「空白」に置換

最後に全ての価格の末尾に「JPY」を付けるため、E1セルに「JPY」と入力し、D 列にある数値と結合するために、F1セルに、「=D1&$E$1」と入力します。

F 列にD列とE列の文字列を結合するために「&」で繋げる

IMPORTXML 関数を使う時に注意すること

これまで説明したように、IMPORTXML 関数はとても便利な関数ですが、注意するべき点もあるので下記を参考にして使用してください。

スクレイピングが禁止されている Web ページがある

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 関数を使って効率的にデータを取得しよう!

IMPORTXML 関数を使えば、Web ページをひとつひとつ開く手間をなくして、かんたんにデータを取得できます。今回例に挙げたデータフィード更新以外にも、Web からデータを集めたいろいろな場面で応用することができるので、ぜひ使ってみてください。

お困りごとはまずはご相談ください。広告に限らず、認知やPRなど幅広い施策提案が可能です。

お困りごとはまずはご相談ください。広告に限らず、認知やPRなど幅広い施策提案が可能です。
コンバージョン数やCPAといった広告の目標達成はもちろんですが、中長期的な事業成長を目的としたマーケティング施策もご支援しています。年商数千万円規模から10億円規模へ、業績向上をご支援した事例もございます。まずはお気軽にご相談ください。

キーマケに相談する

メールアドレスをご登録いただきますと、ブログの更新情報などをお届けいたします。

メールアドレスをご登録いただきますと、ブログの更新情報などをお届けいたします。
「わかりにくいこと」を「わかりやすく」をモットーに、すべての記事を実際に広告運用に関わるメンバー自身が執筆しています。ぜひ無料のメールマガジンに登録して更新情報を見逃さないようにしてください!

メールマガジンの登録はこちら

記事を書いた人

まえだ
まえだ

広告運用 オペレーション

2019年4月に新卒入社。オペレーション業務を通して、本社広告運用担当者のサポートを行う。現在、日々のルーティン業務の効率化を進めるべく、業務と並行してプログラミングを勉強中。趣味はゲームや読書などインドア派。

広告アカウント診断(無料)も実施中
私たちの分析力・提案力をお試しいただけます

広告アカウント診断(無料)も実施中
私たちの分析力・提案力をお試しいただけます

広告アカウント診断(無料)も実施中私たちの分析力・提案力をお試しいただけます