Python爬虫番外篇之Cookie和Session

关于cookie和session估计很多程序员面试的时候都会被问到,这两个概念在写web以及爬虫中都会涉及,并且两者可能很多人直接回答也不好说的特别清楚,所以整理这样一篇文章,也帮助自己加深理解

什么是Cookie

其实简单的说就是当用户通过http协议访问一个服务器的时候,这个服务器会将一些Name/Value键值对返回给客户端浏览器,并将这些数据加上一些限制条件。在条件符合时,这个用户下次再访问服务器的时候,数据又被完整的带给服务器。

因为http是一种无状态协议,用户首次访问web站点的时候,服务器对用户一无所知。而Cookie就像是服务器给每个来访问的用户贴的标签,而这些标签就是对来访问的客户端的独有的身份的一个标识,这里就如同每个人的身份证一样,带着你的个人信息。而当一个客户端第一次连接过来的时候,服务端就会给他打一个标签,这里就如同给你发了一个身份证,当你下载带着这个身份证来的时候,服务器就知道你是谁了。所以Cookie是存在客户端的,这里其实就是在你的浏览器中。

Cookie中包含了一个由名字=值(name = value)这样的信息构成的任意列表,通过Set-Cookie或Set-Cookie2 HTTP响应(扩展)首部将其贴到客户端身上。如下图例子所示:

其实这里有一个非常典型的应用,就是关于你登录很多网站的账号信息,你让记住密码之后,一段时间内,不需要输入密码,每次都是登录状态

Cookie的分类

这里Cookie主要分为两种:
会话Cookie:不设置过期时间,保存在浏览器的内存中,关闭浏览器,Cookie便被销毁
普通Cookie:设置了过期时间,保存在硬盘上

Cookie属性

因为最开始的cookie是网景公司定义的,后来又有了RFC版本所以当前的Cookie有两个版本:Version 0 Version 1 他们有两种设置响应头的标识,分别是:Set-Cookie和Set-Cookie2,这也造成了一些属性的不同,这里需要注意:常用的为Version 0

Version 0的属性

NAME = Value :键值对设置要保存的Name/Value,这里的name不能喝其他属性的名字一样
Expires:过期时间
Domain:生成该Cookie的域名
Path: 该Cookie是在当前的哪个路径下生成
Secure:如果设置了这个属性,那么只会在SSH连接时才会回传该Cookie

Version 1的属性

Name=VALUE:键值对设置要保存的Name/Value,这里的name不能喝其他属性的名字一样
Comment:主是想,用于说明该Cookie有什么用途
CommentURL:该服务器为此COokie提供URI注释
Discard:是否在回话结束丢弃该Cookie,默认为false
Domain:生成该Cookie的域名
Max-Age:最大失效时间,与Version 0不同的是这里设置的是在多少秒后失效
Path:该Cookie是在当前的哪个路径下生成
Port:该 Cookie 在什么端口下可以回传服务端,如果有多个端口,以逗号隔开
Secure:如果设置了这个属性,那么只会在SSH连接时才会回传该Cookie

关于Session

上面我们知道了Cookie可以让服务器端跟踪每个客户端的访问,但是每次客户端的访问都必须传回这些 Cookie,如果 Cookie 很多,这无形地增加了客户端与服务端的数据传输量,而 Session 的出现正是为了解决这个问题。

同一个客户端每次和服务端交互时,不需要每次都传回所有的Cookie值,而是只要传回一个ID这个ID是客户端第一次访问服务器的时候生成的,而且每个客户端是唯一的。这样每个客户端就有了一个唯一的ID,客户端只要传回这个ID就行了,这个ID通常是NANE为JSESIONID的一个Cookie。所以Session其实是利用Cookie进行信息处理的。

    1. cookie和session的共同之处在于:cookie和session都是用来跟踪浏览器用户身份的会话方式。
    2. cookie 和session的区别是:cookie数据保存在客户端,session数据保存在服务器端。
    3. cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,如果主要考虑到安全应当使用session,当然也没有绝对的安全,只是相对cookie,session更加安全
    4. session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,如果主要考虑到减轻服务器性能方面,应当使用COOKIE
    5. cookie和session各有优缺点,所以将登陆信息等重要信息存放为SESSION;其他信息如果需要保留,可以放在COOKIE中
### 回答1: Python爬虫中的cookiesession是两个重要的概念。 Cookie是服务器在客户端存储的一小段文本信息,用于记录用户的登录状态、浏览历史等信息。在Python爬虫中,我们可以使用requests库中的cookies参数来设置和获取cookie信息。 Session是一种记录用户状态的机制,它可以在不同的请求之间保持用户的登录状态。在Python爬虫中,我们可以使用requests库中的Session对象来创建一个会话,从而实现登录、保持登录状态等操作。通过Session对象,我们可以方便地管理cookie信息,实现自动登录和持久化会话等功能。 ### 回答2: Python爬虫是指使用Python语言编写程序,自动获取互联网上的信息并进行数据分析或者存储的技术。而CookieSession则是爬虫程序中常用的两种技术,它们的作用是帮助爬虫程序模拟网站的登录情况和维持网站和爬虫程序之间的会话状态,以便进行身份认证和绕过防护机制。 Cookie是存储在浏览器客户端的数据,主要用于表示用户身份、用户访问时间、用户信息等,如用户访问某个网站时会在浏览器中创建一个Cookie,这个Cookie信息会被服务器进行读取和处理。当爬虫程序需要模拟网站登录时,需要获取并保存服务器返回的Cookie,以便后续更好的请求和响应网站数据。Python中通过requests模块进行Cookie使用。requests模块中有一个Session对象,默认情况下,Session对象会存储Cookie到本地,这就相当于保存了用户的登录状态,方便后面的请求使用。在requests的get和post方法调用时,通过传递session对象作为第一个参数,就可以在整个请求过程中使用保存过的Cookie信息。具体使用方法如下: ``` # 创建session对象 import requests session = requests.Session() # 网站登录请求 session.post(login_url, data=user_data) # 获取用户信息 user_info = session.get(user_url) ``` 而Session则是保存Web应用程序会话的数据结构,即Session是由Web应用程序使用的一种机制,该机制通过在客户端存储或通过增加HTTP Cookie的方式传递标识符来维护状态信息。Session的数据保存在服务器端,每次请求时都会带上保存在Cookie中的Session ID,服务器根据Session ID来查找对应的Session对象。在Python中,我们可以通过Flask、Django等Web框架来实现Session使用。 综上,CookieSession爬虫程序中非常重要的技术,能够帮助爬虫程序更好地模拟登录和保持会话,让爬虫程序更快速、准确地抓取网站信息。但需要注意的是,爬虫程序的使用需要遵守网站的相关规定和道德底线,不得违反相关法律法规和道德规范。 ### 回答3: Python爬虫是一个广泛应用于网络数据抓取和处理的技术。在Python爬虫中,cookiesession是非常重要的概念,它们有助于实现身份验证和保持用户会话状态。在本篇文章中,我们将具体介绍cookiesessionPython爬虫中的应用。 1. Cookie Cookie是一种客户端存储机制,通常由Web服务器在HTTP响应头中返回。Cookie可以包含存储在客户端计算机上的信息,并在相应的HTTP请求中发送回服务器。Python中的Requests库可以方便地处理Cookie使用方法如下: ``` import requests # 创建Session对象 s=requests.Session() # 访问登陆页,获取cookie s.get('http://www.example.com/login') # 从响应中读取cookie cookie=s.cookies.get_dict() # 发送带有cookie的请求 s.get('http://www.example.com/user',cookies=cookie) ``` 从上面的代码可以看出,通过创建一个Session对象,我们可以在访问登陆页时获取Cookie,在后续请求中将Cookie发送回服务器。这种方式可以模拟用户登陆状态,方便爬取需要用户身份验证的数据。 2. Session Session是另一种用于跟踪用户会话状态的机制。与Cookie不同,Session是由Web服务器在服务器端管理的。当用户发送请求时,服务器会为用户创建一个Session,该Session在Web服务器上存储。Python中也可以方便地使用Session来处理会话状态,使用方法如下: ``` import requests # 创建Session对象 s=requests.Session() # 在Session中发起请求 s.get('http://www.example.com/user') ``` 通过创建一个Session对象,我们可以在爬取时保持用户的会话状态,实现一些需要用户登录后才能进行的操作。与Cookie不同,Session的内部机制是由Web服务器实现的,并不需要我们自己去处理。 总结 从上述内容可以看出,CookieSessionpython爬虫中起着至关重要的作用。Cookie可以方便地处理用户身份验证,从而实现一些需要用户身份验证的操作。而Session则可以方便地处理用户会话状态,为用户提供一种无缝的体验,在爬虫中也有广泛的应用。因此,Python爬虫开发者应该熟练掌握CookieSession的用法,以便在爬取数据时更加高效、方便。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值