wshとjscriptでhtmlのtableをスクレイピング

WEBスクレイピングするなら何言語?

以下のエントリにてWEBスクレイピングは何言語でするのが良いか?考察しました。
buki.hateblo.jp

どの言語にしり、一長一短があります。

ただ、どの言語を選択するにしろ、インストールとか設定とか面倒ですよね?!また、他人のPCとか漫画喫茶のPCとか、インストールしづらいものもあると思います。

そんなとき、windows環境であれば、wshとjscriptの環境がお勧めです!

wsh+jscriptでwebスクレイピングするメリット

インストール不要
ダブルクリックで実行可能
jscriptなんでjavascriptのライブラリなどを活用可能
ライブラリといっても、jqueryやnodeを使うとすると、インストール必要になってしまいます。しかし、ものによっては、スタンドアロンのjsファイルが配布されております。

ファイルごとgoogleドライブかどこかにぶっこんでおけば、それをDLするだけで実行可能です。

あくまでも、インストールやレジストリ書込みが不要という意味合いです。

デメリットは敢えて言いませんよ(笑)

竹槍で戦うしか無い状況だったら竹槍で戦う方法を考えましょう!ということです。

wshとjscriptでWEBスクレイピングするサンプルコード

簡単に実行出来てしまう上、リスクが高いので解説は控えます(笑)

書き方的には、IEとVBAでWebスクレイピングをするのに似ています。

JscriptではなくVBSで書けば、ほぼ同じコードで行けます。

wshとjscriptでWEBスクレイピングする対象サイト

僕は、ダーツをやっているのですが、ソフトダーツのプロツアーのポイントランキングをスクレイピングしてみました。

悪用厳禁ですよ!

www.prodarts.jp

urlのパラメータ

例えば、

2017年度の男子のポイントランキングの1ページ目の場合は、以下のようになります。

http://member.prodarts.jp/players_ranking.php?tournament_year=2017&mem_sex_cd=2&word=&start=1
tournament_year=年度

mem_sex_cd=性別※男子が1,女子が2
start=ページ
のようです。

wsh

html+xmlのようなイメージです。
ファイル名は何でもいいですが、拡張子はwsfです。jsでは面倒な外部ファイルのインクルードが簡単に出来ます。
というか、そこくらいしか褒めるところが無いw

<script language="JScript" src=".libscrapehtml.js"></script>
  <script language="JScript">
   var url = getUrlPointRanking(2,2017,1);
   var str = scrapeTable(url,',');
   WScript.Echo(str);
</script>

jscript

function scrapeTable(arg_url,sep){
var ie = new ActiveXObject("InternetExplorer.Application");
ie.Visible = true;
ie.Navigate(arg_url);
while( (ie.Busy) || (ie.readystate != 4) ) {
WScript.Sleep(100);
}
var rt_str = '';
var tbl = ie.document.getElementsByTagName("table").item(0);
var rows = tbl.rows;
for (var i=1, len=rows.length; i<len; i++) {
var cols = rows[i].cells.length;
for (var j=0; j<cols; j++) {
if((rows[i].cells[j].innerText.length) != 0){
rt_str += rows[i].cells[j].innerText;
rt_str += sep;
}
}
rt_str += ('n');
}
ie.Quit();
fs = null;
ie = null;
return rt_str;
}
function getUrlPointRanking(sex,year,page){
var ret_url = ''
var base_url = "http://member.prodarts.jp/players_ranking.php";
ret_url = base_url + '?tournament_year=' + year;
ret_url = ret_url + '&mem_sex_cd=' + sex;
ret_url = ret_url + '&word=&start=' + page;
return ret_url;
}

さいごに

是非ためしてみて下さい。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です