admin管理员组

文章数量:1538830

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

  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 实现的代码如下:

import os.path
import sqlite3
import time

def getChromeHistory(history_db):
    start_time = time.perf_counter()
    clear_date = time.strftime(time.strftime("%Y-%m-%d", time.localtime()))
    # 连接历史记录数据库
    con = sqlite3.connect(history_db)
    # 查询
    cursor = con.cursor()
    sql_statement = "SELECT urls.id, visits.visit_time, urls.title, urls.url, urls.visit_count FROM urls,visits WHERE urls.id=visits.url;"
    cursor.execute(sql_statement)
    records = cursor.fetchall()  # 抓取所有
    # records = cursor.fetchmany(1000)  # 1000条测试
    # 保存到txt文件
    print(f"正在备份{len(records)}条历史记录......")
    for data in records:
        strings = str(data[0]) + ", " + str(data[1]) + ", " + data[2] + ", " + data[3] + ", " + str(data[4])
        with open(f"D:\\XXX\\history_{clear_date}.txt", 'a+', encoding='utf-8') as fw:
            fw.writelines(strings + '\n')
    print(f"历史记录备份完成!耗时:{time.perf_counter() - start_time}秒!")

if __name__ == '__main__':
    # 历史记录数据库所在位置
    db_path = os.path.expanduser('~') + r"\AppData\Local\Google\Chrome\User Data\Default"
    history = os.path.join(db_path, 'history')
    getChromeHistory(history)

测试效果:

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

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

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

本文标签: 历史记录备份浏览器Google