通过python操作GeoLite2-City.mmdb库将nginx日志访问IP转换为城市写入数据库
通过python操作GeoLite2-City.mmdb库将nginx日志写入数据库
# 创建存放nginx日志的表accesslog2
- CREATE TABLE `accesslog2` (
- `id` bigint(20) NOT NULL AUTO_INCREMENT,
- `logtime` datetime DEFAULT NULL,
- `ip` varchar(128) DEFAULT NULL,
- `url` text,
- `status` int(11) DEFAULT NULL,
- `lat` float DEFAULT NULL,
- `lng` float DEFAULT NULL,
- `city` varchar(50) DEFAULT NULL,
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB AUTO_INCREMENT=896 DEFAULT CHARSET=utf8;
# 安装geoip2模块
# sudo pip2 install geoip2
- #encoding=utf-8
- import time
- import geoip2.database
- from dbutils import MysqlConnection
- # 找出ip所在城市的日志处理
- def log_2db_4map(log_file):
- # 清空数据库信息
- MysqlConnection.execute_sql('truncate table accesslog2')
- path=log_file
- shandle = open(path, 'r')
- log_dict = {}
- # 读取ip数据库
- reader = geoip2.database.Reader('GeoLite2-City.mmdb')
- while True:
- line = shandle.readline()
- if line == '':
- break
- _nodes = line.split()
- # 访问url,来访ip,http状态码,访问时间
- _url,_ip,_status,_lgtime = _nodes[6], _nodes[0], _nodes[8],_nodes[3][1:]
- # 将日志访问的时间"22/Oct/2017:03:28:01"转成 2017-11-23 10:08:18 类似的格式
- _ltime = time.strftime('%Y-%m-%d %H:%M:%S',time.strptime(_lgtime,'%d/%b/%Y:%H:%M:%S'))
- # 获取城市信息
- try:
- response = reader.city(_ip)
- # 如果国家不是中国跳出本次循环
- if 'China' != response.country.name:
- continue
- # 获取城市
- _city = response.city.names.get('zh-CN','')
- if _city == '':
- print 'ip: %s city is empty' % _ip
- continue
- # 获取经度和纬度
- _lat = response.location.latitude
- _lng = response.location.longitude
- # print response
- except Exception as e:
- print 'goe has not %s info' % _ip
- _args = (_ltime,_ip,_url,_status, _lat,_lng,_city)
- # 插入数据库语句
- sql = 'insert into accesslog2(logtime, ip, url,status,lat,lng,city) values(%s, %s, %s,%s,%s,%s,%s)'
- MysqlConnection.execute_sql(sql, _args)
- # 关闭文件句柄
- shandle.close()
- # 文件入口
- if __name__ == '__main__':
- # nginx日志文件
- log_file = 'www_access.log'
- rt_list = log_2db_4map(log_file = log_file)
连接数据库和操作数据库的底层模块参考:
python操作mysql数据库增删改查的dbutils实例
http://www.cnblogs.com/reblue520/p/7884365.html
通过python操作GeoLite2-City.mmdb库将nginx日志访问IP转换为城市写入数据库的更多相关文章
- python 操作excle 之第三方库 openpyxl学习
目录 python 操作excle 之第三方库 openpyxl学习 安装 pip install openpyxl 英文文档链接 : 点击这里~ 1,定位excel 2,读取excle中的内容 3, ...
- 操作文件-取出一个60s内log日志中ip访问次数超过100次的ip
import timea=0while True: d={} f = open(r"/Users/**juan/Downloads/access.log",encoding=&qu ...
- 数据库之redis篇(3)—— Python操作redis
虽然前面两篇已经说了redis的一些配置安装什么的,篇幅有点长,可能看完了也不知道怎么操作,这里再浓缩一下: 什么是redis redis完全开源免费的,遵守BSD协议,是一个高性能的非关系型key- ...
- 【踩坑记录】记录一次使用Python logging库多进程打印日志的填坑过程
背景: 项目使用Python自带的logging库来打印日志 项目部署在一台Centos7的机器上 项目采用gunicorn多进程部署 过程: 1.LOG日志代码封装: 采用logging库,并设置w ...
- 学会用Python操作Mongodb
在linux下,用pip导包. pip install pymongo python操作基本步骤: 导包 建立连接,建立客户端. 获取数据库 获取集合 对数据操作 import pymongo #建立 ...
- 利用python分析nginx日志
最近在学习python,写了个脚本分析nginx日志,练练手.写得比较粗糙,但基本功能可以实现. 脚本功能:查找出当天访问次数前十位的IP,并获取该IP来源,并将分析结果发送邮件到指定邮箱. 实现前两 ...
- python操作Excel,你觉得哪个库更好呢?
对比学习python,更高效~ Excel数据的类型及组织方式 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知 ...
- Python 操作 MS Excel 文件
利用 Python 对 Excel 文件进行操作需要使用第三方库: openpyxl,可执行 pip install openpyxl 进行安装 1. 导入 openpyxl 模块 导入 openpy ...
- python学习笔记-(十六)python操作mysql
一. mysql安装 1. windows下安装mysql 1.1. 下载源: http://dev.mysql.com/downloads/installer/,请认准对应版本 Windows (x ...
随机推荐
- 学习总结:CSS(一)定义方式、选择器、选择器权重
一.CSS的定义方式 1.内部样式:<style></style> 2.行间样式:<div style="width:100px;height:100px;&q ...
- 【1】【leetcode-93】复原IP地址
(不会,典型) 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式. 示例: 输入: "25525511135" 输出: ["255.255.11.135 ...
- Shell编程(五)脚本语法
${}: 数据“内容”删除,替换:{}: 列表 1. 条件测试: test =~:正则匹配 2. if/then/elif/else/fi #!/bin/bash echo "Is it o ...
- Shell编程(三)Shell特性
!$:显示上一条命令最后一个参数 $?: 上个命令的退出状态,或函数的返回值. alias xxx="命令":给命令取别名 xxx 通过 vim ~/.bashrc 里编辑,可以来 ...
- hadoop的基本概念 伪分布式hadoop集群的安装 hdfs mapreduce的演示
hadoop 解决问题: 海量数据存储(HDFS) 海量数据的分析(MapReduce) 资源管理调度(YARN)
- 六、文件IO——fcntl 函数 和 ioctl 函数
6.1 fcntl 函数 6.1.1 函数介绍 #include <unistd.h> #include <fcntl.h> int fcntl(int fd, int cmd ...
- Generic XXE Detection
参考连接:https://www.christian-schneider.net/GenericXxeDetection.html In this article I present some tho ...
- EL 快速开始
技术选型上,推荐使用EL表达式,少用不用taglib. 大趋势 前后端分离 mvc+mvvm ,使用[thymeleaf]和前端更好结合,也是springboot官方推荐的做法. [viewTicke ...
- Xshell 无法连接虚拟机中的ubuntu的问题
转自:http://blog.csdn.net/qq_26941173/article/details/51173320 版权声明:本文为博主原创文章,未经博主允许不得转载. 昨天在VMware P ...
- kindeditor编辑器上传图片
使用的是asp.net MVC 上传图片. 1.下载Kindeditor的对应的包 2.html页面 @{ Layout = null; } <!DOCTYPE html> <htm ...