用python分析在chrome下自己的上网的习惯

2013-02-12 02:35:57 +08:00
 Fikhtengol
初二啊今天,玩回来没事,四处浏览的时候,突然感觉自己一直写程序的时候不够专心,老是一会点下这,一会点下那的。于是就想查查自己的上网记录。想看看自己经常访问的网页有哪些,访问最多的是哪几个,我用chrome,但是它的history貌似没有这样的功能。于是就自己写下吧。
chrome 的history目录在~/.config/google-chrome/Default/,里面History打开是乱码,最后发现是存为sqllite db的,那就很easy了。找到History的那个file,查询下里面的table,有好几个,目测发现了个urls,应该是存自己访问的url的,一看里面还有visit count.就是它,开始select吧。select * from urls order by visit_count limit 0,10 ? 结果弄出来好多都是同一个网站的。好吧,又想看看同一个host下的情况。那就得先取出url中的host,然后再把相同的host相加再排序输出。

#!/usr/bin/env python
'''
analyse the user's chrome behavior.
'''
import sqlite3
import urlparse
class AnalyseChrome:
'''
the user's chrome history log is writed by sqllite. and saved default in ~/.config/google-chrome/Default/History at ubuntu.
'''
def __init__(self,db="/home/lijun/.config/google-chrome/Default/History"):
'''init the AnalyseChrome by the chrome history db path.'''
self.cn=sqlite3.connect(db)
self.cu=self.cn.cursor()
def get_sql_res(self,sql):
try:
self.cu.execute(sql)
except Exception,e:
print str(e)
return 0,str(e)
res=self.cu.fetchall()
return res,""
def show_table(self,name="%"):
'''show the table in db of History'''

sql="SELECT * FROM sqlite_master WHERE type='table' and name like '%s';"%(name,)
return self.get_sql_res(sql)

def clear(self,):
self.cn.close()

def top_n(self,n,orderby="host"):
'''
return the top n url or host the user visit frequently.default orderby host
'''

sql="select url,visit_count from urls order by url ;"
res,errmsg=self.get_sql_res(sql)
uniq_res=[]
#first select all url,visit form urls table sort by url ;
#and make a new list which has uniq url and new count. by myself.
#then sort by python's list.sort().
#at last print top n.
#maybe,it's not quick enough,or easy enough. max heap?my history is not that much.
if res:
urlhost=""
for item in res:
if orderby=="host":
now_urlhost=urlparse.urlparse(item[0]).netloc
elif orderby=="url":
now_urlhost=item[0]
else:
return None,"error argv in top_n"
if now_urlhost=="" or now_urlhost==None:
continue
if urlhost!=now_urlhost:
urlhost,count=now_urlhost,item[1]
uniq_res.append([urlhost,count])

else:
uniq_res[-1][-1]=uniq_res[-1][-1]+item[1]
continue
else:
return None,errmsg
uniq_res.sort(key=lambda x:x[1],reverse=True)
return [i for i in uniq_res[0:n]],""


if __name__=="__main__":
ac=AnalyseChrome()

tb,errormsg=ac.show_table('urls')
if tb:
for i in tb:
print i

res,errormsg=ac.top_n(20,"host")
no=1
if res:
for i in res:
print no,i
no+=1
else :
print errormsg
ac.clear()
开个头吧,后面还可以算各个host访问占的比例,某段时间里的访问情况。。。
7037 次点击
所在节点    Python
17 条回复
Fikhtengol
2013-02-12 02:38:32 +08:00
其它几个history的file都没仔细看,可以挖掘的东西应该还是挺多的吧,大家有木有兴趣挖掘下
Fikhtengol
2013-02-12 02:44:38 +08:00
我去,代码直接从编辑器里copy 到这就没有缩进了,应该怎么弄啊?
paloalto
2013-02-12 03:00:35 +08:00
paloalto
2013-02-12 03:01:10 +08:00
@Fikhtengol 可以把代码贴到gist
zythum
2013-02-12 03:05:00 +08:00
https://gist.github.com 去这边然后把地址贴过来
Fikhtengol
2013-02-12 03:09:21 +08:00
Fikhtengol
2013-02-12 03:11:05 +08:00
ADD-ONS,有木有chrome的呢?
@paloalto
quake0day
2013-02-12 03:18:59 +08:00
lowstz
2013-02-12 15:29:35 +08:00
db路径用下面这个,减少硬编码
db = os.path.expanduser('~/.config/google-chrome/Default/History')
cyr1l
2013-02-12 15:38:10 +08:00
我还以为楼主今年初二, 吓我一跳。 原来是说今天。。。 可是今天初三了啊。。 就算你是12个小时57分钟前, 也是初三了。 #不要在意细节。。。
caoz
2013-02-12 18:50:12 +08:00
collections.Counter 是个好东西

不使用浏览器的 API 而直接尝试分析文件, 算不算 hack ? 不过还是 Python 版简单直接...
Fikhtengol
2013-02-13 15:10:57 +08:00
呵呵 我是pwd 后直接copy的
Fikhtengol
2013-02-13 15:11:27 +08:00
Fikhtengol
2013-02-13 15:15:51 +08:00
python 写多了怕自己退化啊,数据结构太好用。。。@caoz
oppih28
2013-02-13 22:25:47 +08:00
cloverstd
2013-02-14 22:54:02 +08:00
database is locked
Fikhtengol
2013-02-14 23:54:30 +08:00
把chrome关了,as database is locked by chrome
@cloverstd

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/60255

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX