python 爬虫(三)cookie和session + 爬虫中使用cookie或session实现登录 + 代理的设置(解决ip被封问题)

一、cookie和session


1.产生的缘由


Http有个特点,即无状态。Http无状态是指Http协议对事务处理没有记忆能力,当我们向服务器发送请求后,服务器处理请求之后返回结果。这是一个独立的过程,再次向服务器发出请求,服务器做出响应又是一次独立的过程,服务器不会记录前后状态变化。因此,服务器并不知道收到的两次请求是否来自同一个用户。这种效果并不是我们想要的。为了保持前后的状态,我们需要将前面所有请求中的数据再重传一次,这是非常麻烦和浪费资源的。为了解决这个问题,用于保持HTTP连接状态的Session和Cookies就出现了。


2.cookie和session存放位置


  • cookie是在客户端记录状态,一般存放在客户端
  • session是在服务器端记录状态,一般存在服务器或数据库中

3. cookie


① cookie定义


  • cookies 指某些网站为了辨别用户身份、进行会话跟踪而存储在用户本地终端上的数据。
  • Cookie中包含了一个由名字=值(name=value)这样的信息构成的任意列表,通过Set-Cookie或Set-Cookie2HTTP响应(扩展)首部将其贴到客户端身上。

② cookie的分类


  • 会话cookie
    • 定义:不设置过期时间,在浏览器内存中存储的cookie,浏览器关闭,会话cookie失效
  • 持久cookie
    • 定义:保存在硬盘的cookie

注意:这两种cookie分配的标准主要是通过MaxAge或Expires这个cookie的字段来定义的----->为负数,则为会话cookie。


③ cookie的组成(属性)


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

  • Version0的属性
cookie属性作用
NAME=Value键值对设置要保存的Name/Value,这里的name不能喝其他属性的名字一样。Name : 该cookie的名称。一旦创建, 该名称便不可更改。value : 该cookie 的值。如果值为Unicode 字符, 需要为字符编码。如果值为二进制数据, 则需要使用BASE64 编码。
Domain可以访问该cookle 的域名。例如, 如果设置为.zhihu.com , 则所有以zhihu.com 结尾的域名都可以访问该cookie。
MaxAge/Expires该cookie 失效的时间, 单位为秒, 也常和Expires— 起使用, 通过它可以计算出其有效时间。Max Age 如果为正数, 则该cookie 在Max Age 秒之后失效。如果为负数, 则关闭浏览器时cookie 即失效, 浏览器也不会以任何形式保存该cookie 。
Path该cookie 的使用路径。如果设置为/path/ , 则只有路径为/ path / 的页面可以访问该cookie 。如果设置为/ , 则本域名下的所有页面都可以访问该cookieo
Size此Cookie 的大小
HTTPcookie 的httponly 属性。若此属性为true , 则只有在HTTP 头中会带有此Cookie 的信息, 而不能通过document.cookie 来访问此Cookie。
Secure该cookie 是否仅被使用安全协议传输。安全协议有H TTP s 和SSL 等, 在网络上传输数据之前先将数据加密。默认为false。
  • Version1的属性
cookie属性作用
Name=VALUE键值对设置要保存的Name/Value,这里的name不能喝其他属性的名字一样
Comment用于说明该Cookie有什么用途
CommentURL该服务器为此COokie提供URI注释
Discard是否在回话结束丢弃该Cookie,默认为false
Domain生成该Cookie的域名
Max-Age最大失效时间,与Version0不同的是这里设置的是在多少秒后失效
Path该Cookie是在当前的哪个路径下生成
Port该Cookie在什么端口下可以回传服务端,如果有多个端口,以逗号隔开
Secure如果设置了这个属性,那么只会在SSH连接时才会回传该Cookie

④ cookie被用户禁用,如何使用session?


  • cookie和session一般是配合使用的,当cookie被用户禁用,session如何使用
  • 两种方法:
    • 方法一:提示用户必须开启
    • 方法二:使用url重传。------->就是将sessionid附带url后面传递给服务器

⑤ 常见误区


在这里插入图片描述


4. session


① session的由来


上面我们知道了Cookie可以让服务器端跟踪每个客户端的访问,但是每次客户端的访问都必须传回这些Cookie,如果Cookie很多,这无形地增加了客户端与服务端的数据传输量,而Session的出现正是为了解决这个问题。
同一个客户端每次和服务端交互时,不需要每次都传回所有的Cookie值,而是只要传回一个ID这个ID是客户端第一次访问服务器的时候生成的,而且每个客户端是唯一的。这样每个客户端就有了一个唯一的ID,客户端只要传回这个ID就行了,这个ID通常是NANE为JSESIONID的一个Cookie。所以Session其实是利用Cookie进行信息处理的。


② session的定义


对于session,会话, 其本来的含义是指有始有终的一系列动作/ 消息。而在web 中, 会话对象用来存储特定用户会话所需的属性及配置信息。


③ session流程


当客户端发送一个cookie,服务器会从这个cookie中找到sessionId,在查找出相应session信息返回给客户端,来进行用户页面的流转。如果通过sessionid来查找session,发现session没有,因为第一次登陆,就会创建一个session。在session有效期内,继续访问该页面,服务器就会直接查找到这个session返回给客户端。


④ session失效时间


当session的失效时间到达时失效,一般是30分钟。


5. session和cookie的区别


  • cookie和session的共同之处在于: cookie和session都是用来跟踪浏览器用户身份的会话方式。

  • cookie和session的区别是:

    • cookie数据保存在客户端,session数据保存在服务器端。
    • cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,如果主要考虑到安全应当使用session,当然也没有绝对的安全,只是相对cookie,session更加安全。
    • session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,如果主要考虑到减轻服务器性能方面,应当使用COOKIE
    • cookie校验速度快,session校验速度慢
  • 对于session,会话, 其本来的含义是指有始有终的一系列动作/ 消息。而在web 中, 会话对象用来存储特定用户会话所需的属性及配置信息。

  • cookies 指某些网站为了辨别用户身份、进行会话跟踪而存储在用户本地终端上的数据。

  • 产生缘由:由于http是一个无状态的协议,每次请求如果需要之前请求的一些信息,此时必须重新发送之前的请求。为了解决这种问题,产生了一种记录状态技术-----就是cookie和session

  • cookie是在客户端记录状态,session是在服务器端记录状态

  • 联系:当客户端发送一个cookie,服务器会从这个cookie中找到sessionId,在查找出相应session信心返回给客户端,来进行用户页面的流转。如果通过sessionid来查找session,发现session没有,因为第一次登陆,就会创建一个session。在session有效期内,继续访问该页面,服务器就会直接查找到这个session返回给客户端。

总结:cookie和session各有优缺点,所以将登陆信息等重要信息存放为SESSION;其他信息如果需要保留,可以放在COOKIE中


二、使用cookie或session登录


1. 爬虫中登录的实现方法


  • 两种方法:
    • 第一种:封装登录后页面中的cookie在请求头中
    • 第二种:使用requests的session对象,来做到登录。
session = requests.session()
这个session对象可以记录登录状态。

2. 使用cookie登录的两种方法


① 直接放在headers头部中


案例:使用cookie登录人人网

import requests

base_url = 'http://www.renren.com/972683074/newsfeed/photo'

## 通过cookie来做到登录时,我们必须拿浏览器中登陆后的页面中的cookie来进行封装

headers = {
'Cookie': 'headers中的cookie',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36'
}

response = requests.get(base_url,headers=headers)

if "飘雪" in response.text:
    print("登录人人网个人页成功")
else:
    print("登录失败")

通过客户端cookie将我们的信息传到服务器,服务器验证成功后允许登录访问,我们拿到的就是这个cookie封装后的结果
在这里插入图片描述


② 使用requests插入Cookie


import requests

base_url = 'http://www.renren.com/972683074/newsfeed/photo'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36'
}
cookie = {'Cookie': 'headers中的cookie'}
requests.get(url,cookies=cookie,headers=headers).text

3. 使用session登录


在登录页面通过form表单的提交地址,提交用户名密码登录
在这里插入图片描述
案例:人人网

import requests

base_url = 'http://www.renren.com/PLogin.do'
headers= {
    'Host': 'www.renren.com',
    'Referer': 'http://safe.renren.com/security/account',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36',
}
data = {
    'email':'13016031459',
    'password':'Abc12345^',
}
#创建一个session对象
se = requests.session()
#用session对象来发送post请求进行登录。
se.post(base_url,headers=headers,data=data)
response = se.get('http://www.renren.com/971682585')

if '鸣人' in response.text:
    print('登录成功!')
else:
    print(response.text)
    print('登录失败!')

三、代理的设置


1. 代理的基本原理


在这里插入图片描述


2. 代理的作用


在这里插入图片描述


3. 代理的分类


① 根据协议来区分


在这里插入图片描述


② 根据匿名程度来区分


在这里插入图片描述


③ 在requests中如何设置代理


  1. 创建一个代理字典
proxies = {
'http':代理ip
'https':'https://ip:port'
}
  1. 用get或post方法请求的时候,增加proxies这个参数就可以了
requests.get(proxies = proxies)

  • 11
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答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的数据保存在服务器端,每次请求时都会带上保存在CookieSession 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、付费专栏及课程。

余额充值