日志分析脚本

分享一个自己平常用的日志分析脚本,很简单,主要统计URL的抓取和流量数据,略细分。光年那宏观的数据感觉没多大用,就没往里加。因为是临时想到什么就往里加的什么,搞得好多变量自己都忘了是干嘛的,所以整体看上去比较繁琐。效率一般,i3处理器1G多日志3、4分钟。

执行命令:python log_file seo_file
log_file:要输入日志的文件名,seo_file:随便起一个。。。

脚本输出的内容包括:

蜘蛛抓取量(总抓取量)
每类页面的抓取量(分不同蜘蛛的;包含唯一抓取量和总抓取量,对比看下重复抓取对不多。。。)
SEO流量(统计的搜索引擎在‘seo_traffic_req’变量里,觉得不够在自己加)
每类页面的SEO流量
每类页面的百度SEO流量和360 SEO流量
蜘蛛状态码汇总
百度来源关键词

  1. #coding:utf-8
  2. #weblog analytics
  3. import re
  4. import sys
  5. import urllib
  6. import os
  7. input_file,seo_file = sys.argv[1:3]        #要输入的日志文件名,和输出的seo流量文件名
  8. seo_url = open(seo_file,’a’)
  9. #fenci = open(fenci_file,’a’)        ps:需要单独输出百度来源关键词文件,则取消注释
  10. baidu_seo = open(‘baiduseo.txt’,’a’)
  11. #要统计蜘蛛抓取及流量数据的页面url对应的正则,想统计1个就写1个,想统计100个就写100个,根据自己需求替换下~~
  12. mulu_re = [
  13. ‘/abc/[0-9]+.html’,
  14. ‘/abc/g[0-9]+/[a-z]+.html’
  15. ]
  16. #要统计的蜘蛛,根据自己需求替换下
  17. kz_spider = [
  18. ‘Baiduspider.*search/spider.html’        #因为只匹配‘Baiduspider’可能把假蜘蛛也算进来,所以这么写。。
  19. #’360Spider’
  20. #’Googlebot’,
  21. #’Sogou’
  22. ]
  23. weblog = open(input_file).read()
  24. word_re = re.compile(‘\.baidu\.com/.*?(?:wd|word)=(.*?)[&”]’)
  25. seo_traffic_req = re.compile(r'(so.com/.*?q=|360.cn/.*?q=|baidu.com/.*wd=|baidu.com/.*word=|so.com/.*q=|sogou.com/.*query=|youdao.com/.*q=|yahoo.com/.*p=|bing.com/.*q=|google.com/.*q=)’)
  26. baidu_seo_re = re.compile(r'(baidu.com/.*wd=|baidu.com/.*word=)’)
  27. seo_traffic = 0
  28. seo_baidu = 0
  29. pagecode = {}
  30. baidupagecode = {}
  31. def spider_zq(spider):
  32.         req = re.compile(spider)
  33.         data = len(re.findall(req,weblog))
  34.         return data
  35. def url_spider_zq(zz,spider):
  36.         url_re = zz + ‘.*’ + spider
  37.         req = re.compile(url_re)
  38.         data_one = len(list(set(re.findall(req,weblog))))  #唯一抓取量
  39.         data_two = len(re.findall(req,weblog))        #总抓取量
  40.         #e = ‘%.2f%%’% (float(‘%.1f’%(data_two-data_one))/data_two)
  41.         return data_one,data_two
  42. print “\n”
  43. print “<——————————-每个蜘蛛的总抓取量———————————->”
  44. for spider in kz_spider:
  45.         print spider + “总抓取量:”,spider_zq(spider)
  46. print “\n”
  47. print “<——————————-蜘蛛目录抓取量———————————->”
  48. for spider in kz_spider:
  49.         print spider+”目录抓取量:”,”\n”
  50.         for zz in mulu_re:
  51.                 print zz,”:”,url_spider_zq(zz,spider)
  52.         print “\n”
  53. print “<——————————-SEO总流量———————————->”
  54. for line in open(input_file):
  55.         data = re.search(seo_traffic_req,line)
  56.         baidu = re.search(baidu_seo_re,line)
  57.         if data:
  58.                 seo_traffic += 1
  59.                 seo_url.write(line+’\n’)
  60.         else:
  61.                 continue
  62.         if baidu:
  63.                 seo_baidu += 1
  64.                 baidu_seo.write(line+’\n’)
  65.         else:
  66.                 continue
  67.         code = line.split(‘ ‘)[9]
  68.         if code.isdigit():
  69.                 if code in pagecode:
  70.                         pagecode[code] += 1
  71.                 else:
  72.                         pagecode[code] = 1
  73. print ‘SEO流量:’,seo_traffic,”\n”
  74. baidu_seo.close()
  75. seo_url.close()
  76. seo_mulu = open(seo_file).read()
  77. baiduseo = open(‘baiduseo.txt’).read()
  78. print “<——————————-SEO目录流量———————————->”
  79. print “网站目录SEO流量统计:”,”\n”
  80. for line in mulu_re:
  81.         req = re.compile(line)
  82.         seo_data = len(re.findall(req,seo_mulu))
  83.         print line,seo_data
  84. print “\n”
  85. print “<——————————-百度 SEO目录流量———————————->”
  86. print “网站目录SEO流量统计:”,”\n”
  87. for line in mulu_re:
  88.         req = re.compile(line)
  89.         seo_data = len(re.findall(req,baiduseo))
  90.         print line,seo_data
  91. print “\n”
  92. print “<——————————-360 SEO目录流量———————————->”
  93. print “360 SEO流量统计:”,”\n”
  94. for line in mulu_re:
  95.         line_360 = line + “.*(so.com|360.cn)/.*?q=”
  96.         req = re.compile(line_360)
  97.         seo_data_360 = len(re.findall(req,seo_mulu))
  98.         print line,seo_data_360
  99. print “\n”
  100. print “<——————————-蜘蛛状态码———————————->”
  101. pagecode_sort = sorted(pagecode.iteritems(), key=lambda d:d[1], reverse = True)
  102. print pagecode_sort
  103. print “\n”
  104. os.remove(‘baiduseo.txt’)
  105. os.remove(seo_file)        #如果需要日志中SEO流量的部分可以删掉这行
  106. #如果需要日志中的百度来源关键词可以取消注释
  107. #for line in open(seo_file):
  108. #        word = re.search(word_re,line)
  109. #        if not word:
  110. #                continue
  111. #        kw = urllib.unquote_plus(word.group(1))
  112. #        if ‘ie=utf-8’ not in line:
  113. #                kw = kw.decode(‘gb2312′,’ignore’).encode(‘utf-8’)
  114. #                fenci.write(kw+”\n”)

复制代码

发表评论