前言

本文的灵感来自于:

正文

本文已豆瓣电影的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相关推荐

  1. python中什么是异常,python中异常处理,python异常处理,什么是异常?异常是一

    python中异常处理,python异常处理,什么是异常?异常是一 什么是异常? 异常是一个事件,该事件会在程序的执行中发生,影响程序的正常运行,一般情况下,在python无法正常处理程序时,就会发生 ...

  2. 在 Python 中构建一体化音频分析工具包,在一个地方分析您的音频文件

    语言构成了人类之间每次对话的基础.因此,自然语言处理(或简称 NLP)领域无疑在帮助人类日常生活方面具有巨大潜力. 简而言之,NLP 领域包含一组旨在理解人类语言数据并完成下游任务的技术. NLP 技 ...

  3. 用 XGBoost 在 Python 中进行特征重要性分析和特征选择

    使用诸如梯度增强之类的决策树方法的集成的好处是,它们可以从训练有素的预测模型中自动提供特征重要性的估计. 在本文中,您将发现如何使用Python中的XGBoost库来估计特征对于预测性建模问题的重要性 ...

  4. 使用XGBoost在Python中进行特征重要性分析和特征选择

    [翻译自 : Feature Importance and Feature Selection With XGBoost in Python] [说明:Jason Brownlee PhD大神的文章个 ...

  5. python中语法错误-python冒号语法错误python中如何创建字典

    python字典定义 字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ...

  6. 2!=5 or 0在python中是否正确-Python 中的 or and 运算,看这一篇就够

    问题出现: Python 中的 or,and 运算,可以写出比较复杂的演算表达式: 看了一些大神的演算规则解释,觉得不是很好理解,有些人甚至理解错了规则. 这里聊一下自己的理解. 其他人是怎么做的: ...

  7. python中location_使用python请求模块时的LocationValueError

    我一直在使用请求包与Web进行交互,过去没有任何问题 . 最近当使用我大约一周没用过的脚本时,我在执行例程 requests.get() 调用时遇到以下错误: LocationValueError: ...

  8. python中var_【Python金融量化】VaR系列(一):HS,WHS,RM方法估计VaR

    最近参加了一个线上学习计划,一群人一起学<Elements of Financial Risk Management>这本书,主要偏向于金融时间序列和多因子模型的知识,结合python编程 ...

  9. python中文文档-Python语言、主要工具与类库中文文档

    Python是Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言. Python 提供了非常完善的基础代码库,覆盖了网络.文件.GUI.数据库.文本等大量 ...

最新文章

  1. MySQL出现同步延迟有哪些原因?如何解决?
  2. Android No static field XXX of type I in class Lcom/XXX/R$id错
  3. 【LeetCode从零单排】No96 Unique Binary Search Trees
  4. 如何找到Partner 相关设置里哪些是SAP 标准deliver的,哪些是我们自己创建的
  5. 液态渐变背景纹理,选择一个新潮的背景,为你的设计加分!
  6. 083 conllections模块
  7. 数据仓库与数据挖掘论文
  8. matlab单回路和串级控制回路,串级控制回路PID参数如何整定?
  9. 6 种 Python 数据可视化工具
  10. python的多行注释以什么开头_Python的多行注释
  11. 计算机复试专业课笔试,关于计算机考研专业课的考试内容
  12. VML实例-拖动效果
  13. 【译】 on the expressive power of deep architectures
  14. (javascript)(基础知识+实例) 15.JSON,对象克隆,正则表达式
  15. JavaFX游戏制作:让你的精灵动起来
  16. 完美解决 w10 设置 个性化 wifi 无法打开的问题
  17. 阿里云虚拟主机,免费用
  18. SQL语句(四)联表查询
  19. php 可以将图片分类吗,PHP图片处理教程.ppt
  20. 如何发表一篇核心期刊论文

热门文章

  1. caffe模型weightsfeatureMap 可视化(c++)
  2. PGM中的有向分离(d-separation)和 active trail
  3. jetty9.x版本配置优化
  4. vscode 配置php
  5. Linux 文件系统在线扩容实战
  6. matlab c++ 符号变量问题
  7. Go 语言中的 new() 和 make()的区别
  8. C# MD5 32位加密 UTF-8编码
  9. 关于配置Tomcat的URIEncoding
  10. Dojo API略解续