zoukankan      html  css  js  c++  java
  • 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-),吐槽我自己~~~

  • 相关阅读:
    机器学习周志华- 第六章学习笔记6.1-6.4
    Centos 中 vim 的配置
    github相关的软件安装及配置
    堆/栈的比较 以及 malloc/new动态内存的开辟
    内存管理
    Linux中的搜索命令
    String 类 Copy-On-Write 技术以及使用时存在的风险
    二分查找算法的应用
    二分查找算法
    union关键字 与大小端模式
  • 原文地址:https://www.cnblogs.com/zzr-stdio/p/12404920.html
Copyright © 2011-2022 走看看