インターネットでさがしもの

By ttakao, 2005年1月1日

インターネットで探し物

かなりやばいものを作ってしまった。。。。ベクターには公開できんなぁ。。。。
「Mail De Watch」を作って以来、ちょっとしたインターネット通信プログラムがおもしろくなってしまい、情報収集機能をもつプログラムを作ってみたくなったんで
す。インターネットには情報があふれています。検索エンジンなどがよい例ですね。でも、いろんなサイトを探すのに手作業で探すのは面倒。知りたい情報を
もったページをスコンと抜けるとおもしろいなぁ、ということで今回は自動的に探すサンプルプログラムを作ってみました。
ただ。。。。。。。一番簡単な例としてメールアドレスを発見するようにしてみたのですが、巷にはMAILCATCHERとかMAILFINDERとかいっ
てそういうソフトがとても高価な値段で売られており、ヤバヤバツールと認定されているようです。まぁ、SPAMメールをばらまく元といえばそうですもん
ね。対抗策としてアクセスしてきたらデタラメなメールアドレスを大量に生成して返す、なんていうWPOISONなんていうおもしろいソフトを作っている人もいます。
というわけで今回はわざとパッケージには実行モジュールは含まれていません。あくまでも研究用にVBのソースだけ置いておきます。

このプロセスはふたつのフェーズにわけました。最初にやるべきことは、候補のURLを探すことです。例えばGoogleで検索結果のページでもいい
ですし、なんらかの形のリンク集を拾い出し、そのリンクを順順に辿ってみることにしました。一番重要なルーチンが以下のルーチンです。

 

   

      

   

 

      
      

(1)で、InetScanというのは、VBのInetコンポーネントです。これはなかなか便利でプロキシーの設定などもできてHTTP(いわゆる
WEB)のデータを取ってきてくれます。その取る動作が(2)のopenURLというメソッドです。これだけでも、例えば右クリックができないようになっ
ているJavaScriptいりのページのソースを入手することができますね。ここはページがきちんと送られてこなかったり、タイムアウトでエラーになり
やすいのでon
Errorステートメントでエラーをキャンセルしています。うーん、通信プログラムっぽい。
インターネットで入手する情報はさまざまな文字コードで記述されています。EUC,SHIFT-JIS,UNICODEなど聞いたことがあるでしょう?で
すから、VBで処理する場合は普通のSTRINGではなく、バイト配列で受け取ります。STRINGはVBの思っている文字コード(UNICODE)に無
理に文字を変更しようとしたりするので、そういう心配のないバイト配列で受け取り、STRCONV関数でUNICODEに変更しています。これでもイマイ
チヘンなのですが、今回はURLという英語でしかできていないに決まっているものを扱うのでこれでいいことにしています。
(3)はそのもってきたページの内容からHTMLのHREFキーワードを見つけてリンクしているURLを拾い出そうというものです。見つけ出したURLは
すべてLISTBOXに書き出していますので、(4)の部分の数はどんどん増えていきます。つまりこのプログラムはリンクを拾い出してはそのリンクにアク
セスし、また、そのリンクを拾い出していくので放っておくとどこまでもURLを収集しまくってしまいます。で、(5)のタイミングで「中止ボタン」が押さ
れていないかチェックして押されていたら作業を止めるようになっています。
VBのソースパッケージはページの一番下にリンクがあります。実行してみると一万URLなんて簡単に集まるもんですね。ビックリ!データを保管するとき、
そのURLが目的のものか、正規表現でフィルタリングする機能もつけてみました。拾ったものをそのまま保管したい人はソースからregedit関連をとっ
ぱずすとよいでしょう。
以下はほぼ同じ機能をIEを利用してスクリプトで作った例。コレクションオブジェクトがスクリプトでは使えないんで配列の定義で拾いたい最大数を指定してください。BASP21を使っていますので、別途、インストールしてください。

 

   

      

   

 

      
      

続いて、URLからメールアドレス(あくまでも例ですよ、例!)を拾い出すプログラムの要の部分をご紹介しましょう。

 

   

      

   

 

      
      

最初のプログラム(URLFinder)で探し出したURLはCSVファイルに保管されているとします。効率を高めたい人はリストをエクセルかなにかで処理して重複URLを除くといいでしょうね。
(1)ではLoadURLで読み込んだコレクションオブジェクトからひとつづつURL名を取り出しています。インターネットプログラムは最初のURLを探
すものとほぼ同じです。(2)でinetコンポーネントのopenURLメソッドでページを拾い出し、コード変換して、(3)でScanAtMarkで
メールにつきものの@マークを探しています。(4)は途中停止したいときの処理です。

いずれもネットワーク処理は簡単でした。むしろ難しいのは、読み込んだHTMLからどうやってリンクしているURLを取り出すか、どうやってメールアドレスを取り出すか、というテキスト処理部分でした。
このサンプルプログラムでは、HREFタグを見つけたら、そこを候補として切り出します。
次に、文字列を解析しダブルクォーテーションやブランクという区切りを見つけ、URLとしています。しかしやってみるとわかるように結構、ゴミも拾いま
す。同様にメールも@マークを見つけ前後50バイトを取り出し、@マークを中心としてアカウントとドメイン名を拾い出すという作業をやっています。これも
やってみるとわかるように@niftyなんてのも拾ってきてタイヘンです。
こうやってみると、インターネットから情報を収集するプログラムはデータをもってくるのは簡単で、そのテキスト処理がタイヘンであることがわかりました。時間ができたらページの要約を抽出できないかやってみたいところです。

 

   

      

   

   

      

   

   

      

   

 

悪用厳禁!
URL見つけるプログラムパッケージはここ
メアド見つけるプログラムパッケージはここ

What do you think?

コメントを残す

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