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-),吐槽我自己~~~

  • 相关阅读:
    【模板】Sparse-Table
    UVa 11235 Frequent values
    【模板】树状数组
    UVa 1428 Ping pong
    数学技巧
    UVa 11300 Spreading the Wealth
    UVa 11729 Commando War
    UVa 11292 Dragon of Loowater
    POJ 3627 Bookshelf
    POJ 1056 IMMEDIATE DECODABILITY
  • 原文地址:https://www.cnblogs.com/zzr-stdio/p/12404920.html
Copyright © 2011-2022 走看看