webスクレイピングと言えばPythonやGASがよく使われますが、実はxpathを使った簡単なスクレイピングなら「IMPORTXML」というスプレッドシート関数1つでできる場合もあります。
当記事では、
- IMPORTXML関数とは何か
- IMPORTXML関数の使い方
- IMPORTXML関数でエラーが起きたときの対処法
について解説します。
IMPORTXML関数とは?
IMPORTXML関数とは、Googleスプレッドシートにデフォルトで備わっている関数で、Webサイト上にある任意の箇所のデータを取得できる関数です。
スプレッドシートだけでWebスクレイピングをしたい場合には、IMPORTXML関数を使いましょう。
EXCELにはない超便利な関数
IMPORTXML関数は、EXCEL(エクセル)では使うことができない関数です。
EXCELで「=IMPORTXML(〜〜〜)」と打ち込んでも、エラーが返ってきてしまいます。
現在EXCELをメインで運用していて、IMPORTXMLのような機能を使いたい場合は、VBAやマクロの機能を使うか、これを期にEXCELからスプレッドシートに乗り換えるしかなさそうです。
URLとxpathでスクレイピング
後ほど使い方については詳しく解説しますが、IMPORTXML関数は「URL」と「xpath」という2つの引数を使って、Webサイトのデータを取得します。
URLはみなさんご存知かと思いますが、xpathについては詳しくない人も多いでしょう。
xpathはWebサイトにおけるXML path Language(xpath)の略なのですが、これが何なのかは知らなくて大丈夫なので、このxpathを取得する方法だけ覚えてください。
Webサイトでxpathを取得する方法
Webサイト上でxpathを取得するには、下記3つの手順を踏む必要があります。
- Chromeで開発者モードを開く
- スクレイピングしたい箇所でxpathをコピーする
- ペーストしてxpathが取得できているか確認する
それぞれの手順について解説します。
Chromeで開発者モードを開く
Chromeの開発者モードを開くには、上図のようにオプションから「検証」をクリックします。
また、下記のショートカットキーを使えば、キーボード操作のみで開発者モードを開くことができます。
- Mac・・・「Command」 + 「Shift」 + 「C」
- Windows・・・「Ctrl」 + 「Shift」 + 「C」
スクレイピングしたい箇所でxpathをコピーする
続いて、上図のようにスクレイピングしたい箇所を見つけたら再びオプションを開いて、「Copy」 > 「Copy XPath」をクリック。
これでxpathがコピーできたはずです。
ペーストしてxpathが取得できているか確認する
最後に、きちんとxpathがコピーできているかを確認します。
確認方法は普通にどこかにペーストすれば良いのですが、ぼくはめんどくさいのでいつも上図のようにブラウザの検索窓で確認しています。
問題なく貼り付けられていたら、xpathの取得は完了です。
IMPORTXML関数の使い方
さて、いよいよIMPORTXML関数の使い方について解説します。
IMPORTXML関数は、以下の構文で動作します。
関数自体はシンプルな構造で、とても簡単です。
ただこれだけだと動作をイメージしずらいと思うので、動作例をいくつか紹介します。
動作例①titleタグをスクレイピング
=IMPORTXML(URL,"//title")
titleタグをスクレイピングする方法です。
xpathで「//title」と指定するだけでOKなので、とても簡単ですね。
当ブログのトップページをスクレイピングした結果を下記に示します。
実行結果
動作例②twitterのフォロワー数をスクレイピング
=IMPORTXML(
"https://twitter.com/[アカウントID]",
"//a[@data-nav='followers']/span[3]/@data-count"
)
twitterのフォロワー数をスクレイピングする方法です。
自分のアカウント、他人のアカウント、どちらでもスクレイピングできます。
ライバルアカウントのモニタリングなどに使えそうですね。
私monoのtwitterアカウントをスクレイピングした結果を下記に示します(雑魚とは言わないでください)。
実行結果
動作例③サジェストKWをスクレイピング
=IMPORTXML(
"https://www.google.com/complete/search?hl=en&output=toolbar&q=[キーワード]",
"//suggestion/@data"
)
Googleの検索結果から、サジェストキーワードをスクレイピングする方法です。
サジェストキーワードをスクレイピングできたら、ブログの記事を書くときなどに参考にできそうですね。
「効率化」で指定したときのサジェストキーワードのスクレイピング結果を下記に示します。
実行結果
IMPORTXML関数でエラー・トラブルが起きたら?
IMPORTXML関数は特殊な関数ということもあり、使っているとエラーやトラブルに遭遇することがあります。
ここからはよくあるエラー・トラブルへの対処法について解説します。
「URLを取得できませんでした」と表示される
せっかくURLとxpathを指定したのに、「URLを取得できませんでした」と表示され、エラーになってしまうパターンです。
このエラーの原因は明確で、指定したURL(Webサイト)が存在しないの原因です。
解決法としては、おそらく入力したURLのどこかが間違っているので、もう一度確認してみると良いでしょう。
IMPORTXML関数の更新頻度が遅い
IMPORTXML関数の更新が遅い、リアルタイムで更新されないというトラブルをよく耳にします。
まず前提として、IMPORTXML関数の更新頻度は2時間ずつとなっています。リアルタイムでの更新は関数の仕様上できないようになっているので、その点は認識しておきましょう。
その上で2時間経っても更新されない場合は、スプレッドシートを再読み込みしてみましょう。詳しい原因はわかりませんが、何らかの理由で関数の更新が反映されていないことがあるので、再読み込みでファイルを最新の状態に更新すれば解決します。
まとめ
今回は「IMPORTXML関数とは何か」「IMPORTXML関数の使い方」「IMPORTXML関数でエラーが起きたときの対処法」について解説しました。
IMPORTXML関数は他の関数と毛色が違うので、最初は少し戸惑うかもしれません。しかしそれを上回るメリットがIMPORTXML関数にはあるます。
まずはサンプルコードそのままでも良いので、IMPORTXML関数を使ってみてください。
動くとわかっていても、実際に自分のスプレッドシートで動くと嬉しいものです。
では、また。