Heim  >  Artikel  >  Backend-Entwicklung  >  Python zählt Client-IP-Besuche basierend auf Nginx-Zugriffsprotokollen

Python zählt Client-IP-Besuche basierend auf Nginx-Zugriffsprotokollen

WBOY
WBOYOriginal
2016-08-08 09:22:211212Durchsuche

Professionelle statistische Websites wie Baidu Statistics, Google Analytics, cnzz und andere statistische Hintergründe bieten häufig verwendete statistische Indikatoren für Webmaster wie UV, PV, Online-Zeit, IP usw. Darüber hinaus habe ich aus Netzwerkgründen Ich habe festgestellt, dass Google Analytics Hunderte mehr IPs als Baidu-Statistiken hat. Daher möchte ich mein eigenes Skript schreiben, um die tatsächliche Anzahl der Besuche zu verstehen. Allerdings werden die auf Nginx basierenden Zugriffsprotokolle viel größer sein als die des statistischen Backends, da es viele Spinnen gibt Besuche werden ebenfalls gezählt, es gibt statische Dateistatistiken. Wenn der Algorithmus verbessert wird, kann ich diese nutzlosen Statistiken heute mit Ihnen teilen und sie auch lernen und überprüfen Python-Sprache.

Zum Beispiel lautet das Nginx-Protokoll auf dem Server wie folgt:

221.221.155.54 - - [02/Aug/2014:15:16:11 +0800] "GET / HTTP/ 1.1" 200 8482 "http://www.zuidaima.com/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, wie Gecko) Chrome/31.0.1650.57 Safari/537.36" "-" "0,020 "
221.221.155.53 - - [02/Aug/2014:15:16:11 +0800] "GET / HTTP/1.1" 200 8482 "http://www.zuidaima.com/" "Mozilla/5.0 ( Windows NT 6.1 ; WOW64) AppleWebKit/537.36 (KHTML, wie Gecko) Chrome/31.0.1650.57 Safari/537.36" "-" "0.020"
221.221.155.54 - - [02.08.2014:15:16:11 +0800] „GET / HTTP/1.1“ 200 8482 „http://www.zuidaima.com/“ „Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, wie Gecko) Chrome/31.0.1650.57 Safari /537.36" "-" "0.020"

Das Statistikskript lautet wie folgt:

stat_ip.py

#encoding=utf8
import re
zuidaima_nginx_log_path="/ usr/local/nginx/ logs/www.zuidaima.com.access.log"
pattern = re.compile(r'^d{1,3}.d{1,3}.d{1,3} .d{1,3 }')
def stat_ip_views(log_path):
ret={}
f = open(log_path, "r")
for line in f:
match = pattern.match(line )
if match:
ip=match.group(0)
if ip in ret:
views=ret[ip]
else:
             Ansichten =0
          = Aufrufe+1
RET [IP] = Aufrufe
RETURN RET
DEF RUN ():
IP_Views = Stat_ip_views (zuidaima_nginx_log_path)
max_ip_view = { } für IP in ip_views:
views=ip_views[ip]
if len(max_ip_view)==0:
max_ip_view[ip]=views
else:
_ip=max_ip_view.keys() [ 0]
_views=max_ip_view[_ip]
if views>_views:
max_ip_view[ip]=views
max_ip_view.pop(_ip)
           print "ip:", ip, " ,views:", Ansichten
​ #Wie viele IPs gibt es insgesamt
​​ print "total:", len(ip_views)
​​ #Die maximal besuchte IP
​​ print " max_ip_view:", max_ip_view
run()
Die laufenden Ergebnisse sind wie folgt:


IP: 221.221.155.53, Aufrufe: 1

IP: 221.221.155.54, Aufrufe: 2
Gesamt: 2
max_ip_view : {' 221.221.155.54': 2}

Auf diese Weise werden die Besuche aller IPs und die Besuche der größten IP ermittelt.


Das Obige stellt vor, wie Python Client-IP-Besuche basierend auf Nginx-Zugriffsprotokollen zählt, einschließlich einiger Aspekte davon. Ich hoffe, es wird für Freunde hilfreich sein, die an PHP-Tutorials interessiert sind.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn