时间:2021-05-22
简介
想看看你最近一年都在干嘛?看看你平时上网是在摸鱼还是认真工作?想写年度汇报总结,但是苦于没有数据?现在,它来了。
这是一个能让你了解自己的浏览历史的Chrome浏览历史记录分析程序,当然了,他仅适用于Chrome浏览器或者以Chrome为内核的浏览器。
在该页面中你将可以查看有关自己在过去的时间里所访问浏览的域名、URL以及忙碌天数的前十排名以及相关的数据图表。
部分截图
代码思路
1. 目录结构
首先,我们先看一下整体目录结构
Code├─ app_callback.py 回调函数,实现后台功能├─ app_configuration.py web服务器配置├─ app_layout.py web前端页面配置├─ app_plot.py web图表绘制├─ app.py web服务器的启动├─ assets web所需的一些静态资源文件│ ├─ css web前端元素布局文件│ │ ├─ custum-styles_phyloapp.css│ │ └─ stylesheet.css│ ├─ image web前端logo图标│ │ ├─ GitHub-Mark-Light.png│ └─ static web前端帮助页面│ │ ├─ help.html│ │ └─ help.md├─ history_data.py 解析chrome历史记录文件└─ requirement.txt 程序所需依赖库该程序基于python,使用dash web轻量级框架进行部署。app_callback.py主要用于回调,可以理解为实现后台功能。
顾名思义,对web服务器的一些配置操作。
web前端页面配置,包含html, css元素。
这个主要是为实现一些web前端的图表数据。
web服务器的启动。
静态资源目录,用于存储一些我们所需要的静态资源数据。
通过连接sqlite数据库,并解析Chrome历史记录文件。
运行本程序所需要的依赖库。
2. 解析历史记录文件数据
与解析历史记录文件数据有关的文件为history_data.py文件。我们一一分析。
# 查询数据库内容def query_sqlite_db(history_db, query): # 查询sqlite数据库 # 注意,History是一个文件,没有后缀名。它不是一个目录。 conn = sqlite3.connect(history_db) cursor = conn.cursor() # 使用sqlite查看软件,可清晰看到表visits的字段url=表urls的字段id # 连接表urls和visits,并获取指定数据 select_statement = query # 执行数据库查询语句 cursor.execute(select_statement) # 获取数据,数据格式为元组(tuple) results = cursor.fetchall() # 关闭 cursor.close() conn.close() return results该函数的代码流程为:
连接sqlite数据库,执行查询语句,返回查询结构,最终关闭数据库连接。
该函数的代码流程为:
设置数据库查询语句select_statement,调用query_sqlite_db()函数,获取解析后的历史记录文件数据。并对返回后的历史记录数据文件按照不同元素规则进行排序。至此,经过排序的解析后的历史记录数据文件获取成功。
3. web服务器基本配置
与web服务器基本配置有关的文件为app_configuration.py和app.py文件。包括设置web服务器的端口号,访问权限,静态资源目录等。
4. 前端页面部署
与前端部署有关的文件为app_layout.py和app_plot.py以及assets目录。
前端布局主要包括以下几个元素:
在app_layout.py中,这些组件的配置大多一样,和平常的html, css配置一样,所以我们仅仅以配置页面访问次数排名组件为例子。
# 页面访问次数排名html.Div( style={'margin-bottom':'150px'}, children=[ html.Div( style={'border-top-style':'solid','border-bottom-style':'solid'}, className='row', children=[ html.Span( children='页面访问次数排名, ', style={'font-weight': 'bold', 'color':'red'} ), html.Span( children='显示个数:', ), dcc.Input( id='input_website_count_rank', type='text', value=10, style={'margin-top':'10px', 'margin-bottom':'10px'} ), ] ), html.Div( style={'position': 'relative', 'margin': '0 auto', 'width': '100%', 'padding-bottom': '50%', }, children=[ dcc.Loading( children=[ dcc.Graph( id='graph_website_count_rank', style={'position': 'absolute', 'width': '100%', 'height': '100%', 'top': '0', 'left': '0', 'bottom': '0', 'right': '0'}, config={'displayModeBar': False}, ), ], type='dot', style={'position': 'absolute', 'top': '50%', 'left': '50%', 'transform': 'translate(-50%,-50%)'} ), ], ) ])可以看到,虽然是python编写的,但是只要具备前端经验的人,都可以轻而易举地在此基础上新增或者删除一些元素,所以我们就不详细讲如何使用html和css了。
在app_plot.py中,主要是以绘制图表相关的。使用的是plotly库,这是一个用于具有web交互的画图组件库。
这里以绘制页面访问频率排名 柱状图为例子,讲讲如何使用plotly库进行绘制。
该函数的代码流程为:
5. 后台部署
与后台部署有关的文件为app_callback.py文件。这个文件使用回调的方式对前端页面布局进行更新。
首先,我们看看关于页面访问频率排名的回调函数:
# 页面访问频率排名@app.callback( dash.dependencies.Output('graph_website_count_rank', 'figure'), [ dash.dependencies.Input('input_website_count_rank', 'value'), dash.dependencies.Input('store_memory_history_data', 'data') ])def update(value, store_memory_history_data): # 正确获取到历史记录文件 if store_memory_history_data: history_data = store_memory_history_data['history_data'] figure = plot_bar_website_count_rank(value, history_data) return figure else: # 取消更新页面数据 raise dash.exceptions.PreventUpdate("cancel the callback")该函数的代码流程为:
首先确定好输入是什么(触发回调的数据),输出是什么(回调输出的数据),需要带上什么数据。dash.dependencies.Input指的是触发回调的数据,而dash.dependencies.Input('input_website_count_rank', 'value')表示当id为input_website_count_rank的组件的value发生改变时,会触发这个回调。而该回调经过update(value, store_memory_history_data)的结果会输出到id为graph_website_count_rank的value,通俗来讲,就是改变它的值。
对于def update(value, store_memory_history_data)的解析。首先是判断输入数据store_memory_history_data是否不为空对象,接着读取历史记录文件history_data,接着调用刚才所说的app_plot.py文件中的plot_bar_website_count_rank(),返回一个figure对象,并将这个对象返回到前端。至此,前端页面的布局就会显示出页面访问频率排名的图表了。
还有一个需要说的就是关于上次文件的过程,这里我们先贴出代码:
该函数的代码流程为:
首先判断用户上传的数据contents是否不为空,接着将客户端上传的文件进行base64解码。并且,为客户端上传的文件添加后缀,防止文件重复覆盖,最终将客户端上传的文件写入本地磁盘文件。
写入完毕后,使用sqlite读取本地磁盘文件,若读取正确,则返回解析后的数据,否则返回None
如何运行
在线演示程序:http://39.106.118.77:8090(普通服务器,勿测压)
运行本程序十分简单,只需要按照以下命令即可运行:
# 跳转到当前目录cd 目录名# 先卸载依赖库pip uninstall -y -r requirement.txt# 再重新安装依赖库pip install -r requirement.txt# 开始运行python app.py# 运行成功后,通过浏览器打开http://localhost:8090补充
完整版源代码存放在github上,有需要的可以下载
项目持续更新,欢迎您star本项目
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
要上网就必须连接宽带,如果你是笔记本的话,还可以利用连接无线网络来达到上网的目的,那么如果你是台式机,并没有无线网络的模块的话,大家基本都在用宽带拨号的上网方式
192.168.1.1 在弹出的Windows安全界面输入用户名:guest,密码:guest 点击如图所示的上网行为管理 第一步:增加上网行为管理的时间
Q:我的电脑平时使用静态IP地址上网,我该如何设置? A:您应该在路由器的上网方式中选择“静态IP”上网,具体操作步骤: 1、在
上网成了大多数人的日常活动,每天都在上网,你真的了解网站吗?你知道网页字体设置有这么要求吗?下面来为大家介绍一下关于网页字体的相关要求。 一、关于字体大小
网线是平时容易受忽视的一个东西,如果网线出问题了,会上网慢,打不开网站,甚至根本连不上网,而一根好的网线,不仅保证你网络畅通不会有掉线的情况,而且不容易受老化的