四十一 如何準確的統計文章瀏覽量 pv

2021-07-26 10:28:37 字數 2479 閱讀 1325

自己寫的原創文章很想知道都有多少網友瀏覽過,單純的顯示次數並不能準確地反應真實瀏覽量,還需要解決一些意想不到的問題,本節我把剛剛完成的瀏覽量統計方案分享出來

/**

*@var int

* *@orm\column(name="pv", type="integer", options=)

*/private

$pv;

/** *@return mixed

*/public

function

getpv

()/**

*@param mixed $pv

*/public

function

setpv

($pv)

並執行:

生效資料庫,我們可以看到資料庫多了一列pv,預設值為0:

瀏覽量統計的關鍵點在於「排除干擾因素」,所謂的干擾因素主要是非真實使用者瀏覽:爬蟲、惡意刷網頁等

因此我們不採取實時瀏覽寫資料的方案,我們採取基於瀏覽日誌做清洗和統計

"-"這種一定不是正常的瀏覽器,因此我們也要過濾掉

按照上述方案,我們的日誌清洗指令碼新鮮出爐:

生成的clean.log就是清洗後的日誌

下面就是基於清洗後的日誌做pv統計了,建立gen_pv.py如下:

#!/usr/bin/python

# coding:utf-8

import sys

reload(sys)

sys.setdefaultencoding( "utf-8" )

import mysqldb

from conn import conn

import re

pattern1 = re.compile('/blogshow/\?blogid=([0-9][0-9]*)$')

pattern2 = re.compile('/blogshow/([0-9][0-9]*)$')

pv={}

f = open('./clean.log')

try:

while

true:

line = f.readline()

if line:

fields = line.split(' ')

url_path = fields[6] # /blogshow/3 or /blogshow/?blogid=3

match1 = pattern1.match(url_path)

match2 = pattern2.match(url_path)

blog_id = -1

if match1:

blog_id = int(match1.group(1))

if match2:

blog_id = int(match2.group(1))

if blog_id != -1:

if pv.has_key(blog_id):

pv[blog_id] = pv[blog_id] + 1

else:

pv[blog_id] = 1

else:

break

finally:

f.close( )

conn = conn().getconnection()

cursor = conn.cursor()

for id in pv:

sql = "update blogpost set pv=%d where id=%d" % (pv[id], id)

cursor.execute(sql)

conn.commit()

conn.close()

講解一下:

因為**做過改版,blogshow網頁的url存在過兩種形式,因此要把這兩部分都考慮進來,所以做了兩部分正則匹配

獲取到全部blog的pv資料最後刷入資料庫

為了能比較及時又不損失伺服器效能,我們配置5分鐘執行一次統計,配置crontab如下:

*/5 *

* * * cd /data/gen_pv && sh run.sh &>> run.sh.log

史上最簡單的 MySQL 教程(四十一) 觸發器

案例 網上購物,根據生產訂單的型別,商品的庫存量對應的進行增和減。此案例涉及兩張表,分別為訂單表和商品表,下單時,商品表庫存減少 退單時,商品表庫存增加。如何實現?觸發器 trigger,是指事先為某張表繫結一段 當表中的某些內容發生改變 增 刪 改 的時候,系統會自動觸發 並執行。觸發器包含三個要...

史上最簡單的 MySQL 教程(四十一) 觸發器

觸發物件 表中的每一條記錄 行 即整張表。建立觸發器基本語法 delimiter 自定義符號 臨時修改語句結束符,在後續語句中只有遇到自定義符號才會結束語句 create trigger 觸發器名稱 觸發器時間 事件型別 on 表名 for each rowbegin 代表觸發器內容開始 觸發器內容...

技術人生 故事之四十一 軟體工程的必要

故事之四十一 軟體工程的必要 規範規範,影響了我的創造,可終於發現,我孤獨的決鬥,總是失敗。很多技術人員不喜歡坐下來寫東西,或者按照規則辦事,認為那是束縛。告訴你,如果不遵守規則,只有兩個結果 一 工作全部你幹了 二 背公司炒掉!其實,沒有原則的技術學習和開發,實際上等同於白幹,雖然這裡說的嚴重了,...