爬虫cookies详解
cookies简介
cookie是什么?
Cookie,有时也用其复数形式 Cookies,指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)。定义于 RFC2109 和 2965 中的都已废弃,最新取代的规范是 RFC6265[1]。Cookie其实就是浏览器缓存。
cookie的生命周期
- 会话cookie:没有设置expires(是个时间戳)的,浏览器(session)关闭后,就自动失效
- 持久cookie:设置了expires的,根据设置的失效时间决定(expires时间是可以进行修改的, 但是很多网站会做防止修改的设置)
cookie具有的属性
- name:为一个cookie的名称。
- value:为一个cookie的值。
- domain:为可以访问此cookie的域名,譬如www.baidu.com:baidu.com就是顶级域名
域名的划分:http://aaa.bbb.secode.first.com,每一个点划分为一个域名,域名从后向前一次为顶级、一级、二级等。
- 非顶级域名,如二级域名或者三级域名,设置的cookie的domain只能为顶级域名或者二级域名或者三级域名本身,不能设置其他二级域名的cookie,否则cookie无法生成。
- 顶级域名只能设置domain为顶级域名,不能设置为二级域名或者三级域名,否则cookie无法生成。
- 二级域名能读取设置了domain为顶级域名或者自身的cookie,不能读取其他二级域名domain的cookie。所以要想cookie在多个二级域名中共享,需要设置domain为顶级域名,这样就可以在所有二级域名里面或者到这个cookie的值了。
- 顶级域名只能获取到domain设置为顶级域名的cookie,其他domain设置为二级域名的无法获取。
总结一下:域名具有继承性,只能使用其自身或其父辈的域名,不能使用其子域名或者兄弟域名。例如:
a.b.c.d.com
a.b.x.d.com
c可以使用domain为d.com或者c.d.com的域名cookie,不能使用x.d.com的域名或者b.c.d.com,这里大家做好了解就行了,碰到这种情况知道有这么个情况就行,一般我们需要关注的很少。
- path:为可以访问此cookie的页面路径。 比如www.jianshu.com/u/680e0e38ddc9,path就是/u/680e0e38ddc9,那么只有/u/680e0e38ddc9路径下的页面可以读取此cookie。
- expires/Max-Age :为此cookie超时时间。若设置其值为一个时间(一个时间戳),那么当到达此时间后,此cookie失效。
不设置的话默认值是Session,意思是cookie会和session一起失效。
当浏览器关闭(不是浏览器标签页,而是整个浏览器) 后,此cookie失效。 - Size: 此cookie大小。
- http: cookie的httponly属性。若此属性为true,则只有在http请求头中会带有此cookie的信息,
而不能通过document.cookie来访问此cookie。 - secure : boolean型,默认为false,设置是否只能通过https来传递此cookie
我们做爬虫重点关注name和value。
cookie应用
- 以任何方式,如浏览器、selenium、封包方式等,获得对应的cookies
- 将cookies保存,可以是在内存、文件、数据库等
- 在你想要应用已有的cookie的 项目 中,已各种方式:文件、数据库、网络等,获取到对应的cookie,然后进行设置,接着就可以访问对应的资源了
实际应用:
- 有几台专门的服务器,进行登录操作,所有账号保存在数据库,由这些专门登录的服务器进行登录操作,登录成功后,保存cookies到数据库
- 有专门的应用服务器,从数据库读取cookies,进行相应的业务操作,这种服务器不处理登录操作
PS:
- cookie的应用,必须是服务器支持不同的session可以使用同一个cookie
- expires是一个客户端和服务器的君子约定,浏览器检测到失效了,就不会读取这个cookie,大部分网站都不会检测这个cookie失效,部分要求严格的网站是会检测的,和服务器时间进行比对,判断是否失效。
- cookie都是由服务器设置的,你客户端设置没意义,服务器不会进行验证,通过response的headers中set-cookie设置
留在最后的话:并不是所有网站都适合保存cookies进行登录,怎么检查哪些网站可以使用保存cookies进行登录呢?我们可以在浏览器中进行登录操作,登录成功后,关闭浏览器,然后重新打开浏览器以后访问此网站,看看是否处于登录状态,如果是登录状态,那么这个网站很大程度上是可以使用cookies进行访问操作的。
如果你觉得我的文章还可以,可以关注我的微信公众号,查看更多实战文章:Python爬虫实战之路
也可以扫描下面二维码,添加我的微信公众号
爬虫cookies详解的更多相关文章
- javascript 操作cookies详解
javascript 操作cookies详解 这段操作cookies的方法我使用很久了,但是一直一来没遇到什么问题,今天在做一个在第一个页面保存了cookies,第二个页面获取或者第三个页面获取的功能 ...
- Cookie的使用、Cookie详解、HTTP cookies 详解、获取cookie的方法、客户端获取Cookie、深入解析cookie
Cookie是指某些网站为了辨别用户身份.进行session跟踪而存储在用户本地终端上的数据(通常经过加密),比如说有些网站需要登录才能访问某个页面,在登录之前,你想抓取某个页面内容是不允许的.那么我 ...
- python爬虫知识点详解
python爬虫知识点总结(一)库的安装 python爬虫知识点总结(二)爬虫的基本原理 python爬虫知识点总结(三)urllib库详解 python爬虫知识点总结(四)Requests库的基本使 ...
- HTTP cookies 详解(国外一位大牛的文章)
原文:http://blog.csdn.net/lijing198997/article/details/9378047 HTTP cookies,通常又称作"cookies",已 ...
- Python爬虫 | Selenium详解
一.简介 网页三元素: html负责内容: css负责样式: JavaScript负责动作; 从数据的角度考虑,网页上呈现出来的数据的来源: html文件 ajax接口 javascript加载 如果 ...
- 增量式爬虫 Scrapy-Rredis 详解及案例
1.创建scrapy项目命令 scrapy startproject myproject 2.在项目中创建一个新的spider文件命令: scrapy genspider mydomain mydom ...
- Sessions 与Cookies详解
一.Cookie 是什么? HTTP协议是无状态的,每一次数据交换完毕就结束,服务器端和客户端的链接就会关闭,每次交换数据都需要建立新的链接.例如:我逛淘宝买东西,我看上了易宝棒棒糖,而我下单的时候 ...
- Python爬虫实战详解:爬取图片之家
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 如何使用python去实现一个爬虫? 模拟浏览器请求并获取网站数据在原始数据 ...
- 爬虫(14) - Scrapy-Redis分布式爬虫(1) | 详解
1.什么是Scrapy-Redis Scrapy-Redis是scrapy框架基于redis的分布式组件,是scrapy的扩展:分布式爬虫将多台主机组合起来,共同完成一个爬取任务,快速高效地提高爬取效 ...
随机推荐
- vim下看C++代码
看C++代码, 缺少合适的编辑器,捣鼓vim. 安装Vundle, 用于插件管理 git clone https://github.com/VundleVim/Vundle.vim.git ~/.vi ...
- 云服务器上安装MSF环境
在校园网内,禁止使用路由器之类的,所以就导致自己本地虚拟机环境出现各种各样的网络问题,解决起来过于繁琐,为此在服务器上安装MSF 0x00 安装MSF 使用Xshell等工具连上远程服务器后,首先确保 ...
- Hibernate相关概念及序列化和持久化的区别
hibernate是一种ORM(object relation mapping,对象关系映射)框架,所谓的对象关系映射,通俗的说,就是把JAVA对象保存到关系型数据库中. hibernate要做的事, ...
- 如何用java实现图片与base64转换
如果你是一个软件开发,不论前端后端工程师,图片的处理你是肯定要会的,关于图片的Base64编码,你可能有点陌生,但是这是一个软件工程师应该要掌握的知识点,现在很多网友把图片与base64转换都做成了小 ...
- python_4
1.迭代器:通过iter()方法获得了list的迭代对象,然后就可以通过next()方法来访问list中的元素了,当容器中没有可访问元素时,会抛出StopIteration异常终止迭代器 data = ...
- jquery时间控件
jQuery 时间控件推荐 博客分类: jQuery 时间控件 My97DatePicker My97DatePicker是一个更全面,更人性化,并且速度一流的日期选择控件.具有强大的日期范围限 ...
- Helvetic Coding Contest 2019 差A3 C3 D2 X1 X2
Helvetic Coding Contest 2019 A2 题意:给一个长度为 n 的01序列 y.认为 k 合法当且仅当存在一个长度为 n 的01序列 x,使得 x 异或 x 循环右移 k 位的 ...
- 【mysql学习】InnoDB数据结构
原来知道有一些索引失效的条件,最近看了看mysql底层数据结构,明白了为什么会失效 ,记录之.众所周知,常用的mysql数据引擎有两种,今天全是以InnoDB为基础开启探索之旅的,另一种有时间再说吧. ...
- Qt .pro文件详解
在我们创建Qt工程项目时,Qt Creator总会创建一个.pro文件,我们称.pro文件为Qt的工程管理文件.一个工程项目可以包含一个或多个.pro文件.理解和掌握pro文件的用法,将有利于Qt开发 ...
- [Linux] Ubuntu 配置nfs
安装NFS Server: 1. 执行命令 "$ sudo apt-get install nfs-kernel-server",安装nfs server 端 2. 创建需要用来分 ...