人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

javascriptで質問です。以下のようなことが出来るのであれば手順を教えてください。できればサンプルをお願いします。関連したURLでもOKです。

1. Windowsのコマンドラインからファイルに記録されたjavascriptを実行する。
2. そのscriptでパラメータで渡されたURLにアクセスし、HTMLを取得する。
3. 取得したHTML内の要素に対してjquery(#IDなどをつかって)を使ってアクセスし文字列処理を行う。
4. 結果をサーバ側にデータをPOST
(無理だと思うのですがローカルのファイルに直接出力できるとなおよろし)

端的にいうとjavascriptとjqueryライブラリ(または似たようなもの)をつかって
HTMLの要素にアクセスし、整形するようなスクレーピング?プログラムを
作成したいということです。
(DOMアクセスできるものがあるのですがjqueryのような扱いやすさがないので)
*windowsコマンドラインで動くものであればmshta.exeでなくともかまいません

●質問者: neozerocool
●カテゴリ:インターネット ウェブ制作
✍キーワード:DOM exe HTML JavaScript jQuery
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● HALSPECIAL
●10ポイント

WSH(Windows Scripting Host)で実現できます。

言語は、VBScriptまたはJScriptです。

前者は拡張子がvbs、後者はjs

1.

コマンドラインからたたくには、

http://d.hatena.ne.jp/seiunsky/20081130/1228066957

cscript test.js 1 aiueo "引数"

のようにします。


2.

HTMLを取得するには、

XMLHttpRequest オブジェクトを使用します。

http://webos-goodies.jp/archives/50548720.html


3.jquery の使用は難しいでしょう。

できないとは言い切れないので明言は避けます。

それと、HTMLのDOMをパースできるかどうか不明です。XMLなら可ですが。


4.

XMLHttpRequest オブジェクトでPOSTすればいいです。

また、WSHなので、ローカルのリソースにアクセスできるので、ファイルに保存も可能です。

◎質問者からの返答

ご回答ありがとうございます。

はやり 3.のHTML部分のDOMのパースが苦労する部分だと思っていたので

この部分をjqueryにこだわっているわけではないのですが、なんか直感的

にアクセスできるようなライブラリがあればいいのですが・・・

引き続き情報お待ちしております。


2 ● HALSPECIAL
●15ポイント

Pure JavaScript HTML Parser

http://ejohn.org/blog/pure-javascript-html-parser/

こういうのでパースできそうです。

◎質問者からの返答

jqueryにこだわってないといいながらなんなんですが 上記感じだと使用する言語がjavascriptである必要がなくなってきてしまいますかね。

PHPや他の言語でもhtmlparserがあったりするのですが、どれもいまいちすっきりしなくて

あとのっかりですが

1.で呼び出すjsファイル内からprototypeやjqueryなど呼び出すことはできますでしょうか?


3 ● mattn
●50ポイント ベストアンサー

id:hasegawayosuke変態スクリプトを使うと出来ます。

// ユーティリティ関数
var _util = { cat : function(f){return (new ActiveXObject("Scripting.FileSystemObject")).OpenTextFile(f,1,false).ReadAll();} };
// 偽 window、偽document、グローバルオブジェクトの準備
(function(){
 if( typeof( document ) == "undefined" ){
 document = new ActiveXObject( "htmlfile" );
 document.write("<html></html>");
 }
 if( typeof( window ) == "undefined" ) window = document.parentWindow;
 if( typeof( alert ) == "undefined" ) //alert = window.alert; 
 alert = function(s){ return window.alert( s )};
 if( typeof( confirm ) == "undefined" ) confirm = function(s){ return window.confirm(s) };
 if( typeof( location ) == "undefined" ) location = window.location;
 if( typeof( navigator ) == "undefined" ) navigator = window.navigator;
 if( typeof( clearInterval ) == "undefined" ) clearInterval = function(id){
 return window.clearInterval( id );
 };
 if( typeof( clearTimeout ) == "undefined" ) clearTimeout = function(id){
 return window.clearTimeout(id);
 };
 if( typeof( setInterval ) == "undefined" ) setInterval = function(code, interval){
 return window.setInterval(code, interval);
 }
 if( typeof( setTimeout ) == "undefined" ) setTimeout = function(code, delay){
 return window.setTimeout(code, delay);
 }
})();

// jQueryの読み込み
eval( _util.cat( "jquery-1.3.2.js" ) );

var complete = 0;
$.ajax( {
url : "http://q.hatena.ne.jp/1259814347",
 dataType : "text",
 type : "get",
 async : true, 
 success : function( text ){
alert($('h1.question-header', $(text)).text());
 complete = 1;
 }
} );

for( var i = 0; i < 100; i++ ){
 WScript.Sleep( 30 );
 if( complete == 2 ) break;
}

コマンドプロンプトから

C:\>cscript hasegawayosuke-daisuki.js

とすると、このページの質問文がスクレイピングされメッセージボックスで表示されます。

※スクリプト名は気にしないで下さい。

◎質問者からの返答

仮想htmlファイルを作成してそこにjQueryを流し込んでいるということですよね。

これだとjQuery以外にも流し込めそうなんでいろいろと幅が広がりそうです。

んー 目からうろこでした。

ありがとうございました。まさしくドンピシャです。


4 ● はせがわよすけ
●15ポイント

↑のid:mattnの回答のコードは http://d.hatena.ne.jp/hasegawayosuke/20090930/p1 にあります。

あと、jQuery や DOM の操作をせずに、HTML文字列をパースしたいというのであれば、jQueryの作者である John Resig 氏による Pure JavaScript HTML Parser もあります。

◎質問者からの返答

ありがとうございます。参考にします。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ