在Windows上分析谷歌浏览器Chrome历史记录的Python3.6脚本,分析过程如下:

1.1 Chrome的历史记录数据库

Chrome的数据存储在本地的SQLite数据库中。所以这里我们需要做的就是写一段能够连接到数据库的Python代码,从而查询需要的字段和提取需要的数据,这些数据包括网站访问的URL及其对应的全部访问量。我们把这些找出来作为原始数据。

在一个Windows电脑上,这个数据库通常可以在下面的路径下找到。

C:\Users\<YOURUSERNAME>\AppData\Local\Google\Chrome\UserData\Default

因为我的代码主要针对在Windows平台下的Chrome,我将会将这个代码留给你在Linux和Mac平台下进行稍微的改进。下面的代码给出了在Windows下的路径。

data_path=os.path.expanduser('~')+r"\AppData\Local\Google\Chrome\UserData\Default"
files=os.listdir(data_path)
history_db=os.path.join(data_path,'history')

现在我们有了路径和数据库的名字,我们会在里面进行一些SQL操作。为了实现这一点,你需要导入Python自带的sqlite3库。这些变量是不需要加以说明的。如果需要的话,可以参考sqlite3库的文档。

c=sqlite3.connect(history_db)
cursor=c.cursor()
select_statement="SELECTurls.url,urls.visit_countFROMurls,visitsWHEREurls.id=visits.url;"
cursor.execute(select_statement)
results=cursor.fetchall()

这里最重要的东西就是select_statement.我怎么能够知道从表中获取哪一个字段呢?好的,你可以下载SQLite浏览器并看一下概要图,或者获取这个表格并且运行控制台表中的一个主要的部分。

所以,当程序运行的时候,fetchall函数返回一系列的元组。我们继续进行并尝试着把它打印出来。你会得到很多具有网站数据的元组和在特定期间或者间隔内URL被访问的次数。尽管它可以帮助我们得到这些历史记录的要点,但是用这种格式是没有什么用的。网页是重复的,但是我不知道为什么访问量在这个列表中是分散的。然而,我们可以循环网页每一次出现的次数,进行计数,并把这两个联系在一起,作为字典中的键值对。

1.2 解析网页URL

如果你在控制台中打印出了这个元组,我们可以发现,这个数目会比我们预期的少很多。这是由于程序对HTTP,HTTPS,包括很多子域名进行了不同的计数。尽管下面的解析部分不是以Python方式进行的,但是我决定将一个将网页分割成不同部分的函数,并返回一个简单的无修饰的域。为了一致性,我建议你使用urlparse库的netloc函数来解析网页,这种方式更好一些。

defparse(url):
   try:
      parsed_url_components=url.split('//')
      sublevel_split=parsed_url_components[1].split('/',1)
      domain=sublevel_split[0].replace("www.","")
      return domain
   except IndexError:
      print"URLformaterror!

创建并选择网页,计数字典
从上面的分析可以知道,现在我们必须做的就是循环元组的列表,获取网页URL并解析它,然后把它作为字典的键加入到字典中;对于网页URL的出现次数,你可以简单的增加一个增量计数器作为字典的值。

sites_count={}   #dictmakesiterationseasier:D
for url, count in results:  
        url = parse(url)  
        if url in sites_count:  
            sites_count[url] += 1  
        else:  
            sites_count[url] = 1

因为Python的字典内部是无序的,为了一个明确的结果应该按值对字典进行排序。我将会采用OrderedDict方法来进行排序。

sites_count_sorted=OrderedDict(sorted(sites_count.items(),key=operator.itemgetter(1),reverse=True))

1.3分析并画出这些结果

现在我们有了可以画出这些结果的所有数据,你需要做的就是尽力来感受这个结果图是什么样的,当你找到你最常访问的网站时,你会感受到这一点。使用matplotlib库进行绘图,我几乎没有任何的经验,所以下面是我画的最简单的图了。

plt.bar(range(len(sites_count_sorted)),sites_count_sorted.values(),align='edge')
plt.xticks(rotation=45)
plt.xticks(range(len(sites_count_sorted)),sites_count_sorted.keys())
plt.show()

具体的代码如下:

import os
import sqlite3
import operator
from collections import OrderedDict
import matplotlib.pyplot as plt
#url:http://www.baidu.con
def parse(url):  try:  parsed_url_components = url.split('//')  #['http:', 'www.baidu.com/']sublevel_split = parsed_url_components[1].split('/', 1)   #['www.baidu.com', '']domain =sublevel_split[0].replace("www.", "")   #'baidu.com'return domainexcept IndexError:  print('URL format error!') def analyze(results):  prompt =input("[.] Type <c> to print or <p> to plot\n[>] ")if prompt == "c":with open('./history.txt','w') as f:for site, count in sites_count_sorted.items():f.write(site+'\t'+str(count)+'\n')elif prompt == "p":plt.bar(range(len(results)), results.values(), align='edge')  plt.xticks(rotation=45)  plt.xticks(range(len(results)), results.keys())  plt.show()else:  print("[.] Uh?")  quit()  if __name__=='__main__':#path to user's history database (Chrome)  data_path = os.path.expanduser('~')+r"\AppData\Local\Google\Chrome\User Data\Default"  #data_path=r'C:\Users\Administrator\AppData\Local\Google\Chrome\User Data\Default'files=os.listdir(data_path)history_db = os.path.join(data_path, 'history')  #querying the db  c = sqlite3.connect(history_db)  cursor = c.cursor()  select_statement = "SELECT urls.url, urls.visit_count FROM urls, visits WHERE urls.id = visits.url;"  cursor.execute(select_statement)  results = cursor.fetchall() #tuple  sites_count = {} #dict makes iterations easier :D  for url, count in results:  url = parse(url)  if url in sites_count:  sites_count[url] += 1  else:  sites_count[url] = 1  sites_count_sorted = OrderedDict(sorted(sites_count.items(), key=operator.itemgetter(1), reverse=True))  analyze (sites_count_sorted)

Note: 在程序运行时,不要使用谷歌浏览器,可能会遇到数据库不能访问的错误。
推荐使用Anaconda软件,可以进行调试python代码。

python分析谷歌浏览器的历史记录相关推荐

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

    python实战练手项目---获取谷歌浏览器的历史记录,分析一个人的上网行为 谷歌浏览器的历史浏览记录存储在名为History sqlite文件中,在mac环境下,该文件的地址是 /Users/zha ...

  2. 用 Python 分析上网记录,发现了很多不可思议的事

    摘要:分享个​ Python 神工具.​ 长时间使用浏览器会积累大量浏览器历史记录,这些是很隐私的数据,里面甚至可能有一些不可描述的网站或者搜索记录不想让别人知道. 不过,我们自己可能会感兴趣,天天上 ...

  3. 大数据如何使用Python分析微信数据

    截至2020年第二季度,微信拥有超过27亿活跃用户.这意味着,如果你正在阅读大数据如何使用Python分析微信数据,那么你很可能是微信用户.但是,你到底有多少微信用户?你实际发布了多少?我们可以使用P ...

  4. Python分析《青你2》67万条弹幕,看看有没有你Pick的小姐姐

    ** CDA数据分析师 出品  ** 作者:泽龙.Mika **数据:真达  ** **后期:泽龙 ** 今天我们来聊一聊选秀节目<青春有你2>. Show me data,用数据说话 淡 ...

  5. python制作鬼畜_用Python分析本山大叔鬼畜视频为啥这么火

    原标题:用Python分析本山大叔鬼畜视频为啥这么火 ♚ cxa,有着丰富的爬虫工作经验,公众号Python学习开发,擅长各种爬虫技术,熟悉大规模爬虫开发.热爱并喜欢钻研python. 改革春风吹满地 ...

  6. Python分析离散心率信号(下)

    Python分析离散心率信号(下) 如何使用动态阈值,信号过滤和离群值检测来改善峰值检测. 一些理论和背景 到目前为止,一直在研究如何分析心率信号并从中提取最广泛使用的时域和频域度量.但是,使用的信号 ...

  7. Python分析离散心率信号(中)

    Python分析离散心率信号(中) 一些理论和背景 心率信号不仅包含有关心脏的信息,还包含有关呼吸,短期血压调节,体温调节和荷尔蒙血压调节(长期)的信息.也(尽管不总是始终如一)与精神努力相关联,这并 ...

  8. Python分析离散心率信号(上)

    Python分析离散心率信号(上) 一些理论和背景 心率包含许多有关信息.如果拥有心率传感器和一些数据,那么当然可以购买分析包或尝试一些可用的开源产品,但是并非所有产品都可以满足需求.也是这种情况.那 ...

  9. 盛夏海边,用Python分析青岛哪些景点性价比高

    作者 | 志斌 来源 | 志斌的python笔记 头图 | 付费下载于 IC Photo 在经过几年的热潮之后,人工智能AI算法已经在各行各业广泛使用了.例如在工业制造中,利用人工智能监测仪器仪表.人 ...

最新文章

  1. R语言使用ggplot2包geom_jitter()函数绘制分组(strip plot,一维散点图)带状图(颜色配置:连续色彩、离散色彩、色彩梯度)实战
  2. 死机、蓝屏、系统运行过慢
  3. “天猫化”的考拉,还是考拉吗?
  4. java函数式编程_Java 函数式编程和 lambda 表达式详解
  5. Zookeeper 使用
  6. AMD发布APPML源码,构建clMath库
  7. Java Date与SimpleDateFormat
  8. [缓存]关于memcached的详细介绍以及用法
  9. 浏览器禁用Cookie,基于Cookie的会话跟踪机制失效的解决的方法
  10. 宝塔更换域名_搭建小程序之BT宝塔面板的操作使用教程
  11. python shell清屏指令_Python Shell 怎样清屏?
  12. Python实现坦克大战——源代码
  13. web项目报404一直找不到图片(路径绝对正确)
  14. android 转盘菜单,Android实现可点击的幸运大转盘
  15. mac虚拟摄像头插件_【OBS虚拟摄像头插件下载】OBS VirtualCam(OBS虚拟摄像头插件) v2.0.5 官方最新版-开心电玩...
  16. 三国志战略版:三势法正出奇效,藤甲张角新篇章
  17. 手机进程设置多少个最好_手机打开,开发者选项中的这4个设置,性能瞬间提升一倍,不卡顿...
  18. Swift零基础学习之用TableView做个景点App
  19. ElementUI table表格数据html格式解析
  20. 推荐一款团队协作软件---confluence

热门文章

  1. 教你制作启动U盘,用U盘装系统(转载)
  2. 1000句英语经典口语(4)
  3. 泰康人寿java开发待遇怎么样_宋晓伟-泰康人寿-5年Java开发高级工程师-猿急送
  4. python用链表求两数之和_python 算法 - 008 计算两个链表所代表的整数之和 (整数相加法)...
  5. 电话号码的字母组合(Java)
  6. 九键字母组合-深度优先遍历DFS
  7. Project(1)——创建数据库、实体类、用户注册的持久层
  8. Horizon Culling 地平线踢出法
  9. 02-走马灯 动画实现图片无缝展示
  10. 内网主机通过公网域名解析访问内网服务器,存在什么问题,如何解决?