1. 程式人生 > >python讀取日誌,存入mtsql

python讀取日誌,存入mtsql

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("插入成功。。。")