写了一个小东西,用来看自己前段时间(其实是所有时间),在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相关推荐

  1. 【Dijkstra】最短路径

    复习笔记[一] Dijkstra算法 算法核心:对边的松弛 概述:Dijkstra用于求一个点到其他点的最短路径,不适合于负边权,用了贪心思想,复杂度为O(N^2),  与SPFA相比其优点是经堆优化 ...

  2. Word Maze(单词迷宫)

    #include <iostream> #include <string> #include <stack> using namespace std; int m, ...

  3. 关于围住神经猫实现的想法

    看见朋友圈里面疯转这个游戏,然后就玩了一下,说下自己的想法... 首先地图是一个9*9的矩阵,因为不是对齐的,所以在后面广搜的时候会有些麻烦,但是毕竟相对于4个方向,不对齐的6个方向会让游戏的可能性有 ...

  4. android 激发亮度_如何使用有用的小脚本激发可怕的终端

    android 激发亮度 by Vijayabharathi Balasubramanian 通过Vijayabharathi Balasubramanian 如何使用有用的小脚本激发可怕的终端 (H ...

  5. 关于包围神经猫的想法实现

    看到朋友们狂转这个游戏里面圈,然后打了一下,说下自己的想法.. . 首先,地图是一个9*9矩阵,由于没有对齐,所以后来,当宽的搜索将是一些麻烦,但是,毕竟,相对于4一个方向,齐不正确6一个方向的可能性 ...

  6. 【力扣时间】【1036】【困难】逃离大迷宫

    逃离大迷宫 1.读题 2.审题 3.思路 4.开工! 5.解读 6.提交 7.学习大牛们 8.总结 困难题来了! 1.读题 题目 今天的困难题属于从来没有接触过的类型. 虽然解法还是基于bfs的,但思 ...

  7. 实用的60个CSS代码片段[转] 博客链接:http://blog.poetries.top

    1.垂直对齐 如果你用CSS,则你会有困惑:我该怎么垂直对齐容器中的元素?现在,利用CSS3的Transform,可以很优雅的解决这个困惑: .verticalcenter{position: rel ...

  8. 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 ...

  9. Linux top命令常见使用

    使用方法 top 常见使用 h:显示帮助画面,给出一些简短的命令总结说明: k:终止一个进程: i:忽略闲置和僵死进程,这是一个开关式命令: q:退出程序: r:重新安排一个进程的优先级别: S:切换 ...

  10. linux top cpu核数查看,Linux怎么查看CPU核数?

    在Linux中,可以使用"cat /proc/cpuinfo| grep "cpu cores"| uniq"来查看CPU核数,即每个物理CPU中core的个数 ...

最新文章

  1. lucene3.0范围查找TermRangeQuery
  2. linux中的while命令
  3. 网站抓取频率对排名优化有着怎样的意义?
  4. versa max_如何从Mac(和Vice Versa)打开或关闭iPhone的Safari选项卡
  5. ssl1333-地鼠的困境【二分图,最大匹配,图论】
  6. java fx 皮肤_JavaFX 皮肤功能
  7. 《MySQL DBA修炼之道》——1.7 MySQL复制架构
  8. 设置、获得对话框中 编辑框控件 EDIT 的内容
  9. 《从零开始学Swift》学习笔记(Day 30)——选择类还是结构体呢?
  10. 第九篇 IO流技术(九)
  11. Ubuntu 安装 tensorflow-gpu 1.4 包含 CUDA 8.0 和cuDNN
  12. linux 小度 驱动_小度Wifi,360随身Wifi2,小米Wifi树莓派驱动下载
  13. 算法 | golang 实现 key有序map
  14. xdg-user-dirs
  15. love~LBJ,奥布莱恩神杯3
  16. css3 3d 太阳系,CSS3实现的太阳系行星系统
  17. echars、象棋、飞机大战、五子棋
  18. matlab中水平垂直线,关于Matlab:水平-垂直线
  19. vue3+vite+ts 通过svg-sprite-loader 插件使用自定义图标
  20. 五年后的深圳是天堂还是地狱?

热门文章

  1. 毕业设计-基于汇编语言的at89c52单片机可调数字钟的设计,基于AT89S52单片机数字钟的仿真设计(汇编语言程序)...
  2. 基4fft matlab,快速傅里叶变换基4时间抽取FFT算法
  3. 中职学校计算机教学中,中职学校计算机教学方式
  4. Javascript设计模式-00-说明
  5. 1.1、信息化和信息系统
  6. 计算机病毒是如何入侵你的电脑吗,怎么样正确处理被病毒侵入的电脑
  7. 基于Java Web的权限管理系统的设计与实现
  8. sniffer Pro4.7.5最完整安装教程
  9. C++ 7:深拷贝和浅拷贝,,值类型,构造函数和拷贝构造函数,函数重载,移动构造函数和移动赋值函数
  10. 协调端到端的供应链管理——SCM