アクセス解析のサーチワードを集計する with perl

このブログへのアクセスはそのほとんどが検索エンジン経由です。 書いていることが雑多でニッチな話題も多く大衆向けに書いていないので特にブログの宣伝をしようとは思いませんが、 検索エンジンで探し物をしている人がここに来て何かを見つけることができればそれは嬉しいことです。 なのでできるだけ多くのページが検索エンジンにインデックス化されるための努力はしていこうと思います。

またこのような考え方なので、「どのような検索をしてこのブログに辿りついたか」という点は興味があります。 ブログと同じ提供元の FC2 アクセス解析を使っているのですが、検索に入力した単語を表示する 「サーチワード」のレポートが気になります。 ところがブラウザからこの「サーチワード」のレポートを見るとページばかり多くなって使い勝手がいま一つです。 そこで、今回 FC2 アクセス解析のサーチワード情報を perl を使って分析をしてみました。

流れとしては以下の通りです。

  1. 「番号」、「サーチワード」、「件数」を含む TSV (Tab Separated Values) ファイルを生成する。
  2. サーチワードにどのキーワードが含まれていたらどのカテゴリに分類するかの情報をファイルとして作成し、 先の TSV ファイルと合わせてカテゴリごとの件数を集計しレポート化する。

まず、1 ですが、http://analyzer.fc2.com/ にアクセスして自動的に情報を取得するようにします。 このサイトへアクセスする際に気をつける点は以下の通りです。

  • analyzer.fc2.com はセッション管理はせず、 Cookie にユーザ名、パスワードを入れてやりとりする仕様となっている。 お陰でプログラムするのは楽だけれどちょっとエグいかも。
  • analyzer.fc2.com は UTF-8 でページを返す。

というわけで、1 の処理をするプログラム (getlog.pl) を書いてみました。 日本語のマッチング処理をしているのでこの perl のプログラムファイルも UTF-8 で保存する必要があります。 処理は analyzer.fc2.com の出力する HTML の書式にかなり依存しています。以下のように実行します

perl getlog.pl > mylog.tsv

続いて集計プログラムを実行する前に「キーワード」、「カテゴリ」の組み合わせを羅列した分類用ファイルを作って word.txt として保存しておきます。 以下のように「キーワード」、「カテゴリ」を項目とした TSV ファイルです。 分類するときに複数のキーワードを含んでいる場合は先に書いてあるキーワードで処理されるので、順番は重要です。 キーワードのマッチング処理は大文字/小文字の違いは無視します。

ミニッツ      ミニッツ
サーキット    ミニッツ
MZW8P         ミニッツ
PERFEX        ミニッツ
レンズ        カメラ
kiss          カメラ
(...略)

ちなみに私の使ったものはこれです。 マッチしないレコードもそれなりにありますが、大体の傾向を掴むのが目的なので良しとしています。

ここまでできたら後は 2 の処理をするプログラム (catrep.pl) を実行するだけです。

perl catrep.pl mylog.tsv > report.txt

このように実行すると最初にキーワードを1つも含まなかったレコードが表示され、続いてカテゴリ毎の集計結果が表示されます。

==== Unmatched Records ====
22      木材 リストア  4
(...略)
==== Category Report ====
音楽 = *****
テニス = *****
(...略)

アクセス数は恥ずかしくて公表しませんが、こうして調べてみるとこのブログでは Cisco/ミニッツ/模型(主に鉄道)の3つを対象とした検索の結果からのアクセスが多かったです。最後の模型については意外でした。これに関してはもう少し記事を充実させねばと思いました。

プログラム実行に関しての注意

  • perl や正規表現をある程度わかっている方を対象にしています。実行は自己責任でお願いします。また、私は決して perl プログラミングに長けているわけではないのでうまくない点は指摘していただけるととても嬉しいです。
  • getlog.pl 中の $user/$password/$proxy/$url/$path についてはご自分の環境に合わせて設定してください。
  • FC2 ブログの仕様によりプログラムファイルは .txt の拡張子でアップロードしています
  • 取得した HTML からコード変換していないので出力されたレポートも UTF-8 になります。
  • Windows 上の Active Perl (v5.8.8) で動作確認しました。LWP モジュール、HTTP モジュールを使っていますので、環境によってはこれらを追加インストールする必要があるかも知れません。
  • word.txt は改行コードを LF のみにした方が良いかも。