目标:

按文章类型分别统计文章PV,并按PV倒序显示

分析:

从NGINX日志按URL特征可以取出所有文章页URL,并从URL中得到ID

拿ID到数据库中可查询出文章所属类型type

具体操作:

从日志中取出所有详情页URL特征片段,并排重统计每个文章的访问量,将结果另存为m1214.cnt

cat access.log | grep -o "GET http://www.***.com/content.* HTTP" | grep -Po "\d(/.*\.html)" | sort | uniq -c > m1214.cnt

对m1214.cnt每行前面的空格删除,并将每列之前用tab分隔

第一列:访问量

第二列:URL特征片段

cat m1214.cnt | awk '{print $1"\t"$2}' > m1214_1.cnt

按第一列倒序排列

cat m1214_1.cnt | sort -rn -k 1 > m1214.sort

使用python读取m1214.sort,将第二列特征片段转为文章ID,将到数据库查询type

#coding=utf-8import os,sysimport MySQLdbimport reimport mathdef c_decode(str):	#URL片段解码为数据库ID,省略。	return int(id)if __name__ == "__main__":	try:		conn=MySQLdb.connect('***', '***', '***', '***')		cur=conn.cursor()		cur.execute("set names utf8")	except MySQLdb.Error,e:		print("Mysql Error")		sys.exit()	else:		for line in open("./m1214.sort"):			list = line.split("\t")			pattern = re.compile(r'\d\/(\d*\w*[0-9])\.html')			match = pattern.match(list[1])			if match:				id = str(c_decode(match.group(1)))				sql="SELECT id, title FROM content WHERE id = '"+id+"' AND type = 11";				cur.execute(sql)				result = cur.fetchone()				if result:					fpd = open('./type_11.sort', 'a')					fpd.write(list[0]+"\t"+"http://www.***.com/content/id/"+id+"\t"+result[1]+"\r\n")					fpd.close()

结束:

方法比较笨拙,但用到了很多linux常用的命令和python编程,特此记录