スプレッドシートの使い方

【スプレッドシート】ImportXML関数の使い方・スクレイピング例6つ

Webスクレイピングを行いたいと考えたときに、スプレッドシートのImportXML関数が役に立ちます。

このページでは、ImportXML関数の使い方と使用例、またよくあるエラーの原因と対処法について解説していきます。

ImportXML関数の基本的な使い方

=ImportXML(URL, XPath)
URL スクレイピングしたいサイトのURL
XPath HTMLの特定箇所を指定する文

XPath関数の更新頻度は2時間ごとです。要するに、2時間ごとに指定したURLページの情報を取得しにいく、という意味です。

XPathとは

XPathが何かを具体例で理解しましょう。

<html>

<head>
<title>タイトル</title>
</head>

<body>
コンテンツ
</body>

<footer>
フッター
</footer>
</html>

例えば上記のようなHTMLがあった場合に、タイトルの箇所を指定すると、次のようなXPathになります。

/html/head/title
//title

1行目、2行目とも同じくタイトルを指定しているXPathです。「//」によってパスを省略できます。

XPathはこのように、複雑なHTMLの中の特定の個所を指定することに役立ちます。よりXPathを勉強したい方はこちらを参考にしてみてください。

ページ:XPATHの記法まとめ

使い方例:サイトタイトルの取得

先ほど紹介したタイトル個所を指定するXPathとImportXML関数を使用してこの記事のタイトルを取得してみます。

=ImportXML("サイトURL", "//title")

※サイトのHTML構造によっては、上記で取得できない可能性もあります。

importxmlでタイトルを取得

Importxmlの使用例

例1:Tableを取得

今回はビットコインの現在の日本円価格をCoinGeckoというサイトから、ImportXML関数を使ってスクレイピングしてみます。

importxmlでビットコイン価格をスクレイピング

ビットコイン情報のtableの中にある、ビットコイン価格のXPathは「//tr[1]/td/span[@class=’currency-exchangeable’]」になるので、ImportXML関数を使用すると次のようにスクレイピングできます。

=IMPORTXML(A1,"//tr[1]/td/span[@class='currency-exchangeable']")

ビットコインをスクレイピングするimportxml関数

例2:サジェストを取得

そもそも「サジェスト」とは、Googleの検索窓に単語を入れたときに出てくる関連ワードです。サジェストはよく一緒に検索されているワードを出力しています。

サジェストとは

サジェストを出力するためには、実際に特定の単語を検索したときのサジェストページを指定し、そのXML内のサジェストデータをXPath指定します。具体的には次のようにImportXML関数を使用すると、サジェストを取得できます。

=ImportXML("http://www.google.com/complete/search?hl=en&output=toolbar&q="&A1,"//suggestion/@data")

importxmlでサジェストを取得

例3:検索結果を取得

Googleの検索結果1ページ目のサイトも、ImportXML関数でスクレイピングすることができます。

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

importxmlでGoogle検索結果を取得

例4:amazonのタイトルを取得

A1にamazonの商品ページのURLを入力すると、次のImportXML関数で、Amazonページのタイトルを取得できます。

=IMPORTXML(A1,"//title")

スクリーンショット 2018-06-30 19.37.03

例5:Twitterのフォロワー数取得

ImportXML関数を使って、Twitterのフォロワー数を自動的に取得しています。

=IMPORTXML(A1,"//a[@data-nav='followers']/span[@class='ProfileNav-value']")

importxml関数でtwitterフォロワー数取得

例6:インスタグラムのアカウント情報を取得

ImportXML関数を使って、インスタグラムのアカウント情報を取得すると次のようになります。フォロワー数や投稿数がテキストとして羅列されてしまうので、置換する関数などを用いて、上手に取り出しましょう。

=IMPORTXML(A1,"//meta[@name='description']/@content")

importxml関数でインスタのアカウント情報を取得