競馬解析プログラム

このブログのデザインもだんだん飽きてきんで(笑)、そろそろ本筋に入って行こうかと思います。当面の目標は、「各馬・レースのデータベースの構築」⇒「自動的に次のレースの予想をはじき出す」というプログラムの作成です。データベースの構築といっても、一個一個手入力でやっていくには膨大な時間の無駄になってしまうのは、前に作った解析システム(高校の友達と一緒にやってました)から学びました。そこで今回は情報を配信しているサイトをクロールして、情報を収集するプログラムを作成しようと思います。言語はPHPでやって行こうと思っています。

最初に突き当たった壁が、どうやってHTMLを解析するのか。HTMLのパーサーのクラスライブラリとかないかな、と思ってところ、PEARパッケージのXML_HTMLSaxを紹介しているサイトが多かったので試してみました…が、PHPに触りたての自分にとってはちょっち無理w、ってことであきらめ、色んなクラスライブラリも試してみましたが、なかなかうまくいかず…。カッコイイ関数とか使わなくて、単純な仕組みでやってくれてるのないかな、と思ってたところ、オライリー社のSpidering Hacksという本のソースコードをDLできるページがあることを知り、早速使ってみました。…すると、どんぴしゃっすね。若干自分で改変しましたがstrpos()(:引数で指定した文字列のある場所を返す)を使うだけで特定の箇所を抜き出すことを実現していました。

function getBlock( $pStart, $pStop, $pSource, $offset) {
   $_data = null;
   $_start = stripos( $pSource, $pStart, $offset);
   $_stop = stripos($pSource, $pStop, $_start);
   $start = $_start + strlen($pStart);
   $length = $_stop - $start;
   if($_stop > $_start ) {
      $_data = trim( substr( $pSource, $start, $length ) );
   }
  
   return( array($_data, $_stop) );
}

こんな感じで、$pStartと$pStopで指定したものの間を抜き取るって感じです。まぁ同じタグが複数個所あったら抜き出すのは難しいですが、最近のHTMLはクラス、ID指定とかで特定の部位が探し出しやすくなっていることが多いので、以外に使えます。これなら、HTML⇒XHTML⇒XMLとして解析、とかキャパ越えなことしなくても大丈夫!ってことでいろいろ試してみました。その結果、とりあえず

No.0 テイエムオペラオー

栗毛
1996/03/13
オペラハウス
Blushing Groom

No.1 ディープインパクト

鹿毛
2002/03/25
サンデーサイレンス
Alzao

No.2ゼンノロブロイ

黒鹿毛
2000/03/27
サンデーサイレンス
マイニング
・・・
みたいな感じで、情報を抜き出していくことは可能になりました。まー、あとは抽出する項目を増やしていきましょ、って感じです。…ただし、対象のHTMLを直接読み込んでるんで、こちらも相当時間かかりますし(普通にタイムアウトしますww)、情報を抜き出させてもらっているサイト様にも迷惑かと…。問題は山積みですが、頑張って行こうと思います。

トラックバック(0)

このブログ記事を参照しているブログ一覧: 競馬解析プログラム

このブログ記事に対するトラックバックURL: http://www.hecomi.com/mt/mt-tb.cgi/6

コメント

Author Profile Page:

と思ったら、このサーバ(lolipop)ではstriposが使えないことに気付きました…orz

コメントする