1. 前言
有一些网站,登陆和没登录的权限不同,还有一些网站必须要先登陆才能进入使用。在利用python爬虫模拟登陆时,经常不能请求到登陆后的界面信息,这时就会用到cookie,这里简单介绍一下Cookie和Session的概念
2. Cookie
-
cookie记录了包括登录状态在内的所有信息,这些信息由服务器生成和解释,服务器通过客户端携带的cookie来识别用户
-
cookie存在生命周期,短的关掉浏览器就失效,长的能若干天免登陆,一旦失效就要重新获取。所以只要得到登录后的cookie并必要时进行更新,服务器就会认定其为登录状态。
2.1 利用Cookie实现模拟登陆的两种方式
- 将Cookie插入Headers请求头
Headers = {
"Cookie":xxx
}
- Cookies直接作为requests方法的参数
Cookie = {"Cookie":xxx}
requests.get(url,cookie = Cookie)
这两种方式都要我们手动找到Cookie值
3. Session
- session会话对象,可以进行请求的发送
- session和cookie的作用类似,都是为了存储用户相关的信息。不同的是,cookie是存储在本地浏览器,而session存储在服务器
- requests库提供了会话对象(
requests.Session()
)让使用者能跨请求保持某些参数如cookie,而且能自动处理服务器发来的cookie,使得同一个会话中的请求都带上最新的cookie,非常适合模拟登录。使用上也非常简单,实例化后几乎相当于一个requests对象拥有get,post等方法,text,cotent等属性。
3.1 利用request创建session对象的步骤
requests.Session()
实例化session对象- 使用
session.post()
模拟登陆,此时将得到cookie,并保存到session
中 - 再使用
session.post()
或session.get()
方法请求页面时,不会提示需要登录,因为上一步已经将cookie保存到会话中
import requests
# 1. 通过requests.Session()创建session对象
session = requests.Session()
'''2. session和request一样可以使用post和get方法,且使用方法一致
使用session对象进行post请求的发生时,cookie会被存储在session中'''
session.post(url = url,data = data,headers = headers)
# 3. 因为session中存储了cookie,所以再使用session对象发送get请求时,也是携带了cookie的
session.get(url = url, params = params,header = headers)