目次
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スクレイピングする対象サイト
僕は、ダーツをやっているのですが、ソフトダーツのプロツアーのポイントランキングをスクレイピングしてみました。
悪用厳禁ですよ!
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; }