スプレッドシートの使い方-IMPORTXML関数でWebサイトの情報を取得(スクレイピング)する方法

Webサイトの情報を抜き出したいときに、何度もコピーや加工せずに、一度に抜き出せたら良いなーって思いますよね。
そんな楽をしたい方に、Googleスプレッドシートを使ってWebサイトの情報を取得する方法を紹介します。

Webサイトの情報を取得するには、スプレッドシートのIMPORTXML関数が便利

それでは、具体的な手順を説明していきます。

  1. Googleスプレッドシートにログインします。
    https://docs.google.com/spreadsheets/
  2. 「新しいスプレッドシートを作成」の「空白」をクリックして、新しいスプレッドシートを作成します。
  3. 次のように入力します。セルの色は白のままで構いません。

    B1セル:https://msr036.com/
    B4セル:=IMPORTXML(B1, B2)

今回は具体例として、私のブログの記事タイトルを取得するため、URLには私のブログのURLを入力しておきます。

Webサイトの情報を取得するには、IMPORTXML関数を使います。

IMPORTXML関数の構文
IMPORTXML(URL, XPath)
ドキュメント エディタ ヘルプ(Google Support)より

XPathとは、HTMLの中の位置を示す情報のことです。
IMPORTXML関数でWebサイトの情報を取得するには、XPathが重要になります。

IMPORTXML関数のXPathを簡単に取得する方法

XPathを取得するには、Google Chrome の「デベロッパーツール」が便利です。
Internet Explorer でも「開発者ツール」という類似のツールがあるのですが、機能が乏しいので、Google Chrome がおすすめです。

それでは、具体的な手順を説明していきます。

  1. Google Chrome でXPathを取得するページを開きます。
    今回は、私のブログのトップページです。
  2. デベロッパーツールを起動します。
    Windowsは F12キー、Macの場合は Command+Option+iキーを押します。
  3. 「□にカーソルが重なっているマーク」をクリックします。
  4. 直後に、取得したい情報の箇所をクリックすると、該当するHTMLソースコードの箇所が反転します。
    今回は記事タイトルなので、1記事目のタイトルをクリックしましょう。
  5. HTMLソースコードの反転した箇所にマウスカーソルを合わせて、右クリックメニューから「Copy>Copy XPath」を選択します。

ここでGoogleスプレッドシートに戻ります。

B2セルにコピーしたXPathを貼り付けると、次のような文字列が入力されます。

//*[@id="main"]/div/article[1]/a/section/h1

さらに「”(ダブルクォーテーション)」を「’(シングルクォーテーション)」に置き換えます。

//*[@id='main']/div/article[1]/a/section/h1

すると、B4セルに1記事目のタイトルが表示されるはずです。

・・・ですが、私のブログのページ構造では、うまく取得できないようです(このようなことは、時々あります)。

そこで、B2セルのXPathを次のように書き換えます。

//h1[@class='h2 entry-title']

するとどうでしょう。全記事のタイトルを取得することができました。

ちょっとレベルの高い話(難しいと思ったら先に進んでくださいね)
XPathの[]で囲まれた数字は、対象が複数あることを示しています。
2記事目なら[2]、3記事目なら[3]、・・・というように表記されます。

もし1記事目だけでなく表示されている全記事のタイトルを取得したい場合は、

//*[@id='main']/div/article[1]/a/section/h1
//*[@id='main']/div/article[2]/a/section/h1
・・・

のように関数とXPathを複数使うのも良いですが、HTMLとXPathの知識が少しあれば、今回のように1行で取得することもできます。

//h1[@class='h2 entry-title']

このXPathは『タグ名「h1」のうち、class属性が「h2 entry-title」という名前のもの』という意味です。
XPathの書き方については「XPath」で検索すると詳しく調べることができます。

スプレッドシートには、まだまだ活用できる余地がたくさんある

GoogleスプレッドシートにWebサイトの情報を取得することができました。
あのサイトのこんな情報を抜き出したい・・・と発想は広がりますね。

でも今のままだと、Webサイトの情報を取得するためには、毎回スプレッドシートを開く必要があります。
もし自動でWebサイトの情報を取得できたら、もっとうれしいですよね。

その方法については、また次回にご紹介したいと思います。