・WEBページに掲載されている価格データをGoogleスプレッドシートで参照したい
・HTMLドキュメントの表をGoogleスプレッドシートにインポートしたい
WEBページに掲載されている記事や数値データ、商品の比較表などをGoogleスプレッドシートにインポートしたいと思ったことは有りませんか?
ただの記事なら、コピー&ペーストで問題にならないかもしれませんが、価格や商品リストなど、内容が変動する可能性があるものに関しては、ドキュメントを参照したいところ。
Googleスプレッドシートにはツリー構造ドキュメントを参照しデータをインポートする関数があり、これを使えばHTMLからデータのインポートも可能なはず。
この記事では、ツリー構造ドキュメントを参照する関数を使って、WEBページなど指定したURLのHTMLドキュメントを参照し、Googleスプレッドシートにデータをインポートする方法を紹介します。
|
GoogleスプレッドシートにURLを指定してHTMLからデータをインポートする
GoogleスプレッドシートでURLを指定したHTMLドキュメントのデータをインポートするには、次の関数を使用します。
IMPORTXML関数
IMPORTXML関数は、XMLやHTML、そしてCSV、TSV、RSS フィード、などのツリー構造のドキュメントから、データの参照ができる関数です。
使い方も簡単で、IMPORTXML関数にURLとツリー構造ドキュメントの参照パス[XPath ]を指定するだけ。
IMPORTXML(URL, XPath)
URLにHTMLドキュメントのアドレス、XPathに参照したい箇所のタグ等を示す構文を指定すれば、HTMLからデータをインポートできそう。
XPath (XML Path Language)をGoogle Chromeで調べる
HTMLドキュメントのアドレスは理解できるとして「XPath」って何?
XPath (XML Path Language)とは、XMLやHTMLなど、ツリー構造で書かれたドキュメントの要素(<h1>,<div>)や属性(class , id)などを、
「“//a/@href”」や「”/html/body/div[2]/div[4]/div[5]/div[5]/div[4]/div[7]”」の様に示す構文です。
簡単に言うとツリー構造ドキュメント内のアドレスを示す事ができ、例えばHTMLドキュメントに書かれた価格データのテキストを取得したいと思ったら、そのデータが書かれている箇所を示すXPathを指定して参照する。
それが XPath (XML Path Language) です。
■Google ChromeでXPathを確認
XPath の役割は分かりました。では、XPath 自体はどうやって確認したら良いの?
HTMLドキュメントのXPathは、HTMLを表示するWEBブラウザで簡単に確認する事ができます。
Microsoft EdgeやFirefoxなど様々なWEBブラウザでXPathの確認はできますが、今回はGoogle ChromeでXPathを確認・取得する方法を紹介。
1)Google ChromeでHTMLドキュメントを表示
2)F12キー又は、Google Chromeの設定 > その他のツール > デベロッパーツール をクリック
デベロッパーツールに表示されるHTMLから目的の箇所を探します。
例ではAmazon.co.jpの商品ページの、[商品タイトルのテキスト]が書かれている箇所を探し選択、
右クリックメニューから、Copy > Copy XPath をクリック。
(Copy full XPath でも問題有りませんが、記述が長くなるので拘りがなければ Copy XPathで良いかと)
Copy XPathをクリック後にテキストアプリ等にペースト。
HTMLドキュメントから[商品タイトルのテキスト]が書かれた箇所を示すXPathが取得できました。
//*[@id="title"]
IMPORTXML関数にURLとXPath クエリを指定してデータをインポート
それでは、IMPORTXML関数にURLと取得したXPathを指定して、スプレッドシートに選択箇所[商品タイトルのテキスト]をインポートしてみましょう。
IMPORTXML(URL, XPath)
IMPORTXML関数の使い方は、第1引数に”https://”を含むURLを「””」で囲んで指定、第2引数にXPathをこちらも「””」で囲んで指定します。
=IMPORTXML("https://www.amazon.co.jp/Adobe-Creative-Cloud-%E3%82%B3%E3%83%B3%E3%83%97%E3%83%AA%E3%83%BC%E3%83%88-%E3%82%AA%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89%E7%89%88/dp/B00FOHQZPI/ref=sr_1_5?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=adobe&qid=1624850023&sr=8-5","//*[@id='title']")
ココで注意する点は、取得したXPathを確認すると分かりますが、「//*[@id=”title”]」とid項目が「””」で囲まれています。
このままIMPORTXML関数に、「””」で囲み指定すると、エラーが返されデータをインポートできません。
なので、取得したXPathをIMPORTXML関数に指定する場合は、id項目の「””」を「”」に書き換える必要があります。
IMPORTXML("URL" , "//*[@id="title"]")
IMPORTXML("URL" , "//*[@id='title']") //「""」を「''」に書き換え
いちいち書き換える手間と、数式の書きやすさ、見やすさを考慮すると、URLとXPathを入力したセルの番号を参照するのが最も効率的。
対象のURLと取得したXPathをセルに入力し、IMPORTXML関数にセル番号を指定。
[商品タイトルのテキスト]を取得してみましょう。
=IMPORTXML(B1, B2)
指定したURLのHTMLドキュメントから、商品タイトル「Adobe Creative Cloud コンプリート|12か月版|Windows/Mac対応|オンラインコード版」を取得、表示できました。
HTMLドキュメントのtableをインポートする
IMPORTXML関数を使って指定したHTMLドキュメントのデータを取得する方法は紹介しましたが、目的や取得箇所によっては、余り都合が良くない場合があります。
例えば、HTMLの<tabel>タグで構築された表を、IMPORTXML関数を使い先程と同じ要領でインポートすると、スプレッドシートで使うデータとしては、少し問題がある結果に。
>>Adobe Creative Cloud コンプリート|12か月版|Windows/Mac対応|オンラインコード版
IMPORTXML関数でHTMLドキュメントのtableをインポート
前項の方法と同じくGoogle Chromeを使って<tabel>タグで構築された表[商品比較表]の箇所をXPathを取得。
IMPORTXML関数にURLとXPathを指定すると、下の画像で分かるように表の構成を無視し、表に含まれるテキストを一つの文章としてインポートしてしまいます。
HTMLドキュメントの表を、表のままスプレッドシートにインポートしたいのに、これでは目的を果たせません。
IMPORTHTML関数でHTMLドキュメントのtableをインポート
Googleスプレッドシートで、URLを指定してHTMLドキュメントのデータをインポートする関数は他にもあります。
そして、HTMLのテーブルタグ<table>、リストタグ<li>を、テーブルやリストのままインポートしたい場合に使う関数が、
IMPORTHTML関数
IMPORTHTML関数の使い方は、第1引数にURL、第2引数にテーブルタグだったら「”table”」、リストタグだった「”list”」と指定、第3引数にHTMLドキュメント内で指定したタグの番号を指定。
IMPORTHTML(“URL”,”table”,1)
第3引数に指定するタグの番号は、XPahtの文字列で確認できます。
//*[@id=”aplus”]/div/div[3]/div/div[1]/div[1]/div/table
//*[@id=”aplus”]/div/div[4]/div/div[1]/div[1]/div/table
それでは、IMPORTXML関数でインポートした同じ表[商品比較表]を、IMPORTHTML関数でインポートしてみましょう。
=IMPORTHTML("URL","table",5)
今度はHTMLドキュメントのテーブルタグで構成された表のままインポート、テーブル枠で分けてセルに入力されました。
HTMLドキュメントの表やリストを、スプレッドシートにインポートする場合は、IMPORTHTML関数を使うのが良さそうです。
まとめ:IMPORTXML関数とIMPORTHTML関数でHTMLのデータをインポート
GoogleスプレッドシートにURLを指定してHTMLドキュメントのデータをインポートする方法を紹介しました。
■HTMLドキュメントのテーブルタグ<table>、リストタグ<li>を、テーブルやリストのままインポートしたい場合
IMPORTXML(“URL” , XPath)
■HTMLドキュメントのテーブルタグ<table>、リストタグ<li>を、テーブルやリストのままインポートしたい場合
IMPORTHTML(“URL” , “table” , タグの番号)
価格や文言などが頻繁に変動するWebページのデータを参照する場合に便利なので、是非試してみてください。
|
|
国内で10年前からサービスを提供しているタスク管理・プロジェクト管理ツール。
利用者が100万人を超え、エンジニアの方以外にも、事務やデザイナー、マーケター、営業など、多様な職種の方にお使いいただいています。 |
|
|
|
|
|