どのページが閲覧されたかを知る(ページビュー)

ここでは、apache(アパッチ)のアクセスログからページビューを解析する方法を説明したいと思います。 ページビューは、ホームページがどれだけ閲覧されたかを示します。 サイト全体のページビューを解析することにより、どのページが人気があるか、どのコーナーが人気があるか、などがわかります。 それらの情報を元にホームページ製作を行うと、効率的にアクセスアップができるかも知れません。

ページビュー数を計算する

ページビューを取得するには、HTTPリクエストからURL部分を抜き出します。 (apacheのcombined logを前提にしています。必要に応じてサンプルを変えてください。) 具体的には、アクセスログ生データの各行の5番目のデータからURL部分を抜き出します。

抜き出したURL部分を単純に羅列しただけでは膨大な量のデータになってしまうので、ここでは、各URLの登場回数を数えてみたいと思います。 URLの登場回数を計算するために、perlの連想配列を利用します。 最終的には、連想配列に覚えこませたページビュー数を表示してサンプルスクリプトは終了します。

以下に、perlスクリプトのサンプルを示します。


#!/usr/bin/perl

# (注意)/usr/bin/perlの部分は必要に応じて変更してください。

# (注意)"access_log.txt"は解析するアクセスログのファイル名に
#  変更してください
open(LOGFILE, "access_log.txt") || die $!;

# 一行ずつアクセスログファイルを読みます。
while (<LOGFILE>) {

  # perlのパターンマッチを行っています。
  # $1,$2,...$9にマッチした結果が入ります。
  /^(.*) (.*) (.*) \[(.*)\] "(.*)" (.*) (.*) "(.*)" "(.*)"/;

  # パターンマッチの結果を変数に代入しています。
  $httprequest = $5;

  # スペースで区切ります
  @cols = split(" ", $httprequest);

  # とりあえず、今回のサンプルではGETだけ気にします
  # cgiに関して調べたいときなどには必要に応じてPOSTなどにも対応して下さい

  if ($cols[0] eq "GET") {

    # 2つ目のデータにリクエストされたURLが入っています
    $url = $cols[1];

    # 取得したURLをキーにした連想配列の値を増やします
    $urlcount{$url}++;
  }
}
close(FILE);

# 連想配列に覚えさせたページビュー数を表示します
# $keyには、URLが入っています
# $valueには、ページビュー数が入っています

while (($key, $value) = each(%urlcount)) {
  print "$value\t$key\n";
}

exit;

ここでは、とりあえず最も単純なページビュー取得方法を説明しました。


プロフェッショナルIPv6解説動画シリーズ再生リスト

動画で学ぶ「プロフェッショナルIPv6」を作っています。 もしよろしければご覧ください。お楽しみいただければ幸いです!