my top visited webs
写了一个小东西,用来看自己前段时间(其实是所有时间),在edge游览器上存储的访问数据。使用的数据来自edge的WebAssistDatabase, 但是原来的default目录下其实还有history等文件,这里没有考虑。
实现效果如下:
使用本地的数据,路径使用os的模块获得, 数据在c盘,复制并且粘贴到当前文件夹。
default_path = os.path.expanduser("~") + r'\AppData\Local\Microsoft\Edge\User Data\Default\WebAssistDatabase'
def get_data():if 'Web_data.db' not in os.listdir():default_path = os.path.expanduser("~") + r'\AppData\Local\Microsoft\Edge\User Data\Default\WebAssistDatabase'shutil.copy(default_path, './Web_data.db') # 修改文件名防止错混print(f'copy and rename the data file in {default_path}.')else:print('Web_data.db already exists.')return 'Web_data.db' # 返回数据库名
输入提示 ‘all’, 返回所有的数据, 数据量大的话很难看;普通的数字(一定是正整数),则返回相应数目的数据;直接回车,什么都不输入,默认50条数据;
输入’q’, 退出。
the number of most visited webs you want,
"all" for all (better not), default is 50 (suggested), "q" for quit>>>
源代码如下:
# -*- coding : utf-8 -*-
# @Author : belli dura despicio
# @Time : 2022/8/2 16:01
# @File : analyse_data.py
# @software : PyCharm
# 针对EDGE的数据,制作不同页面访问次数的柱状图
import sqlite3
from pyecharts.charts import Bar
import re
from pyecharts import options as opts
from pyecharts.globals import ThemeType
import os
import shutil# todo: 翻译和搜索网页的确占了很大一部分。def get_data():if 'Web_data.db' not in os.listdir():default_path = os.path.expanduser("~") + r'\AppData\Local\Microsoft\Edge\User Data\Default\WebAssistDatabase'# different history files i think, but the history file is much more complex, not easy to interpret. So I choose# the WebAssistDatabase instead.#shutil.copy(default_path, './Web_data.db') # 修改文件名防止错混print(f'copy and rename the data file in {default_path}.')else:print('Web_data.db already exists.')return 'Web_data.db' # 返回数据库名def analysis_data(dataBase, n):"""处理数据,并且绘图:param dataBase: name of database:param n: user input the number want to be show in the html. -- top n:return:"""dataBase = dataBaserange_slice = sliceif n == 'all':range_slice = slice(0, None)else:n = int(n)range_slice = slice(0, n)# 提取所有的域名conn = sqlite3.connect(dataBase)cur = conn.cursor()sql = """select url, num_visits from navigation_history;"""links = cur.execute(sql) # [(url1, count1), (), ...]links_need = [i for i in links]conn.commit()# 获取完整的访问过的域名,cur.close()conn.close()pattern = re.compile(r'(http[s]?://)([^/]+)')# 匹配较短的域名,统一站点下的不同页面统一格式sim_pairs = []for url, num in links_need:sim_url = pattern.findall(url)[0][1]temp = (sim_url, num)sim_pairs.append(temp)# 分类并且计数u_set = {i[0] for i in sim_pairs} # 去重处理r_ls = [] # 存储结果for u in u_set:# 计数templs = []count = 0for j in sim_pairs:if j[0] == u:templs.append(j)for i in templs:count += i[1]r_ls.append((u, count)) # save as tuple in list [(url1, count1),(),...]r_ls.sort(key=lambda x: -x[1]) # sort the list by count numbers_r_ls = r_ls[range_slice]# 默认前50, use the nuDic = dict(s_r_ls)# print(list(uDic.values()))# print(list(uDic.keys()))return uDicdef draw(uDic, n):uDic = uDicbar = (Bar(init_opts=opts.InitOpts(width="1500px",height="700px",page_title="my_history_webs",theme=ThemeType.LIGHT),).add_xaxis(list(uDic.keys())).add_yaxis(series_name='访问次数', y_axis=list(uDic.values())).set_global_opts(title_opts=opts.TitleOpts(title=f"一段时间我的最常访问的网站, top_{n}", subtitle=f"这些共计{sum(uDic.values())}"),yaxis_opts=opts.AxisOpts(axislabel_opts={'interval': '0'}), # 显示所有的标签).reversal_axis() # 翻转xy轴.set_series_opts(label_opts=opts.LabelOpts(position="right")).render('my_history.html'))if __name__ == '__main__':n = input('the number of most visited webs you want, \n''"all" for all (better not), default is 50 (suggested), "q" for quit>>>')if n == 'q':passelse:if n == '':n = '50'dataBase = get_data()uDic = analysis_data(dataBase, n)draw(uDic, n)print('Thank you for using. :)')
my top visited webs相关推荐
- 【Dijkstra】最短路径
复习笔记[一] Dijkstra算法 算法核心:对边的松弛 概述:Dijkstra用于求一个点到其他点的最短路径,不适合于负边权,用了贪心思想,复杂度为O(N^2), 与SPFA相比其优点是经堆优化 ...
- Word Maze(单词迷宫)
#include <iostream> #include <string> #include <stack> using namespace std; int m, ...
- 关于围住神经猫实现的想法
看见朋友圈里面疯转这个游戏,然后就玩了一下,说下自己的想法... 首先地图是一个9*9的矩阵,因为不是对齐的,所以在后面广搜的时候会有些麻烦,但是毕竟相对于4个方向,不对齐的6个方向会让游戏的可能性有 ...
- android 激发亮度_如何使用有用的小脚本激发可怕的终端
android 激发亮度 by Vijayabharathi Balasubramanian 通过Vijayabharathi Balasubramanian 如何使用有用的小脚本激发可怕的终端 (H ...
- 关于包围神经猫的想法实现
看到朋友们狂转这个游戏里面圈,然后打了一下,说下自己的想法.. . 首先,地图是一个9*9矩阵,由于没有对齐,所以后来,当宽的搜索将是一些麻烦,但是,毕竟,相对于4一个方向,齐不正确6一个方向的可能性 ...
- 【力扣时间】【1036】【困难】逃离大迷宫
逃离大迷宫 1.读题 2.审题 3.思路 4.开工! 5.解读 6.提交 7.学习大牛们 8.总结 困难题来了! 1.读题 题目 今天的困难题属于从来没有接触过的类型. 虽然解法还是基于bfs的,但思 ...
- 实用的60个CSS代码片段[转] 博客链接:http://blog.poetries.top
1.垂直对齐 如果你用CSS,则你会有困惑:我该怎么垂直对齐容器中的元素?现在,利用CSS3的Transform,可以很优雅的解决这个困惑: .verticalcenter{position: rel ...
- Linux shell 学习笔记(2)— 监测程序、磁盘空间和处理文件(ps -ef、top、kill、df、du 、grep、tar)
1. 监测程序 1.1 检查进程 默认情况下,ps 命令只会显示运行在当前控制台下的属于当前用户的进程. $ ps PID TTY TIME CMD 3081 pts/0 00:00:00 bash ...
- Linux top命令常见使用
使用方法 top 常见使用 h:显示帮助画面,给出一些简短的命令总结说明: k:终止一个进程: i:忽略闲置和僵死进程,这是一个开关式命令: q:退出程序: r:重新安排一个进程的优先级别: S:切换 ...
- linux top cpu核数查看,Linux怎么查看CPU核数?
在Linux中,可以使用"cat /proc/cpuinfo| grep "cpu cores"| uniq"来查看CPU核数,即每个物理CPU中core的个数 ...
最新文章
- lucene3.0范围查找TermRangeQuery
- linux中的while命令
- 网站抓取频率对排名优化有着怎样的意义?
- versa max_如何从Mac(和Vice Versa)打开或关闭iPhone的Safari选项卡
- ssl1333-地鼠的困境【二分图,最大匹配,图论】
- java fx 皮肤_JavaFX 皮肤功能
- 《MySQL DBA修炼之道》——1.7 MySQL复制架构
- 设置、获得对话框中 编辑框控件 EDIT 的内容
- 《从零开始学Swift》学习笔记(Day 30)——选择类还是结构体呢?
- 第九篇 IO流技术(九)
- Ubuntu 安装 tensorflow-gpu 1.4 包含 CUDA 8.0 和cuDNN
- linux 小度 驱动_小度Wifi,360随身Wifi2,小米Wifi树莓派驱动下载
- 算法 | golang 实现 key有序map
- xdg-user-dirs
- love~LBJ,奥布莱恩神杯3
- css3 3d 太阳系,CSS3实现的太阳系行星系统
- echars、象棋、飞机大战、五子棋
- matlab中水平垂直线,关于Matlab:水平-垂直线
- vue3+vite+ts 通过svg-sprite-loader 插件使用自定义图标
- 五年后的深圳是天堂还是地狱?
热门文章
- 毕业设计-基于汇编语言的at89c52单片机可调数字钟的设计,基于AT89S52单片机数字钟的仿真设计(汇编语言程序)...
- 基4fft matlab,快速傅里叶变换基4时间抽取FFT算法
- 中职学校计算机教学中,中职学校计算机教学方式
- Javascript设计模式-00-说明
- 1.1、信息化和信息系统
- 计算机病毒是如何入侵你的电脑吗,怎么样正确处理被病毒侵入的电脑
- 基于Java Web的权限管理系统的设计与实现
- sniffer Pro4.7.5最完整安装教程
- C++ 7:深拷贝和浅拷贝,,值类型,构造函数和拷贝构造函数,函数重载,移动构造函数和移动赋值函数
- 协调端到端的供应链管理——SCM