前言
我很在意的一件事情是好看,嗯,好看。以及是否有趣。虽然不一定有用。
下面是效果图,由于数据量有限,所以还不够眼花缭乱。
本文的主要内容是通过echarts, threejs将web日志或者任何含有IP数据的文本文件可视化。简单的来说,装逼,可以将这个动态图放在大屏幕上。
所有源码及相关数据文件请访问下面github仓库https://github.com/youerning/blog/tree/master/ip-visualize
前提条件
-
<李>熟悉python及框架瓶李>
<李>熟悉JavaScript李>
获取数据
IP数据
数据获取方式
-
<李>日志文件李>
<李>麋鹿三件套李>
<李>其他李>
归根结底数据最终来自日志文件,这里主要指网络日志。
这里使用我自己网站的网络日志,格式如下。
<代码> ' 116.24.64.239——(12/3月/2018:18:58:40 + 0800)“/HTTP/2.0“502 365 \ n” … 116.24.64.239——[12/3月/2018:18:54:55 + 0800]GET/HTTP/2.0 200 1603 \ n 代码>
通过下面代码将IP地址拿出来。
<代码> #打开日志文件 fp=开放(“website.log”) #创建ip集合,由于这里只需要ip地址,所以用集合的特性去重 ip_set=组() #通过循环每次读取日志一行,如果日志量大建议以下方式,日志文件不大,可以直接readline,一次性全部读取出来, 而真正的: 行=fp.readline () 如果len (line.strip ()) & lt;1: 打破 ip=line.split () [0] ip_set.add (ip) #访问用户IP的个数 len (ip_set) #查看前20个IP 列表(ip_set) (20): [' 111.206.36.133 ', “220.181.108.183”, “40.77.178.63”, “220.181.108.146”, “119.147.207.152”, “112.97.63.49”, “66.249.64.16”, “138.246.253.19”, “123.125.67.164”, “40.77.179.59”, “66.249.69.170”, “119.147.207.144”, “66.249.79.108”, “157.55.39.23”, “123.125.71.80”, “42.236.10.84”, “123.125.71.79”, “111.206.36.10”, “106.11.152.155”, ' 66.249.66.148 '] 不过为了使用广泛这里使用正则表达式。 进口再保险 帕特=" \ d {1,3} \ \ d {1,3} \。。\ d {1,3} \ \ d {1,3}”。 ipfind=re.compile (pat) 行=' 116.24.64.239——[12/3月/2018:18:54:55 + 0800]“得到/HTTP/2.0”200 1603 \ n” ip=ipfind.findall(线) 如果知识产权: ip=ip [0] 打印(ip) 下面是完整步骤 #创建ip列表 ip_lis=列表() #文件的日志 文件=水珠(“日志/*”) # complie正则表达式 帕特=" \ d {1,3} \ \ d {1,3} \。。\ d {1,3} \ \ d {1,3}”。 ipfind=re.compile (pat) #从每个文件中提取ip 日志文件的文件: 张开(日志文件)作为外交政策: #通过循环每次读取日志一行,如果日志量大建议以下方式,日志文件不大,可以直接readline,一次性全部读取出来 #如果太大则用readline一行一行的读 行=fp.readlines () 线的线: 如果len (line.strip ()) & lt;1: 继续 ip=ipfind.findall(线) 如果知识产权: ip=ip [0] ip_lis.append (ip) 代码>
至此,我们将访问文件里面的IP拿的出来了。
值得注意的是:如果你有搭建麋鹿之类的日志集群,那么获取数据会更简单更快,只是方式不同而已。这里就不赘述了。
引用>IP地址的地理信息
如果只是拿到IP数据,在本文并没有用,因为为了在地图上可视化每一个IP的位置,我们需要知道每个IP地址的地理信息,即,经纬度,所在城市等。
这里使用dev.maxmind.com提供的开源免费的geoip数据库。
下载地址:https://dev.maxmind.com/geoip/geoip2/geolite2/
这里不保证IP地址对应的位置信息绝对正确。为了保证IP地址的准确性,可以搜索在线的地理服务。
引用>为了使用上面下载的数据库,首先得下载相应的模块。
面子工程之IP数据可视化