Tableau

Tableauによるhtmlスクレイピング

WDCを用いたhtmlスクレイピングの実現手段はいくつか考えられますが、ここでは、その中でも環境整備が比較的容易と考えられるWDC-SDK上での、htmlスクレイピングの例を取り上げたいと思います。

WDC-SDKは、Tableau-GitHub上で公開されており、SDKには検証用Webサーバが含まれています。また、検証用Webサーバには、プロキシ機能が備わっています。

データ

サンプル・データ

今回はサンプル・データとして、「国の公債残高と公債依存度の推移」(図表1参照)を用いました。

図表1:国の公債残高と公債依存度の推移

出所:「国の公債残高と公債依存度の推移」(なるほど統計学園:総務省統計局)

データ取得

サンプル・コード

本サンプルでのデータ取得は、ローカルPCに立ち上げたプロキシ経由となります。

具体的には、

http://localhost:8889/<URL>

といったURI指定になります。

データ要求箇所
        var xhr = $.ajax({
            beforeSend: function(xhr){
                xhr.overrideMimeType('text/html; charset=shift_jis');
            },
            type: 'GET',
            url: 'http://localhost:8889/www.stat.go.jp/naruhodo/c1data/***.html',
            dataType: 'html',
            scriptCharset: 'utf-8',
            async: false
        }).done(function(resp, textStatus) {
            var tableRowObj = $(resp).find('tbody tr');
            var eraHeiseiFlg = false;
            for(i = 0; i < tableRowObj.length; i++){
                var order = i + 1;
                var year = $(tableRowObj[i]).find('td.txtc').text();
                var balance = $(tableRowObj[i]).find('td.txtr:eq(0)').text().replace(",", "");
                var dependency = $(tableRowObj[i]).find('td.txtr:eq(1)').text();

                if(year.substr(0, 2) == "平成"){eraHeiseiFlg = true;}
                if(dependency.substr(0, 2) == "注)"){dependency = dependency.replace("注)", "");}

                if(eraHeiseiFlg){ 
                    if(!(year.substr(0, 2) == "平成")){year = "平成" + year;}
                }else{
                    if(!(year.substr(0, 2) == "昭和")){year = "昭和" + year;}
                }

                tableData.push({
                    "Order": order,
                    "Year": year,
                    "Balance": balance,
                    "Dependency": dependency
                });
            }
        }).fail(function() {
            tableau.abortWithError('An error has occured while trying to connect to html site.');
        });

プロキシ概念図

WDCのフレームワークを通して、Tableauがデータを取得する大まかな流れは、以下のようになります(図表2参照)。

  • TableauがWDCサーバからスクリプトを取得
  • TableauがProxyサーバへデータを要求
  • ProxyサーバがWebサーバから代理でデータを取得
  • TableauがProxyサーバからデータを取得

*) WDCサーバとProxyサーバが同一ドメインの場合には、CORS制約を回避できることになります。

図表2:プロキシ概念図

見える化

以下は、htmlスクレイピングによって取得した「国の公債残高と公債依存度の推移」データを見える化したサンプルとなります。


参考資料

関連記事一覧