首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Coding
V2EX  ›  Python

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

  •  
  •   Fikhtengol · 2013-02-12 02:35:57 +08:00 · 6080 次点击
    这是一个创建于 2495 天前的主题,其中的信息可能已经有所发展或是发生改变。
    初二啊今天,玩回来没事,四处浏览的时候,突然感觉自己一直写程序的时候不够专心,老是一会点下这,一会点下那的。于是就想查查自己的上网记录。想看看自己经常访问的网页有哪些,访问最多的是哪几个,我用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访问占的比例,某段时间里的访问情况。。。
    17 回复  |  直到 1970-01-01 08:00:00 +08:00
        1
    Fikhtengol   2013-02-12 02:38:32 +08:00
    其它几个history的file都没仔细看,可以挖掘的东西应该还是挺多的吧,大家有木有兴趣挖掘下
        2
    Fikhtengol   2013-02-12 02:44:38 +08:00
    我去,代码直接从编辑器里copy 到这就没有缩进了,应该怎么弄啊?
        3
    paloalto   2013-02-12 03:00:35 +08:00   ♥ 3
        4
    paloalto   2013-02-12 03:01:10 +08:00
    @Fikhtengol 可以把代码贴到gist
        5
    zythum   2013-02-12 03:05:00 +08:00   ♥ 1
    https://gist.github.com 去这边然后把地址贴过来
        6
    Fikhtengol   2013-02-12 03:09:21 +08:00
        7
    Fikhtengol   2013-02-12 03:11:05 +08:00
    ADD-ONS,有木有chrome的呢?
    @paloalto
        8
    quake0day   2013-02-12 03:18:59 +08:00
        9
    lowstz   2013-02-12 15:29:35 +08:00
    db路径用下面这个,减少硬编码
    db = os.path.expanduser('~/.config/google-chrome/Default/History')
        10
    cyr1l   2013-02-12 15:38:10 +08:00
    我还以为楼主今年初二, 吓我一跳。 原来是说今天。。。 可是今天初三了啊。。 就算你是12个小时57分钟前, 也是初三了。 #不要在意细节。。。
        11
    caoz   2013-02-12 18:50:12 +08:00
    collections.Counter 是个好东西

    不使用浏览器的 API 而直接尝试分析文件, 算不算 hack ? 不过还是 Python 版简单直接...
        12
    Fikhtengol   2013-02-13 15:10:57 +08:00
    呵呵 我是pwd 后直接copy的
        13
    Fikhtengol   2013-02-13 15:11:27 +08:00
        14
    Fikhtengol   2013-02-13 15:15:51 +08:00
    python 写多了怕自己退化啊,数据结构太好用。。。@caoz
        15
    oppih28   2013-02-13 22:25:47 +08:00 via iPhone
        16
    cloverstd   2013-02-14 22:54:02 +08:00
    database is locked
        17
    Fikhtengol   2013-02-14 23:54:30 +08:00
    把chrome关了,as database is locked by chrome
    @cloverstd
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3032 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 36ms · UTC 10:40 · PVG 18:40 · LAX 02:40 · JFK 05:40
    ♥ Do have faith in what you're doing.