• 【记录】如何备份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 数据库只支持单线程操作,关闭谷歌浏览器等占用该线程的资源即可。

  • 相关阅读:
    画分层DFD图的基本原则
    【学习笔记】集成电路发展及其设计流程(ICer必备)
    Python语言程序设计 习题8
    浅学习泛型
    Uniapp 解决组件在官方文档不支持的事件上,接收小程序原生组件事件
    【C++语法讲解】 | 运算符重构 | 三种运算符的重构方式 |代码演示
    【笔记】Linux
    【使用 BERT 的问答系统】第 7 章 :BERT 模型的未来
    关键字搜索:“淘宝商品 API ”
    面试官:你说说一条查询 SQL 的执行过程
  • 原文地址:https://blog.csdn.net/qq_29119581/article/details/126415462