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スクレイピングによって取得した「国の公債残高と公債依存度の推移」データを見える化したサンプルとなります。
 
 
 
 
 
