Python网页分析,分析网站的日志数据

news/2024/5/20 12:28:58/文章来源:https://blog.csdn.net/weixin_39363245/article/details/108272274

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

以下文章来源于大话数据分析,作者:尚天强

网站的日志数据记录了所有Web对服务器的访问活动,本节通过Python第三方库解析网站日志,利用pandas对网站日志数据进行预处理,并用可视化技术,对于网站日志数据进行分析。

PS:如有需要Python学习资料的小伙伴可以加下方的群去找免费管理员领取

 

可以免费领取源码、项目实战视频、PDF文件等

 

数据来源

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import apache_log_parser        # 首先通过 pip install apache_log_parser 安装库
%matplotlib inline
fformat = '%V %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %T'  # 创建解析器
p = apache_log_parser.make_parser(fformat)
sample_string = 'koldunov.net 85.26.235.202 - - [16/Mar/2013:00:19:43 +0400] "GET /?p=364 HTTP/1.0" 200 65237 "http://koldunov.net/?p=364" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11" 0'
data = p(sample_string) #解析后的数据为字典结构
data

 

datas = open(r'H:\python数据分析\数据\apache_access_log').readlines()  #逐行读取log数据
log_list = []  # 逐行读取并解析为字典
for line in datas:
data = p(line)
data['time_received'] = data['time_received'][1:12]+' '+data['time_received'][13:21]+' '+data['time_received'][22:27] #时间数据整理
log_list.append(data)    #传入列表
log = pd.DataFrame(log_list)   #构造DataFrame
log = log[['status','response_bytes_clf','remote_host','request_first_line','time_received']]   #提取感兴趣的字段
log.head()
#status 状态码 response_bytes_clf 返回的字节数(流量)remote_host 远端主机IP地址 request_first_line 请求内容t ime_received 时间数据

 

日志数据清洗

log.isnull().sum() # 查看缺失值

 

log['time_received'] = pd.to_datetime(log['time_received']) #把time_received字段转换为时间数据类型,并设置为索引
log = log.set_index('time_received')
log.head()

 

log.dtypes # 查看类型

 

log['status'] = log['status'].astype('int') # 转换为int类型
log['response_bytes_clf'].unique()
array(['26126', '10532', '1853', ..., '66386', '47413', '48212'], dtype=object)
log[log['response_bytes_clf'] == '-'].head() #对response_bytes_clf字段进行转换时报错,查找原因发现其中含有“-”

 

def dash2nan(x):    # 定义转换函数,当为“-”字符时,将其替换为空格,并将字节数据转化为M数据if x == '-':
x = np.nanelse:
x = float(x)/1048576return x
log['response_bytes_clf'] = log['response_bytes_clf'].map(dash2nan)
log.head()

 

log.dtypes

 

 

日志数据分析

log['response_bytes_clf'].plot()

 

流量起伏不大,但有一个极大的峰值超过了20MB。

log[log['response_bytes_clf']>20] #查看流量峰值

 

t_log = log['response_bytes_clf'].resample('30t').count()
t_log.plot()

对时间重采样(30min),并计数 ,可看出每个时间段访问的次数,早上8点访问次数最多,其余时间处于上下波动中。

 

h_log = log['response_bytes_clf'].resample('H').count()
h_log.plot()

当继续转换频率到低频率时,上下波动不明显。

 

d_log = pd.DataFrame({'count':log['response_bytes_clf'].resample('10t').count(),'sum':log['response_bytes_clf'].resample('10t').sum()})    
d_log.head()

 

构造访问次数和访问流量的 DataFrame。

plt.figure(figsize=(10,6))   #设置图表大小
ax1 = plt.subplot(111)    #一个subplot
ax2 = ax1.twinx()     #公用x轴
ax1.plot(d_log['count'],color='r',label='count')
ax1.legend(loc=2)
ax2.plot(d_log['sum'],label='sum')
ax2.legend(loc=0)

 

绘制折线图,有图可看出,访问次数与访问流量存在相关性。

IP地址分析

ip_count = log['remote_host'].value_counts()[0:10] #对remote_host计数,并取前10位
ip_count

 

ip_count.plot(kind='barh') #IP前十位柱状图

 

import pygeoip # pip install pygeoip 安装库
# 同时需要在网站上(http://dev.maxmind.com/geoip/legacy/geolite)下载DAT文件才能解析IP地址
gi = pygeoip.GeoIP(r'H:\python数据分析\数据\GeoLiteCity.dat', pygeoip.MEMORY_CACHE)
info = gi.record_by_addr('64.233.161.99')
info #解析IP地址

 

ips = log.groupby('remote_host')['status'].agg(['count']) # 对IP地址分组统计
ips.head()

 

ips.drop('91.224.246.183',inplace=True)ips['country'] = [gi.record_by_addr(i)['country_code3'] for i in ips.index] # 将IP解析的国家和经纬度写入DataFrame
ips['latitude'] = [gi.record_by_addr(i)['latitude'] for i in ips.index]
ips['longitude'] = [gi.record_by_addr(i)['longitude'] for i in ips.index]ips.head()

 

country = ips.groupby('country')['count'].sum() #对country字段分组统计
country = country.sort_values(ascending=False)[0:10] # 筛选出前10位的国家
country

 

country.plot(kind='bar')

 

俄罗斯的访问量最多,可推断该网站来源于俄罗斯。

from mpl_toolkits.basemap import Basemapplt.style.use('ggplot')
plt.figure(figsize=(10,6))map1 = Basemap(projection='robin', lat_0=39.9, lon_0=116.3,
resolution = 'l', area_thresh = 1000.0)map1.drawcoastlines()
map1.drawcountries()
map1.drawmapboundary()map1.drawmeridians(np.arange(0, 360, 30))
map1.drawparallels(np.arange(-90, 90, 30))size = 0.03
for lon, lat, mag in zip(list(ips['longitude']), list(ips['latitude']), list(ips['count'])):
x,y = map1(lon, lat)
msize = mag * size
map1.plot(x, y, 'ro', markersize=msize)

 

本文首发于python黑洞网,csdn同步更新

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_710651.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于django快速开发一个网站(一)

* 创建虚拟环境、基于虚拟环境创建django2.0.0和图片加载库和mysql数据库驱动 1. 创建目录并创建虚拟环境 ╰$ mkdir Cornucopiavirtualenv ╰$ cd Cornucopiavirtualenv ╰$ virtualenv env1 2. 进入bin目录,并激活虚拟环境 ╰$ cd bin ╰$ source activate …

发现一个好看的手机壁纸网站,撸代码的手已经饥渴难耐了

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。 最近有同学的爬虫代码出了bug,给问我怎么改 于是就发现了这个好看的手机壁纸网站。 看到那么多好看的壁纸,我的爬虫已经饥渴难耐…

浅谈web网站架构演变过程

前言我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变。该系统具备的功能:用户模块:用户注册和管理商品模块:商品展示和管理交易模块:创建交易和管理阶段一、单机构建网站网站的…

php域名墙检测,php 网站域名被墙判断请求方法

可以使用exec去进行查询判断,判断traceroute to 出的ip和最后追踪到的IP是否匹配,如果不匹配可能就被墙了。也可以有个保险的方法,去请求下看是否有返回数据没有基本就是墙了。查询命令方法:traceroute --tcp youtubemy.com[rootl…

思科模拟器企业网站服务器配置,思科模拟器服务器配置

思科模拟器服务器配置 内容精选换一换虚拟IP(Virtual IP Address,简称VIP)是一个未分配给真实弹性云服务器网卡的IP地址。弹性云服务器除了拥有私有IP地址外,还可以拥有虚拟IP地址,用户可以通过其中任意一个IP(私有IP/虚拟IP)访问此弹性云服务…

推荐95个极富创意的单页网站设计实例欣赏

随着网络带宽的快速提升,越来越多的Web视觉设计师开始将自己的网页设计推向单页面的表现形式,他们在不断的尝试各种令人耳目一新的设计方案,像下面的这些例子有很多都是出自个人网站,使用JavaScript来实现单页面内的内容切换&…

30 个用于杂志网站的 WordPress 主题

WordPress 已经形成了一个非常完善的生态链,为 WordPress 开发的各种插件、主题越来越丰富。本文介绍 30 个适用于杂志网站使用的 WordPress 主题,其中也包含一些收费的主题,制作非常精美。 免费的 WordPress 杂志主题 Snips DotNews Render …

网站安全检测 Web 安全测试工具

随着 Web 应用越来越广泛,Web 安全威胁日益凸显。黑客利用网站操作系统的漏洞和 Web 服务程序的 SQL 注入漏洞等得到Web服务器的控制权限,轻则篡改网页内容,重则窃取重要内部数据,更为严重的则是在网页中植入恶意代码,…

SharePoint 2010设计(Design)权限能操作的网站操作菜单项

在SharePoint平台中有经典的5大权限:完全控制、设计、参与讨论、只读、仅查看。其中设计权限与完全控制权限有些相似,而只读和仅查看基本上差不多,参与讨论权限主要是针对内容管理的。设计权限在SharePoint 2010里是不能设置权限的&#xff0…

ubuntu服务器网站备份,用 Ubuntu 建立 Time Machine 备份服务器

用 Ubuntu 建立 Time Machine 备份服务器:1、安装 Netatalksudo apt-get install netatalk2、设置 Time Machine 备份文件存放位置, 假设位置在 /backup/TimeMachinesudo vi /etc/netatak/AppleVolumes.default#~/ "Home Directory"/backup/TimeMachine &…

arcgis制作瓦片地图_挖掘Dark Sky Maps(热的要死后,疯传的一个气温地图网站)...

最近,各种朋友圈,社会媒体,都在疯传一张图,这张图显示的全球的气温图,本没有什么特别的,但是这张图的网站来源所展示的数据与气象局或者各种天气预报的温度值相差倒是不少,引来一片网友的吐槽。…

django 跳转其他网站_Django 实战 | 搭一个 GitHub 用户展示网站 04

一、搜索页面跳转在 urls.py 中添加一个 user 路径:from django.urls import path from . import viewsurlpatterns [path(, views.home, name"home"),path(user/, views.user, name"user"), ]在 views.py 中添加一个 user 方法:de…

使用LogParser分析IIS网站日志

LogParser是个强大的,多功能的分析工具,它统一的查询方式适用于各种文本类型文件(例如日志文件,XML文件,CSV文件)和操作系统层面数据文件(例如事件日志,注册表,文件系统&…

Webydo:一款在线自由创建网站的 Web 应用

Webydo 是一款专业的在线建站应用,使平面设计师可以创建和管理 HTML 网站,而无需编写代码。设计人员可以设计任何类型网站,只需要点击按钮,就能够发布先进的 HTML 网站。 你可以控制所有的设计组件,如:元素…

元素“Button”不是已知元素。原因可能是网站中存在编译错误,或者缺少web.config文件...

最近开发的时候ASP控件都有波浪下划线,提示不是已知元素,搞得挺郁闷的。虽然不影响变异,不过就是不爽。 折腾N久...... 解决了,把FramWork平台换成3.5,问题解决,不知道为啥,求大神指点。 问题描…

优化网站设计(三):对资源添加缓存控制

前言 网站设计的优化是一个很大的话题,有一些通用的原则,也有针对不同开发平台的一些建议。这方面的研究一直没有停止过,我在不同的场合也分享过这样的话题。 作为通用的原则,雅虎的工程师团队曾经给出过35个最佳实践。这个列表请参考 Best Practices fo…

网站服务器上加入三层开发的网站错误解决

在网站服务器上添加三层开发的网站,发现网站打开的时候提示Server Error in / Application.截图如下 解决办法: 1,把文件夹中的bin文件夹移动到上一目录下,比如放入该文件的路径是root根目录,然后新建test目录,上传网站…

网站常用颜色代码

文字灰:#999 按钮红:#b50000 转载于:https://www.cnblogs.com/shinima/p/5441501.html

隐藏a标签seo_SEO网站优化,新手SEO常犯的五个错误!

进入搜索引擎优化领域,门槛其实并不高,基础性的知识就那么多,但有个小问题是,很多SEO教程对部分内容解释并不详尽,容易造成很多错误的观念,特别是对于SEO初学者而言,正确的理解SEO基础知识很重要…

购物网站 前台后台 思维导图_「培哥学堂」60套思维导图PPT送给你,让你的工作事半功倍!(建议收藏)...

点击👆培哥学堂👆关注,回复懒人免费领取一套懒人PPT素材包大家好,我是培哥。在工作中,我们常需要一些帮助我们的提高工作效率的技能技巧,而思维导图就是其中的一种。思维导图,被称为“大脑的瑞士…