Cookie的Python爬虫应用
Cookie是什么
Cookie
,有时也用其复数形式 Cookies
,英文是饼干的意思。指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)。定义于 RFC2109 和 2965 中的都已废弃,最新取代的规范是 RFC6265 。
Cookie
就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息。 服务器在接收到Cookie
以后,会验证Cookie
的信息,以此来辨别用户的身份。
Cookie
可以理解为一个临时通行证。
Cookie有什么用
由于我们的HTTP协议是无状态的,所以我们要在网站上实现登陆之类的保持状态的功能的话就需要借助于Cookie
。
每一次HTTP请求在数据交换完毕之后就会关闭连接,所以下一次HTTP请求就无法让服务端得知你和上一次请求的关系。而使用了Cookie
之后,你在第一次登陆之类的请求成功之后,服务器会在Response
的头信息中给你返回Cookie
信息,你下一次访问的时候带上这个Cookie信息,则服务器就能识别你为上一次成功登陆的用户。
Cookie的内容
Cookie
一般保存的格式为json格式,由一些属性组成。
- name:
Cookie
的名称 - value:
Cookie
的值 - domain:可以使用此
Cookie
的域名 - path:可以使用此
Cookie
的页面路径 - expires/Max-Age:此
Cookie
的超时时间 - secure:设置是否只能通过https来传递此条
Cookie
domain属性
域名一般来说分为顶级域名,二级域名,三级域名等等。
例如baidu.com是一个顶级域名,而www.baidu.com和map.baidu.com就是二级域名,依次类推。
而在我们的Cookie
来说,都有一个domain
属性,这个属性限制了访问哪些域名时可以使用这一条Cookie
。因为每个网站基本上都会分发Cookie
,所以domain
属性就可以让我们在访问新浪时不会带上百度分发给我们的Cookie
。
而在同一系的域名中,顶级域名是无法使用其二级域名的Cookie
的,也就是说访问baidu.com的时候是不会带上map.baidu.com分发的Cookie
的,二级域名之间的Cookie
也不可以共享。但访问二级域名时是可以使用顶级域名的Cookie
的。
path属性
path属性为可以访问此cookie的页面路径。 比如domain是abc.com,path是/test,那么只有/test路径下的页面可以读取此cookie。
expires/Max-Age属性
字段为此cookie超时时间。若设置其值为一个时间,那么当到达此时间后,此cookie失效。不设置的话默认值是Session,意思是cookie会和session一起失效。当浏览器关闭(不是浏览器标签页,而是整个浏览器) 后,此cookie失效。
Cookie的爬虫应用
- 以任何方式,如浏览器、selenium、封包等等,获取对应的
Cookie
- 将
Cookie
保存,可以保存到内存、文件、数据库中 - 在想要使用
Cookie
的项目中,从保存的地方取出Cookie
进行应用
PS
我们所说的使用Cookie
进行实现登陆,都是需要服务端支持的,也就是说服务器给我们的Cookie
有一个时间段的生命周期,这样我们保存下来的cookie才能在下次继续使用。
而有一些安全要求较高的网站,例如银行网站。是不支持cookie登陆的。