本文整理自网络,侵删。
简介
想看看你最近一年都在干嘛?看看你平时上网是在摸鱼还是认真工作?想写年度汇报总结,但是苦于没有数据?现在,它来了。
这是一个能让你了解自己的浏览历史的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 程序所需依赖库
- app_callback.py
该程序基于python,使用dash web轻量级框架进行部署。app_callback.py主要用于回调,可以理解为实现后台功能。
- app_configuration.py
顾名思义,对web服务器的一些配置操作。
- app_layout..py
web前端页面配置,包含html, css元素。
- app_plot.py
这个主要是为实现一些web前端的图表数据。
- app.py
web服务器的启动。
- assets
静态资源目录,用于存储一些我们所需要的静态资源数据。
- history_data.py
通过连接sqlite数据库,并解析Chrome历史记录文件。
- requirement.txt
运行本程序所需要的依赖库。
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数据库,执行查询语句,返回查询结构,最终关闭数据库连接。
# 获取排序后的历史数据 def get_history_data(history_file_path): try: # 获取数据库内容 # 数据格式为元组(tuple) select_statement = "SELECT urls.id, urls.url, urls.title, urls.last_visit_time, urls.visit_count, visits.visit_time, visits.from_visit, visits.transition, visits.visit_duration FROM urls, visits WHERE urls.id = visits.url;" result = query_sqlite_db(history_file_path, select_statement) # 将结果按第1个元素进行排序 # sort和sorted内建函数会优先排序第1个元素,然后再排序第2个元素,依此类推 result_sort = sorted(result, key=lambda x: (x[0], x[1], x[2], x[3], x[4], x[5], x[6], x[7], x[8])) # 返回排序后的数据 return result_sort except: # print('读取出错!') return 'error'
该函数的代码流程为:
设置数据库查询语句select_statement,调用query_sqlite_db()函数,获取解析后的历史记录文件数据。并对返回后的历史记录数据文件按照不同元素规则进行排序。至此,经过排序的解析后的历史记录数据文件获取成功。
3. web服务器基本配置
与web服务器基本配置有关的文件为app_configuration.py和app.py文件。包括设置web服务器的端口号,访问权限,静态资源目录等。
4. 前端页面部署
与前端部署有关的文件为app_layout.py和app_plot.py以及assets目录。
前端布局主要包括以下几个元素:
- 上传历史记录文件组件
- 绘制页面访问次数组件
- 绘制页面访问停留总时间排名组件
- 每日页面访问次数散点图组件
- 某日不同时刻访问次数散点图组件
- 访问次数最多的10个URL组件
- 搜索关键词排名组件
- 搜索引擎使用情况组件
在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库进行绘制。
相关阅读 >>
cc++qt数据库sqlrelationaltable关联表详解
更多相关阅读请进入《Sqlite》频道 >>

数据库系统概念 第6版
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。