python 中cookie_使用Python分析Cookies
前言
本文的灵感来自于:
正文
本文已豆瓣电影的Cookies为例, 展示了从Cookies的获取, 解析的过程.
我们在浏览器中看到的Cookies大概是这样的:
Cookie:bid=hZdgjLJMNv4; _vwo_uuid_v2=AD40AA237919D79C67460DEFD37AFAA4|65f61f85190c51b2cfa95d3910cc2914; gr_user_id=2d7956ee-7cd2-4fad-8a7d-d0b2265ceeba; ll="118316"; _pk_ref.100001.4cf6=%5B%22%22%2C%22%22%2C1489750475%2C%22https%3A%2F%2Fwww.google.com.hk%2F%22%5D; ap=1; _pk_id.100001.4cf6=270eb4959a2a2414.1489750475.1.1489750559.1489750475.; _pk_ses.100001.4cf6=*; __utma=30149280.1851478845.1488968861.1489658025.1489750475.5; __utmb=30149280.0.10.1489750475; __utmc=30149280; __utmz=30149280.1489750475.5.5.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided); __utma=223695111.721177542.1489750475.1489750475.1489750475.1; __utmb=223695111.0.10.1489750475; __utmc=223695111; __utmz=223695111.1489750475.1.1.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided)
首先我们先把它导入到Python字典中, 作为我们的前期准备工作:
In [57]: from http.cookies import SimpleCookie
In [58]: s = SimpleCookie('''bid=hZdgjLJMNv4; _vwo_uuid_v2=AD40AA237919D79C67460DEFD37AFAA4|65f61f85190c51b2
...: cfa95d3910cc2914; gr_user_id=2d7956ee-7cd2-4fad-8a7d-d0b2265ceeba; ll="118316"; _pk_ref.100001.4cf6
...: =%5B%22%22%2C%22%22%2C1489750475%2C%22https%3A%2F%2Fwww.google.com.hk%2F%22%5D; ap=1; _pk_id.100001
...: .4cf6=270eb4959a2a2414.1489750475.1.1489750559.1489750475.; _pk_ses.100001.4cf6=*; __utma=30149280.
...: 1851478845.1488968861.1489658025.1489750475.5; __utmb=30149280.0.10.1489750475; __utmc=30149280; __
...: utmz=30149280.1489750475.5.5.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided);
...: __utma=223695111.721177542.1489750475.1489750475.1489750475.1; __utmb=223695111.0.10.1489750475; _
...: _utmc=223695111; __utmz=223695111.1489750475.1.1.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmc
...: tr=(not%20provided)''')
In [59]: {v.key:v.value for k,v in s.items()}
{'__utma': '223695111.721177542.1489750475.1489750475.1489750475.1',
'__utmb': '223695111.0.10.1489750475',
'__utmc': '223695111',
'__utmz': '223695111.1489750475.1.1.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided)',
'_pk_id.100001.4cf6': '270eb4959a2a2414.1489750475.1.1489750559.1489750475.',
'_pk_ref.100001.4cf6': '%5B%22%22%2C%22%22%2C1489750475%2C%22https%3A%2F%2Fwww.google.com.hk%2F%22%5D',
'_pk_ses.100001.4cf6': '*',
'_vwo_uuid_v2': 'AD40AA237919D79C67460DEFD37AFAA4|65f61f85190c51b2cfa95d3910cc2914',
'ap': '1',
'bid': 'hZdgjLJMNv4',
'gr_user_id': '2d7956ee-7cd2-4fad-8a7d-d0b2265ceeba',
'll': '118316'}
首先我们注意到__utm开头的cookies, 它们是Google Analytics用于分析访客信息的:__utma stores the amount of visits (for each visitor), the time of the first visit, the previous visit, and the current visit
__utma 是用于记录访问时间的:
In [68]: for ts in cookies['__utma'].split('.'):
...: print(datetime.fromtimestamp(int(ts)))
...:
...:
1977-02-02 09:31:51
1992-11-08 07:05:42
2017-03-17 19:34:35
2017-03-17 19:34:35
2017-03-17 19:34:35
1970-01-01 08:00:01
从第三个时间开始就是我们的初次访问, 之前访问, 以及现在的时间.__utmb and __utmc are used to check approximately how fast people leave: when a visit starts, and approximately ends (c expires quickly).
__utmb 和 __utmc也是时间戳, 用于计算你在豆瓣逗留的时间, 这里就不再展示了.__utmz records whether the visitor came from a search engine (and if so, the search keyword used), a link, or from no previous page (e.g. a bookmark).
__utmz 记录着你进入豆瓣的途径, 通过搜索引擎或者是其他的链接:
In [70]: cookies['__utmz']
...:
...:
Out[70]: '223695111.1489750475.1.1.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided)'
可以简单的看出我是从Google搜索进入豆瓣的._pk_id* 你的ID
_p_ses* 这个一般不包含数据
_pk_ref 这个类似与HTTP 首部中的Refer, 记录着你跳转过来的页面:
In [75]: from urllib.parse import unquote
In [79]: unquote(cookies['_pk_ref.100001.4cf6'])
Out[79]: '["","",1489750475,"https://www.google.com.hk/"]'
In [80]: cookies['_pk_ref.100001.4cf6']
Out[80]: '%5B%22%22%2C%22%22%2C1489750475%2C%22https%3A%2F%2Fwww.google.com.hk%2F%22%5D'
In [81]: eval(unquote(cookies['_pk_ref.100001.4cf6']))[2]
Out[81]: 1489750475
In [82]: datetime.fromtimestamp(_)
Out[82]: datetime.datetime(2017, 3, 17, 19, 34, 35)
我们把Cookies中的URL解码一下, 可以得出我是从 https://www.google.com.hk/ 跳转过来的, 还有一个记录时间的时间戳
剩下的就是豆瓣自己设置的Cookies了, 不属于任何分析平台.
以上是使用浏览器打开豆瓣向服务器发送的Cookies, 那么服务器会向我们设置一些什么Cookies呢, 我们来测试一下:
In [93]: for i in range(10):
...: r = requests.get('https://movie.douban.com/tag/2016?start=0&type=T')
...: print(r.headers['Set-Cookie'])
...:
bid=YE31t9f2CtY; Expires=Sat, 17-Mar-18 13:11:42 GMT; Domain=.douban.com; Path=/
bid=AkV_9uN6CxQ; Expires=Sat, 17-Mar-18 13:11:43 GMT; Domain=.douban.com; Path=/
bid=8EhJ9dCj1pw; Expires=Sat, 17-Mar-18 13:11:44 GMT; Domain=.douban.com; Path=/
bid=G4O0c55MbGU; Expires=Sat, 17-Mar-18 13:11:52 GMT; Domain=.douban.com; Path=/
bid=UtW6FWxzk5E; Expires=Sat, 17-Mar-18 13:11:54 GMT; Domain=.douban.com; Path=/
bid=QzZ_sVbO4Qs; Expires=Sat, 17-Mar-18 13:11:56 GMT; Domain=.douban.com; Path=/
bid=dLPTZc4Kh7Q; Expires=Sat, 17-Mar-18 13:11:58 GMT; Domain=.douban.com; Path=/
bid=imFq99iN5f8; Expires=Sat, 17-Mar-18 13:12:00 GMT; Domain=.douban.com; Path=/
bid=Q-bdkpxA0zM; Expires=Sat, 17-Mar-18 13:12:15 GMT; Domain=.douban.com; Path=/
bid=3rv0SUwSG2c; Expires=Sat, 17-Mar-18 13:12:17 GMT; Domain=.douban.com; Path=/
分别请求豆瓣电影页10次, 可以看到豆瓣服务器向我们设置的是bid这一项, 并且是设置在豆瓣域名根目录下的, 表明这个Cookies会在我们访问任何豆瓣网页的时候都会发送给服务器, 我们看一下过期时间:
In [102]: import dateutil.parser
In [103]: dateutil.parser.parse('17-Mar-18 13:11:42 GMT')
Out[103]: datetime.datetime(2018, 3, 17, 13, 11, 42, tzinfo=tzutc())
可以看到这个Cookies的有效期为一年, 应该是作为我们的ID来追踪用户的.
总结:
这篇文章介绍了使用Python分析Cookies的一些方法, 找出了豆瓣用于追踪用户的Cookies项. 后续将会介绍如果伪装Cookies.
python 中cookie_使用Python分析Cookies相关推荐
- python中什么是异常,python中异常处理,python异常处理,什么是异常?异常是一
python中异常处理,python异常处理,什么是异常?异常是一 什么是异常? 异常是一个事件,该事件会在程序的执行中发生,影响程序的正常运行,一般情况下,在python无法正常处理程序时,就会发生 ...
- 在 Python 中构建一体化音频分析工具包,在一个地方分析您的音频文件
语言构成了人类之间每次对话的基础.因此,自然语言处理(或简称 NLP)领域无疑在帮助人类日常生活方面具有巨大潜力. 简而言之,NLP 领域包含一组旨在理解人类语言数据并完成下游任务的技术. NLP 技 ...
- 用 XGBoost 在 Python 中进行特征重要性分析和特征选择
使用诸如梯度增强之类的决策树方法的集成的好处是,它们可以从训练有素的预测模型中自动提供特征重要性的估计. 在本文中,您将发现如何使用Python中的XGBoost库来估计特征对于预测性建模问题的重要性 ...
- 使用XGBoost在Python中进行特征重要性分析和特征选择
[翻译自 : Feature Importance and Feature Selection With XGBoost in Python] [说明:Jason Brownlee PhD大神的文章个 ...
- python中语法错误-python冒号语法错误python中如何创建字典
python字典定义 字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ...
- 2!=5 or 0在python中是否正确-Python 中的 or and 运算,看这一篇就够
问题出现: Python 中的 or,and 运算,可以写出比较复杂的演算表达式: 看了一些大神的演算规则解释,觉得不是很好理解,有些人甚至理解错了规则. 这里聊一下自己的理解. 其他人是怎么做的: ...
- python中location_使用python请求模块时的LocationValueError
我一直在使用请求包与Web进行交互,过去没有任何问题 . 最近当使用我大约一周没用过的脚本时,我在执行例程 requests.get() 调用时遇到以下错误: LocationValueError: ...
- python中var_【Python金融量化】VaR系列(一):HS,WHS,RM方法估计VaR
最近参加了一个线上学习计划,一群人一起学<Elements of Financial Risk Management>这本书,主要偏向于金融时间序列和多因子模型的知识,结合python编程 ...
- python中文文档-Python语言、主要工具与类库中文文档
Python是Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言. Python 提供了非常完善的基础代码库,覆盖了网络.文件.GUI.数据库.文本等大量 ...
最新文章
- MySQL出现同步延迟有哪些原因?如何解决?
- Android No static field XXX of type I in class Lcom/XXX/R$id错
- 【LeetCode从零单排】No96	Unique Binary Search Trees
- 如何找到Partner 相关设置里哪些是SAP 标准deliver的,哪些是我们自己创建的
- 液态渐变背景纹理,选择一个新潮的背景,为你的设计加分!
- 083 conllections模块
- 数据仓库与数据挖掘论文
- matlab单回路和串级控制回路,串级控制回路PID参数如何整定?
- 6 种 Python 数据可视化工具
- python的多行注释以什么开头_Python的多行注释
- 计算机复试专业课笔试,关于计算机考研专业课的考试内容
- VML实例-拖动效果
- 【译】 on the expressive power of deep architectures
- (javascript)(基础知识+实例) 15.JSON,对象克隆,正则表达式
- JavaFX游戏制作:让你的精灵动起来
- 完美解决 w10 设置 个性化 wifi 无法打开的问题
- 阿里云虚拟主机,免费用
- SQL语句(四)联表查询
- php 可以将图片分类吗,PHP图片处理教程.ppt
- 如何发表一篇核心期刊论文