主题:如何使用 Python 分析 Web 访问日志
内容
Python 基础
字符串、字典、文件、时间
Web 访问日志
实战
提问
主讲师:KK
多语言混搭工程师,热爱开源技术,喜欢GET新技能,5年 PHP、Python 项目开发经验,带领团队完成多个中、小型项目开发,对安全、云等多个领域富有浓厚兴趣,擅长于 WEB 安全开发、性能优化、分布式应用开发&设计等多方面,做事认真负责,乐于分享技能,现任 51Reboot.com Python 实战班讲师
任何语言都有使用场景,只有合适和不合适,没有好坏。语言是工具,用来描述让计算机如何工作,想法(思路&算法)是基础,也是重点。
字符串
像姓名、一句话描述这样的文
使用单引号、双引号、三个单引号或三个双引号引起来的一些字符
字符串有哪些函数
split分隔字符串为list
format 格式化字符串
字典定义
定义
使用大括号包含
每个元素为key:value的格式
元素之间使用逗号分隔
练习
一、统计 list 中每个元素出现的次数
languages = ['python', 'java', 'python', 'c', 'c++', 'go', 'c#', 'c++', 'lisp', 'c', 'javascript', 'java', 'python', 'matlab', 'python', 'go', 'java']
提示:
统计结果为 element:count 的形式,统计结果采用 dict 从左到右依次遍历 list 中元素,判断是否在 dict 中,如果不在则将 element 存入 dict 并设置 count 为 1,否则将 dict中element 对应的 count 加 1 后再存储到dict中。
二、统计文章中每个英文字母出现的次数
article = 'I was not delivered unto this world in defeat, nor does failure course in my veins. I am not a sheep waiting to be prodded by my shepherd. I am a lion and I refuse to talk, to walk, to sleep with the sheep. I will hear not those who weep and complain, for their disease is contagious. Let them join the sheep. The slaughterhouse of failure is not my destiny.'
提示:判断是否为英文单词
if (element > ‘a’ and element < ‘z’) or (element > ‘A’ and element < ‘Z’)
字典的 Key
Key 必须为不可变数据类型
数字
整数
浮点数
字符串
布尔类型
列表 X
元组
子元素必须也不可变(“a”, “b”)
("a", ["b“]) X
字典 X
字典有哪些函数
文件
自己在电脑上打开 word 文件的操作顺序
在计算机盘符中找到对应的文件
鼠标双击打开文件(选择查阅的工具)
查阅文件内容/编辑文件内容
如果有编辑文件内容保存文件
关闭文件
文件操作
打开文件
fhandler = open(path, mode, …)
path 为文件路径
mode 为打开文件方式及文件类型
mode
打开文件方式
r
读(默认)
w
写
x
创建并写
a
追加
r+
读写
w+
写读
x+
创建并写读
a+
追加读
关闭文件
fhandler.close()
mode
文件类型
t
文本(默认)
b
二进制
遍历文件内容
时间
Web 访问日志
Web 访问日志是 Web 服务器记录的网站被访问的过程日志
日志属性
什么时候
什么人
通过什么工具
以什么方式
访问了什么资源
结果是什么(状态/返回数据大小)
Web 访问日志日志格式
通用日志格式
127.0.0.1 - - [14/May/2017:12:45:29 +0800] "GET /index.html HTTP/1.1" 200 4286
远程 - - 主机 IP 请求时间 时区 方法 资源 协议 状态码 发送字节
组合日志格式
127.0.0.1 - - [14/May/2017:12:51:13 +0800] "GET /index.html HTTP/1.1" 200 4286 "http://127.0.0.1/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36“
远程主机 IP - - 请求时间 时区 方法 资源 协议 状态码 发送字节 referer 字符 浏览器信息
Web访问日志日志示例
实战
统计以下数据
需要根据IP获取地理位置
每天的日志中每行流量之和、总的流量之和(每天流量之和)
每种状态码出现的次数
每天的不重复的IP的数量、总的不重复的IP数量(每天不重复的IP数量 之和???)
每天的日志行数、日志的总行数(每天的日志行数之和)
统计每天的点击量、总点击数量
统计每天的浏览者数量、总浏览者数量
统计总状态码分布
统计每天流量大小、总的流量大小
统计访问地域分布及访问次数 TOP20
运行
分析
按天统计
每天日志行数
每天浏览每个 IP 的访问次数
每天访问者数量 = 每天出现 IP 组成集合的数量
每天状态码出现次数
每天流量总数
总统计
总日志行数 = 每天日志行数之和
总访问者数量 = 所有出现 IP 组成的集合数量
地域分布
所有出现 IP 的访问次数 排序取 TOP20
根据 IP 查找地理位置
代码
统计每天信息
统计总数据
统计区域数据
打印结果