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("插入成功。。。")
python读取日志,存入mysql的更多相关文章
- Python Json分别存入Mysql、MongoDB数据库,使用Xlwings库转成Excel表格
将电影数据 data.json 数据通过xlwings库转换成excel表格,存入mysql,mongodb数据库中.python基础语法.xlwings库.mysql库.pymongo库.mongo ...
- 【Python】python读取文件操作mysql
尾大不掉,前阵子做检索测试时,总是因为需要业务端操作db和一些其他服务,这就使得检索测试对环境和数据依赖性特别高,极大提高了测试成本. Mock服务和mysql可以很好的解决这个问题,所以那阵子做了两 ...
- 1.6-1.7 定义agent 读取日志存入hdfs
一.定义agent,并运行 1.配置文件 #计划 ##收集hive的日志,存到hdfs /opt/cdh-5.3.6/hive-0.13.1-cdh5.3.6/logs/hive.log 命令:tai ...
- python处理日志文件
python处理日志文件 1 打开日志文件 虽然,日志文件的后缀为.log,但是基本上与文本文件没有区别,按照一般读取文本文件的方式打开即可: fp =open("e:\\data.log& ...
- Python进阶----索引原理,mysql常见的索引,索引的使用,索引的优化,不能命中索引的情况,explain执行计划,慢查询和慢日志, 多表联查优化
Python进阶----索引原理,mysql常见的索引,索引的使用,索引的优化,不能命中索引的情况,explain执行计划,慢查询和慢日志, 多表联查优化 一丶索引原理 什么是索引: 索引 ...
- 大数据学习day20-----spark03-----RDD编程实战案例(1 计算订单分类成交金额,2 将订单信息关联分类信息,并将这些数据存入Hbase中,3 使用Spark读取日志文件,根据Ip地址,查询地址对应的位置信息
1 RDD编程实战案例一 数据样例 字段说明: 其中cid中1代表手机,2代表家具,3代表服装 1.1 计算订单分类成交金额 需求:在给定的订单数据,根据订单的分类ID进行聚合,然后管理订单分类名称, ...
- 将主机IDS OSSEC日志文件存入MYSQL的方法
将主机IDS OSSEC日志文件存入MYSQL的方法 http://www.freebuf.com/articles/system/6139.html http://ossec-docs.readth ...
- python 读取本地文件批量插入mysql
Uin_phone.txt 本地文件内容 有1000条,这里只是展示前几条,供参考 133584752 133584759 133584764 133584773 133584775 13358477 ...
- mysql timestamp为0值时,python读取后的对象为None
MySQL数据表中,如果timestamp类型的字段,值为0, python从数据库读取数据后,得到对象是什么类型,是否为None呢? 下面来测试下. 创建数据表 首先创建数据表,其中字段pr_rul ...
随机推荐
- Office365学习笔记—列表查询,删除条目,更新条目。
1,基于Query语句的列表查询. function retrieveListItems(itemId) { var siteUrl=_spPageContextInfo.webServerRelat ...
- iOS之创建通知、发送通知和移除通知的坑
1.创建通知,最好在viewDidLoad的方法中创建 - (void)viewDidLoad { [super viewDidLoad]; //创建通知 [[NSNotificationCenter ...
- NodeJ Koa2 安装使用 reeber
介绍 Koa 是由 Express 原班人马打造的,致力于成为一个更小.更富有表现力.更健壮的 Web 框架. 使用 koa 编写 web 应用,通过组合不同的 generator,可以免除重复繁琐的 ...
- 『ACM C++』 PTA 天梯赛练习集L1 | 007-011
真的是忙头晕了,学业.ACM打题.班级活动.自学新东西,哇这充实的大学~ ------------------------------------------------L1-007--------- ...
- mount/umount命令
挂载及卸载指定的文件系统 mount [选项] [-L<标签>] [-o<选项>] [-t<文件系统类型>] [设备名] [挂载点] umount [挂载点] -a ...
- md5加密+盐方式一
这种方法是采用随机生成盐值加入password中组合成的新密码,下面是md5+盐的一个工具类,直接导入使用即可! 工具类 package com.oracle.utils; import java.s ...
- ubuntu下安装应用(搜狗输入法)
- Flask之app实例的参数配置
说是app实例的配置, 实际也就是flask程序的配置 Flask 是一个非常灵活且短小精干的web框架 , 那么灵活性从什么地方体现呢? 有一个神奇的东西叫 Flask配置 , 这个东西怎么用呢? ...
- 大数据学习--day06(Eclipse、数组)
Eclipse.数组 Eclipse 的基本设置 调节控制条字体大小. Window -> Preferences -> General -> Appearance -> ...
- ruby做接口测试
一. 工具选择 IDE:rubymine:http接口请求:Unirest,ruby单元测试框架:rspec 二.工程创建 新建工程,在工程目录下,执行:rspec --init:初始化rspec工程 ...