python实战练手项目---获取谷歌浏览器的历史记录,分析一个人的上网行为

谷歌浏览器的历史浏览记录存储在名为History sqlite文件中,在mac环境下,该文件的地址是

/Users/zhangdongsheng/Library/Application Support/Google/Chrome/Default/History

注意替换用户名(zhangdongsheng)

如果是windows系统,文件的目录为

%LocalAppData%\Google\Chrome\User Data\Default

历史浏览记录存储在urls表里,这里只关注last_visit_time和url字段,前者是访问时间,后者是网址。last_visit_time字段存储的是时间是距离1601年1月1日0时0分0秒的微秒数,在windows系统下,FILETIME是从1601-01-01开始计时的,而在unix,linux系统下,则是从1970-01-01开始计时的。

有了数据库和表,就可以直接从数据库文件里读取数据了,读取数据时,一定要把谷歌浏览器关掉,不然它会一直锁着History文件,导致程序无法读取,下面的程序读取19年5月1日之后浏览记录

import sqlite3
from urllib.parse import urlparse
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties

db_path = '/Users/zhangdongsheng/Library/Application Support/Google/Chrome/Default/History'
conn = sqlite3.connect(db_path)

sql = '''
select url from  urls where 
datetime(last_visit_time/1000000-11644473600,'unixepoch') 
> '2019-05-01'
'''
cursor = conn.execute(sql)

得到的url内容如下

https://www.cnblogs.com/zzqcn/p/3525636.html

还需要对url进行解析,提取出网址的域名,并对域名访问次数进行数量统计

# 解析url,获得域名
parser = lambda u: urlparse(u).netloc
history_dict = {}
for row in cursor:
    print(row[0])
    url = parser(row[0])
    history_dict.setdefault(url, 0)
    history_dict[url] += 1

接下来就是可视化呈现的部分了,获取访问频次前20的域名信息并使用matplotlib画出饼图

history_lst = [(url, count) for url, count in history_dict.items()]
history_lst.sort(key=lambda item: item[1], reverse=True)

# 设置font,支持中文
font = FontProperties(fname='/System/Library/Fonts/STHeiti Medium.ttc')
top_20_url = history_lst[:20]
# 获得饼状图数据
pie_data = [item[1] for item in top_20_url]
# 获得label
pie_labels = [item[0] for item in top_20_url]

plt.figure(1, figsize=(10, 10))
plt.title('访问频率排名前20的网站', fontproperties=font)
plt.pie(pie_data, autopct='%1.1f%%', labels=pie_labels)
plt.savefig('./浏览频率前20的网站.jpg')

生成的图片
浏览频率前20的网站

扫描关注, 与我技术互动

QQ交流群: 211426309

加入知识星球, 每天收获更多精彩内容

分享日常研究的python技术和遇到的问题及解决方案