huavhuahua 2020-03-03
最新在学习python,所以想着做一些练手的项目,这里做一个获取火狐浏览器的历史记录,然后保存到一个txt文件中。这里涉及到的库:
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) + "\n") #加换行 else: print("未找到文件") print("共用时:%s秒" % str(time.time() - v))
在我的电脑上共用时45+秒(-v-),吐槽我自己~~~