python讀取日誌,存入mysql

1、從 http://www.almhuette-raith.at/apache-log/access.log 下載 1萬條日誌記錄,保存爲一個文件,讀取文件並解析日誌,從日誌中提取ip, time_local, http_method, url, http_status, body_bytes_sent , http_referer, ua字段,以製表符分割。
在mysql中創建表,將剛纔解析後的結果存入mysql表中。

2、在mysql中,使用sql查詢出現次數最多的ip,以及該ip的訪問次數。 這裏寫代碼片

file_data

# coding:utf-8
# ip, time_local, http_method, url, http_status, body_bytes_sent , http_referer, ua
import re

data_all = {}
data_ev = {}

print("開始提取。。。")
with open("access_parts.log") as f:
    count = 1
    for line in f.readlines():
        line = line.strip('\n')
        line = re.split("\s|-", line)
        # print(line)
        data_ev["ip"] = line[0]
        data_ev["time_local"] = line[5].split('[')[1]
        data_ev["http_method"] = line[7].split('"')[1]
        data_ev["url"] = line[8]
        data_ev["http_status"] = line[9]
        if line[10] == '-':
            data_ev["body_bytes_sent"] = 0
        else:
            data_ev["body_bytes_sent"] = line[10]
        data_ev["http_referer"] = line[11].split('"')
        data_ev["ua"] = ' '.join(line[12:23]).split('"')
        if data_ev["http_method"] == 'GET':
            data_ev["ua"] = data_ev["ua"][3]
        else:
            data_ev["ua"] = data_ev["ua"][1] + data_ev["ua"][3]
        print(data_ev)
        data_all[count] = data_ev
        # print("已完成"+count+"行。。。")
        count += 1




database

# coding:utf-8
from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData, ForeignKey
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from file_data import data_all

BaseModel = declarative_base()
print("開始連接數據庫。。。")
DB_CONNECT = 'mysql+pymysql://root:123456@localhost:3306/test'
engine = create_engine(DB_CONNECT, echo=True)
DB_Session = sessionmaker(bind=engine)
session = DB_Session()
print("連接成功。。。")

class Access(BaseModel):
    print("111")
    __tablename__ = 'data'
    id = Column(Integer(), primary_key=True)
    ip = Column(String(50))
    time_local = Column(String(50))
    http_method = Column(String(50))
    http_status = Column(String(50))
    body_bytes_sent = Column(String(50))
    http_referer = Column(String(50))
    ua = Column(String(500))

def init_db():
    BaseModel.metadata.create_all(engine)
def drop_db():
    BaseModel.metadata.drop_all(engine)

drop_db()
init_db()

main

# 數據處理
# coding:utf-8
from file_data import data_all
from database import Access
from database import session

for k,v in data_all.items():
    print("開始插入。。。")
    access_ = Access(ip=v["ip"], time_local=v["time_local"], http_method=v["http_method"],  http_status=v["http_status"], body_bytes_sent=v["body_bytes_sent"],  http_referer=v["http_referer"], ua=v["ua"])
    session.add(access_)
    session.commit()
    print("插入成功。。。")
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章