• python获取火狐浏览器的历史记录


    python获取火狐浏览器的历史记录

    最新在学习python,所以想着做一些练手的项目,这里做一个获取火狐浏览器的历史记录,然后保存到一个txt文件中。这里涉及到的库:

    • os
    • sqlite3
    • time

    os库用来搜索文件,sqlite3用来读取sqlite文件,time用来转换时间戳使用。

    火狐的历史记录是使用sqlite来保存的,Python内置sqlite3库,所以并不需要安装任何第三方库。

    首先是查找火狐浏览器places.sqlite历史记录文件,这里使用了os.walk()函数来查找,但效率较低,先用着吧。

    def search(path, name):
        searchfiles = []
        for root, dirs, files in os.walk(path): #使用os.walk()函数来搜索指定文件,但效率很低
            if name in files:
                searchfiles.append(os.path.join(root, name))
        return searchfiles
    

    然后是使用sqlite3来读取数据:

    def gettitles(filename):
        conn = sqlite3.connect(filename) #连接sqlite
        c = conn.cursor()
        print("打开文件:%s 是成功的!" % filename)
        cursor = c.execute("Select url,title,visit_count,frecency,last_visit_date from moz_places") #SQL查找表数据
        titles = set()
        for row in cursor: #遍历行
            if row[1]:
                lasttime = ""
                if row[4]: #如果有时间戳就转换时间
                    v = int(row[4]) / 1000000
                    lasttime = time.asctime(time.localtime(v))
                titles.add((row[0], row[1],row[2], row[3], lasttime))
        conn.close() #关闭文件
        return titles
    

    然后就是讲读取到的内容保存到一个文件中,全部代码如下:

    import os
    import sqlite3
    import time
    
    def search(path, name):
        searchfiles = []
        for root, dirs, files in os.walk(path): #使用os.walk()函数来搜索指定文件,但效率很低
            if name in files:
                searchfiles.append(os.path.join(root, name))
        return searchfiles
    
    
    def gettitles(filename):
        conn = sqlite3.connect(filename) #连接sqlite
        c = conn.cursor()
        print("打开文件:%s 是成功的!" % filename)
        cursor = c.execute("Select url,title,visit_count,frecency,last_visit_date from moz_places") #SQL查找表数据
        titles = set()
        for row in cursor: #遍历行
            if row[1]:
                lasttime = ""
                if row[4]: #如果有时间戳就转换时间
                    v = int(row[4]) / 1000000
                    lasttime = time.asctime(time.localtime(v))
                titles.add((row[0], row[1],row[2], row[3], lasttime))
        conn.close() #关闭文件
        return titles
    
    if __name__ == "__main__":
        v = time.time()
        systemdrive = os.getenv("SystemDrive") #获取系统盘,查找系统盘下的places.sqlite文件,这是火狐历史记录的文件
        searchfiles = search(systemdrive, "places.sqlite")
        if len(searchfiles) > 0:
            all = []
            for filename in searchfiles:
                titles = gettitles(filename)
                all.append(titles)
            if len(all) > 0:
                with open("test.txt", "w", encoding= "utf-8") as f: #保存到当前目录下的test.txt文件中吧
                    count = 0
                    for item in all:
                        for it in item:
                            count +=1
                            f.write(str(it) + "
    ") #加换行
        else:
            print("未找到文件")
        print("共用时:%s秒" % str(time.time() - v))
    

    在我的电脑上共用时45+秒(-v-),吐槽我自己~~~

  • 相关阅读:
    幂等性
    视频上墙
    java 字符串 大小写转换 、去掉首末端空格 、根据索引切割字符 、判断是否含有某连续字符串
    Java 递归 常见24道题目 总结
    Java 单引号 与 双引号 区别
    细谈 Java 匿名内部类 【分别 使用 接口 和 抽象类实现】
    细谈 == 和 equals 的具体区别 【包括equals源码分析】
    简单谈谈 数组排序 的方法 【自定义算法 、 冒泡算法 等】
    细说 栈 为什么又被称为 栈堆 ?【得从数组变量讲起】
    简单谈谈 堆、栈、队列 【不要傻傻分不清】
  • 原文地址:https://www.cnblogs.com/zzr-stdio/p/12404920.html
Copyright © 2020-2023  润新知