Apacheアクセスログと私(クローラーのアクセスを分ける)

ロボットのアクセスを分けることにする.特に,ページ内遷移は,人のアクセスだったら「どのぐらいの時間を掛けてるのかな~」と思うけど,クローラーなら一瞬でどんどん読み込んでいっちゃうんだろうから滞在時間なんていらない.

実のところ,だんだん慣れてきたので,コードを書くのはそれほど大変じゃなかった.大変だったのは,どのユーザーエージェントがロボットで,そのロボットはどういう検索エンジンのロボットかを調べることだった.調べている最中にメールアドレス収集ロボットのUAをいくつか知ったので,.htaccessではねておいた.

ま,そいつはともかく,調べた結果を,「ユーザーエージェント名」,「その説明」のタブ区切りテキストにした.このファイルの名前をrobotsinfo.txtにして,定数ROBOT_TXTに読み込んでおく.

それから,ロボット情報読み込みのためのモジュールを作っておく.

#クローラー情報関連読み込み関数
module Crawler
  #クローラー情報メソッド:返り値はハッシュで,{ roboto_ua => comment }
  def robot_info
    r = Hash.new
    robotfile = open(ROBOT_TXT)
    while roboline = robotfile.gets
      robo = roboline.chomp.split(/\t/)
      r[robo[0]] = robo[1]
    end
    robotfile.close
    return r
  end
  module_function :robot_info

  #クローラーのUserAgent名を返すメソッド:返り値は正規表現
  def robot_name
    robot_ua = ""
    robotfile = open(ROBOT_TXT)
    while roboline = robotfile.gets
      robo = roboline.chomp.split(/\t/)
      robot_ua = robot_ua + robo[0] + "|"
    end
    robotfile.close
    return Regexp.new(robot_ua.chop)
  end
  module_function :robot_name
end

いまいち,何をクラスにして,何をメソッドにして,何をモジュールにしたらいいのか分かってないんだよなぁ……

ともかく,ロボットの情報を書いたファイルを読み込んで,変数に入れていくメソッドを作ってみた.(robot_infoは,今回はまだ使わない)

似たようなことしてるんだけど,これって1つにできないのかなぁ.

ま,それは置いといて,あとは簡単で,呼び出し側に robot_re = Crawler::robot_nameと書いておいて,無視ファイルを決めているunless文にunless ignore =~ line.requestURI || robot_re =~ line.user_agentと書き入れる.

これでおしまい.今回は簡単だったな.

日時: 2004年10月24日 | PC/Web > Ruby |

コメントを投稿

(空欄でもかまいません)

(メールアドレスは管理人に通知されますが,Web上には表示されません)

Powered by Movable Type