• 【记录】如何备份Google浏览器的历史记录?


    经常清理浏览器的历史记录是个好习惯,但有些记录可能以后会用到,需要先备份后再进行清理,并按清理日期备份历史记录。以下是我的需求

    1. 目标浏览器为 Google 浏览器;

    2. 备份当前时间之前所有的历史记录到 txt 文件,文件命名格式为:history_{clear_date}.txt;

    3. 统计并打印备份记录数,总共耗时等信息。

    Windows 上的 Google 浏览器会在

    \AppData\Local\Google\Chrome\User Data\Default 路径下的 history目录下存在两个数据表:urls表、visits表

    urls 表的大致字段为:id, url, title,visit_count,typed_count,ast_vist_time,hidden...

    visits 表的大致字段为:id, url,visit_time, from_visit, transition, segment_id , visit_duration....

    我需要的字段有:urls.id, urls.url, urls.title, visits.visit_time, urls.visit_count

    因此,通过 python 实现的代码如下:

    1. import os.path
    2. import sqlite3
    3. import time
    4. def getChromeHistory(history_db):
    5. start_time = time.perf_counter()
    6. clear_date = time.strftime(time.strftime("%Y-%m-%d", time.localtime()))
    7. # 连接历史记录数据库
    8. con = sqlite3.connect(history_db)
    9. # 查询
    10. cursor = con.cursor()
    11. sql_statement = "SELECT urls.id, visits.visit_time, urls.title, urls.url, urls.visit_count FROM urls,visits WHERE urls.id=visits.url;"
    12. cursor.execute(sql_statement)
    13. records = cursor.fetchall() # 抓取所有
    14. # records = cursor.fetchmany(1000) # 1000条测试
    15. # 保存到txt文件
    16. print(f"正在备份{len(records)}条历史记录......")
    17. for data in records:
    18. strings = str(data[0]) + ", " + str(data[1]) + ", " + data[2] + ", " + data[3] + ", " + str(data[4])
    19. with open(f"D:\\XXX\\history_{clear_date}.txt", 'a+', encoding='utf-8') as fw:
    20. fw.writelines(strings + '\n')
    21. print(f"历史记录备份完成!耗时:{time.perf_counter() - start_time}秒!")
    22. if __name__ == '__main__':
    23. # 历史记录数据库所在位置
    24. db_path = os.path.expanduser('~') + r"\AppData\Local\Google\Chrome\User Data\Default"
    25. history = os.path.join(db_path, 'history')
    26. getChromeHistory(history)

    测试效果:

    1. 正在备份1000条历史记录......
    2. 历史记录备份完成!耗时:0.3269138秒!

    测试过程中,遇到的问题:

    原因:SQLite 数据库只支持单线程操作,关闭谷歌浏览器等占用该线程的资源即可。

  • 相关阅读:
    区块链相关
    初识Spring MVC
    逆矩阵的算法
    最简单体验TinyML、TensorFlow Lite——ESP32跑机器学习(全代码)
    线程是什么?线程的相关概念以及基本的使用方法说明【内附可执行源码注释完整】
    stm32和嵌入式linux可以同步学习吗?
    自动打包机如何精准捆扎
    gitpod.io,云端开发调试工具。
    hadoop historyserver启动,无法访问,查看报错等问题
    六石管理学:水平不高,照抄就好
  • 原文地址:https://blog.csdn.net/qq_29119581/article/details/126415462