【簡単】スプレッドシートのIMPORTXML関数でスクレイピング!実例7個

こんにちは、いろんな効率化が大好きなたぬ(@tanuhack)です!

通常、Web上から目当ての情報を取得するときって、目当てのサイトに直接訪れて、情報を手動でGETすると思うんですよね。

今回紹介する『スクレイピング』という技を使えば、なんと、Webサイトに訪れなくても情報を自動でGETすることができます!!!

つまり、PCが決められたルールに従って、勝手に情報を集めて来てくれるという訳です。

本格的なスクレイピングは、高度なプログラミングを要しますが、簡単なスクレイピングであれば、スプレッドシートに用意されている『IMPORTXML』という関数だけで実現することができます。

そこで今回は、IMPORTXML関数を使ったスクレイピングの方法と、実例を7個紹介します!

注意
注意
スクレイピングはサイトによって、禁止されているところもあるので自己責任でお願いします。

IMPORTXMLの使い方

構文
=IMPORTXML(URL, XPathクエリ)

『情報をあつめたいURL』『どの階層の情報を引き抜くか』を数式に記入するだけです。

たとえば、このサイト(https://tanuhack.com/)のタイトルを取得したいとします。

たぬハックのタイトルを取得する
=IMPORTXML("https://tanuhack.com/", "//title")

importxml-scraping1

これだけです!たったこれだけで、タイトルを取得することができます!(※IMPORTXMLの値は、2時間毎に更新)

この例では、"//title"の部分がXPathクエリです。

次に、IMPORTXML関数の肝であるXPathについて紹介します。

XPathについて

XPathとは
XPathとは、XML文章中の要素、属性値などを指定するための言語です。

XPathを使うとHTML文章の中から、さまざまな情報を取得することが出来るようになります。

XPathについて書くとそれだけで記事になってしまうので、割愛します。あしからず。

[aside]下のサイトに詳しくまとめてあったので、XPathについてもっと深く勉強したい方はどうぞ

クローラ作成に必須!XPATHの記法まとめ

[/aside]

でも、ご安心下さい。XPathの記法を知らなくても、Chromeの機能を使えば、難しいXPathの記法を知らなくても、瞬時にXPathを取得することが出来るんですよ!すごいね、Google!

Copy XPath

今回は先程お見せした『たぬハックのタイトルを取得』する作業を実際にお見せしたいと思います。

この方法は、この例にとどまらず、ほぼ全てのWebサイトで有効な手段です。

GIFアニメも用意したので、導入も簡単だと思います!それではどうぞ。

STEP1:Chromeの開発者ツールを開く

importxml-scraping2

手順
  1. 設定「︙」を選択
  2. その他のツールを選択
  3. ディベロッパーツールを選択

または、ショートカットキーを使って呼び出してもいいでしょう。

chromeのショートカットキー
  • Mac:+option+I
  • Windows:Ctrl+Shift+Iもしくは、F12

Webに携わる仕事をされている方であれば、開発者ツールを呼び出す機会はよくあると思います。

毎回毎回ポチポチと、設定から開くのではなく、ショートカットキーで瞬時に呼び出した方がスマートでかっこいいです。

STEP2:XPathを取得したい要素を選択

importxml-scraping6

開発者ツールから上の写真のアイコンを選択して、Webページのタイトルを直接選択します。

importxml-scraping3

開発者ツールのショートカットキー
  • Mac:+Shift+C
  • Windows:Ctrl+Shift+C

ショートカットキーも用意されています。

下図のように、右側にあるHTML部分がタイトルの1行だけ選択されていればOKです。

importxml-scraping4

STEP3:[Copy]→[Copy Xpath]を選択

importxml-scraping5

そのまま、[右クリック]→[Copy]→[Copy Xpath]と選択します。

//*[@id="logo"]/p/a

このようなXPathがコピーされていれば成功です!

簡単に説明すると、「HTMLのidがlogoのPタグのAタグの中身を表示します」みたいな感じのことが書いてあります。

ChromeのCopy XPath機能をつかって色んなサイトでスクレイピングしてみましょう!

スクレイピングの実例7個

ここからはIMPORTXML関数を使って、スクレイピングができる汎用性がきっと高いだろうと思われるものを私の独断と偏見で7つ選んでみました。

それぞれ、XPathを記載しているので、コピペでじゃんじゃん使ってください。

  1. ページのタイトルを取得
  2. ページのディスクリプションを取得
  3. ページのキーワードを取得
  4. Twitterのフォロワー数を取得
  5. Instagramの情報を取得
  6. Googleの検索結果を取得
  7. Googleのサジェストを取得

ページのタイトルを取得

importxml-scraping10

titleタグのコンテンツを取得します。

数式
=IMPORTXML("URL","//title")

2018年7月14日現在、ほとんどのサイトがHTML5で作られています。

2000年代初期に作られた化石のようなWebサイト以外は、この記述だけでスクレイピングすることができるはずです。

ページのディスクリプションを取得

importxml-scraping11

サイトの要約文であるmetaタグのディスクリプションを取得します。

数式
=IMPORTXML("URL","//meta[@name='description']/@content")

ページのキーワードを取得

importxml-scraping12

metaタグのキーワードを取得します。

数式
=IMPORTXML("URL","//meta[@name='keywords']/@content")

Twitterのフォロワー数を取得

Twitterのフォロワー数もIMPORTXML関数で引っ張ってこれます。

数式
=IMPORTXML("https://twitter.com/[アカウント名]","//a[@data-nav='followers']/span[3]/@data-count")

Instagramの情報を取得

importxml-scraping13

数式
=IMPORTXML("https://www.instagram.com/[アカウント名]","//meta[@name='description']/@content")

フォロワー数やフォロー数、投稿数などを個別に持ってくることが出来ないので、スプレッドシートの関数を使って表示を整えなければいけません。

(例)InstagramをIMPORTXMLで取得できる値
89 Followers, 71 Following, 22 Posts - See Instagram photos and videos from
Kenta Taniguchi (@tanukenta)

例えば、この情報がC2セル入っているとすれば…

importxml-scraping8

正規表現が使えるREGEXEXTRACT関数で、文字列の中から必要な情報だけ取り出しましょう!

フォロワー数 =REGEXEXTRACT(REGEXEXTRACT(C2,"\d+\sFollowers"),"\d*")
フォロー数 =REGEXEXTRACT(REGEXEXTRACT(C2,"\d+\sFollowing"),"\d*")
投稿数 =REGEXEXTRACT(REGEXEXTRACT(C2,"\d+\sPosts"),"\d*")
知らないと損!正規表現を使ってスプレッドシートの文字列を便利に抽出する方法 [aside]補足

TwitterやInstagramのHTMLのソースを確認すると、JavaScriptでコードが隠されています。

記事数だったり、記事毎のイイネ数やコメント数/内容、投稿時間など引っ張ってくるにはPythonやRubyなどのプログラムでゴリゴリ書かなければいけません(汗)

[/aside]

Googleの検索結果を取得

importxml-scraping14

IMPORTXML関数を使えば、なんとGoogleの検索結果も表示することができます。

競合のリサーチや、SEO対策に使えますね!

数式
=IMPORTXML("http://www.google.co.jp/search?hl=jp&gl=JP&q="&[キーワード],"//div[@id='res']//h3[@class='r']/a/@href")

これとタイトルとディスクリプション、キーワードを組み合わせれば、SEO対策における競合分析のシートをサクッと作ることが出来ます。

importxml-scraping9

補足になりますが、URLパラメータの部分にnum=30のように追加すれば、そのキーワードにおける1位から30位までのサイトが表示されるようになります。

  • Before:=IMPORTXML("http://www.google.co.jp/search?hl=jp&gl=JP&q="&[キーワード],"//div[@id='res']//h3[@class='r']/a/@href")
  • After:=IMPORTXML("http://www.google.co.jp/search?hl=jp&gl=JP&num=30&q="&[キーワード],"//div[@id='res']//h3[@class='r']/a/@href")
  • Googleのサジェストを取得

    importxml-scraping15

    IMPORTXML関数を使えば、検索補完のサジェストも取得することができます。

    次に書く記事候補を見つけたいときにおすすめです(^o^)

    数式
    =IMPORTXML("http://www.google.com/complete/search?hl=en&output=toolbar&q="&[キーワード],"//suggestion/@data")

    さいごに

    今回は、IMPORTXML関数でスクレイピングする方法を紹介しました。

    IMPORTXML関数を使えば、PythonやRubyなどのプログラミングスキルを持たなくても、簡単なスクレイピングなら実行可能です。

    スクレイピングを体験して、『機械に仕事をさせてる感覚』を覚えて欲しいなと思います!!

    その経験こそが、効率厨にハマる沼でもあるのです。

    人間がわざわざ手を下すほどでもない単調な作業は、どんどん機械にやらせよう。

    [aside]この記事もオススメです
    Excelからスプレッドシートに今すぐ乗り換えよう
    スプレッドシートがExcelより優れている5つの理由!今すぐ移行しよう [/aside]