-
2021-02-09 06:02:18
session()方法
会话对象让你能够跨请求保持某些参数。它也会在同一个 Session 实例发出的所有请求之间保持 cookie,如果你向同一主机发送多个请求,底层的 TCP 连接将会被重用,从而带来显著的性能提升
session()中添加cookie
session()中添加cookie有两种情况,第一种cookie传参为字典格式,则需要通过requests.cookies.RequestsCookieJar()的set方法将其转换成Jar包格式然后update到session()对象中,第二种cookie直接传参Jar包格式。这种直接update将cookies更新到session()对象中
import requests
# 字典格式的cookie添加方法
r = requests.session()
cookie = {"cookie1": "value_1", "cookie2": "value2"}
c = requests.cookies.RequestsCookieJar()
for key, value in cookie.items():
c.set(key, value) # 添加cookie到RequestsCookieJar中
r.cookies.update(c) # 将RequestsCookieJar中的cookie更新到session()中
print(r.cookies)
# jar包格式的cookie添加方法
s = requests.session()
print(s.cookies) # 打印session会话中cookies为空
s.cookies.update(r.cookies) # 将变量r中的jar包格式cookie直接更新到赋值session对象的变量s中
print(s.cookies) # 打印发现变量r中的jar包格式cookie直接更新到会话对象s中
跨请求保持会话实例:
import requests
s = requests.Session()
r1 = s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
print(r1.text)
# '{"cookies": {"sessioncookie": "123456789"}}'
r2 = s.get("http://httpbin.org/cookies")
print(r2.text)
# '{"cookies": {"sessioncookie": "123456789"}}'
注:任何你传递给请求方法的字典都会与已设置会话层数据合并。方法层的参数覆盖会话的参数。
import requests
s = requests.Session()
r = s.get('http://httpbin.org/cookies', cookies={'from-my': 'browser'})
print(r.text)
# '{"cookies": {"from-my": "browser"}}'
r = s.get('http://httpbin.org/cookies')
print(r.text)
# '{"cookies": {}}
注:使用了会话, 方法级别的参数也不会被跨请求保持,如下面的例子只会和第一个请求发送 cookie ,而非第二个。
import requests
s = requests.Session()
c = requests.cookies.RequestsCookieJar()
c.set('from-my', 'Chrome')
s.cookies.update(c)
# session()添加key为'from-my'的cookie
r1 = s.get('http://httpbin.org/cookies')
print(r1.text)
# '{"cookies": {'from-my': 'Chrome'}}
# 方法层次覆盖添加key为'from-my'但value为 browser的cookies
r2 = s.get('http://httpbin.org/cookies', cookies={'from-my': 'browser'})
print(r2.text)
# '{"cookies": {"from-my": "browser"}}'
# 跨请求后覆盖的cookie复原
r3 = s.get('http://httpbin.org/cookies')
print(r3.text)
# '{"cookies": {'from-my': 'Chrome'}}
session()中添加头部信息
相对来说session()中添加头部信息就简单直白多
import requests
s = requests.Session()
s.headers.update({'x-test': 'true'})
# both 'x-test' and 'x-test2' are sent
r = s.get('http://httpbin.org/headers', headers={'x-test2': 'true'})
print(r.text)
从会话字典参数中移除一个值
想省略字典参数中一些会话层的键。要做到这一点,你只需简单地在方法层参数中将那个键的值设置为 None ,那个键就会被自动省略掉
import requests
s = requests.Session()
s.headers.update({'x-test': 'true'})
r = s.get('http://httpbin.org/headers', headers={'x-test2': 'true'})
print(r.text)
s.headers.update({'x-test': None})
r = s.get('http://httpbin.org/headers', headers={'x-test2': 'true'})
print(r.text)
更多相关内容 -
Python—Session会话
2020-11-12 15:51:05会话Session能够跨请求保持某些参数,也会在同一个 Session 实例发出的所有请求之间保持 cookie 会话保持有两个内涵: 保存cookie,下一次请求会自动带上前一次的cookie 实现和服务端的长连接,加快请求速度 二,...当我们在爬取某些页面的时候,服务器往往会需要cookie,而想要得到cookie 就需要先访问某个URL进行登录,服务器接收到请求之后验证用户名以及密码在登录成功的情况下会返回一个响应,这个响应的header中一般会有一个set-cookie的信息,它对应的值就是要设置的cookie信息。
虽然我们再之前可以通过requests.utils.dict_from_cookiejar(r.cookies)提取到这个响应信息中设置的新cookie,但在下一个请求中再携带这个数据的过程较为麻烦,所以requests有个高级的方式“会话Session”
一,Session的作用
会话Session能够跨请求保持某些参数,也会在同一个 Session 实例发出的所有请求之间保持 cookie
会话保持有两个内涵:
- 保存cookie,下一次请求会自动带上前一次的cookie
- 实现和服务端的长连接,加快请求速度
二,使用方法
# 1. 创建一个session实例对象 s = requests.Session() # 2. 使用上一步创建的对象发起请求 r = s.get(url1, headers) r = s.get(url2, headers) r = s.get(url3, headers) r = s.get(url4, headers)
session对象在请求了一个网站后,对方服务器设置在本地的cookie会保存在session对象中,下一次再使用session对象请求对方服务器的时候,会自动带上前一次的cookie
示例:
import requests s = requests.Session() headers = { "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1" } # 发送第一个请求 r = s.get('https://www.baidu.com', headers=headers) print("第一次请求的请求头为:", r.request.headers) print("响应头:", r.headers) print("设置的cookie为:", requests.utils.dict_from_cookiejar(r.cookies)) # 发送第二个请求() r = s.get("https://www.baidu.com") print("第二次请求的请求头为:", r.request.headers)
效果如下:
-
Python中requests的会话保持session详解
2021-11-23 18:10:01requests库的session会话对象可以跨请求保持某些参数,说白了,就是比如你使用session成功的登录了某个网站,则在再次使用该session对象求求该网站的其他网页都会默认使用该session之前使用的cookie等参数 ...可能大家对session已经比较熟悉了,也大概了解了session的机制和原理,但是我们在做爬虫时如何会运用到session呢,就是接下来要讲到的会话保持。
首先说一下,为什么要进行会话保持的操作?
requests库的session会话对象可以跨请求保持某些参数,说白了,就是比如你使用session成功的登录了某个网站,则在再次使用该session对象求求该网站的其他网页都会默认使用该session之前使用的cookie等参数
尤其是在保持登陆状态时运用的最多,在某些网站抓取,或者app抓取时,有的时强制登陆,有的是不登陆返回的数据就是假的或者说是不完整的数据,那我们不可能去做到每一次请求都要去登陆一下怎么办,就需要用到保持会话的功能了,我们可以只登陆一次,然后保持这种状态去做其他的或者更多的请求。
实例如下:
import requests # 会话 session = requests.session() data ={ 'loginName': xxxxxx, #改为自己的用户名 'password': 'xxxxxxxxxx' #改为自己的登录密码 } # 登录 url ="https://passport.17k.com/ck/user/login" restult = session.post(url,data=data) # print(restult.text) # print(restult.cookies) # 再次请求 拿取书架上的数据 url2 = "https://user.17k.com/ck/author/shelf?page=1&appKey=2406394919" result_data = session.get(url2) print(result_data.json()['data'])
结果如下:
如果我们不使用这个,直接去请求数据就会提示:
这样就看的出来session的会话机制。
http协议本身是无状态的,为了让请求之间保持状态,有了session和cookie机制。requests也提供了相应的方法去操纵它们。
requests中的session对象能够让我们跨http请求保持某些参数,即让同一个session对象发送的请求头携带某个指定的参数。当然,最常见的应用是它可以让cookie保持在后续的一串请求中。
下面,通过官方文档中的示例来了解如何使用它。
从结果中我们可以看出,第二次请求已经携带上了第一次请求所设置的cookie,即通过session达到了保持cookie的目的。示例中创建了一个requests.Session()对象,通过该对象来进行http请求操作,该操作基本类似于requests.request()。由于session让请求之间具有了连贯性,那么,就有了跨请求参数和非跨请求参数的区别。即有时我想让所有请求均带有某个参数,而有时我只是想让单独的一条请求带上临时的参数。通过下面的例子来了解如何使用。
从结果中我们可以得出两条结论:
- session可以为请求方法提供缺省数据,比如第一次请求中的{'x-test': 'true'}就是缺省数据,此时的缺省数据就是跨请求参数。
- 方法级别的参数不会被跨请求保持,比如第二次请求时,没有携带headers={'x-test2': 'true'},返回的结果中也没有{'x-test2': 'true'},说明该参数没有在第一次请求后被保持住。
-
Python爬虫携带Cookie,session会话保持,对于需要登录才能抓数据的处理方式
2020-02-20 14:58:35方式三:session会话保持 request模块提供了session类,来实现客户端和服务端的会话保持,操作方法如下: 1.实例化session对象 2.使用session.post()模拟登陆,此时将得到cookie,并保存到session中 3....在做爬虫时,有的网站必须先登录才能访问到页面,爬这样的网页,就需要像请求中插入Cookie值,下面介绍3种方式
方式一:将Cookie插入Headers请求头
1,先登录成功一次,获取到携带登录信息的Cookie(需要手动)
拿CSDN举例,登录成功 -> 个人主页 -> 打开控制台 -> 刷新页面 -> 看到以自己用户名命名的文件 -> 复制cookie
2,携带cookie发请求
需要用到requests模块的get请求
import requests
headers={
'Cookie':'复制页面文件里的cookie值'
}
html=requests.get(url='',headers=headers).text
方式二:Cookies直接作为requests方法的参数
方式二与方式一都是通过携带Cookie来发请求,方式二直接调用requests的cookies参数,但是要求cookies是一个字典类型,所以要对从网上复制下来的cookie值进行一些处理,cookie中都是键值对的形式,如:
uuid_tt_dd=10_19035893370-1578805336439-452978; dc_session_id=10_1578805336439.387381;
我们要将这样的一串字符串做成字典的形式首先要将它以“; ”分隔,注意两个值直接不仅有;符号,还有一个空格,所以是;+空格。分隔之后得到的格式为:键=值 ,再以=号分隔,取[0]为键,[1]为值,如下:
import requests
cookies="从网上复制的cookie值"
cookies_dict={}
for i in cookies.split("; "):
cookies_dict[i.splict('=')[0]] = i.splict('=')[1]
html=requests.get(url='',cookies=cookies_dict}
方式三:session会话保持
request模块提供了session类,来实现客户端和服务端的会话保持,操作方法如下:
1.实例化session对象
2.使用session.post()模拟登陆,此时将得到cookie,并保存到session中
3.再使用session.post()或session.get()方法请求页面时,不会提示需要登录,因为上一步已经将cookie保存到会话中了
人人网案例:
首页URL:http://www.renren.com/
使用requests模拟登录人人网,获取请求的地址action:http://www.renren.com/PLogin.do
name="email",password="password"
使用session的posts方法做一次登录请求,将cookie保存在session会话里。
如下:
import requests
url='http://www.renren.com/PLogin.do' session=requests.session() data={ 'email':'', 'password':'' } session.post(url=url,headers=headers,data=data) html=se.get(url=url,headers=headers).text
提示:现在很多网站都做了验证码机制,使用以上的方式可能行不通。
-
Python实现模拟浏览器请求及会话保持操作示例
2020-09-20 05:11:01主要介绍了Python实现模拟浏览器请求及会话保持操作,结合实例形式分析了Python基于urllib与urllib2模块模拟浏览器请求及cookie保存会话相关操作技巧,需要的朋友可以参考下 -
Python+requests之session保持会话
2020-12-03 06:14:35session()方法会话对象让你能够跨请求保持某些参数。它也会在同一个 Session 实例发出的所有请求之间保持 cookie,如果你向同一主机发送多个求,底层的 TCP 连接将会被重用,从而带来显著的性能提升session()中添加... -
爬虫原理与会话保持(cookies、session)详解--python实现
2018-07-28 23:53:18为了解决这个问题,用于保持HTTP连接状态的Session和Cookies就出现了。 2、session与cookies session是指从我们打开一个网站开始至我们关闭浏览器一系列的请求过程。比如我们打开淘宝网站,淘宝网站的... -
requests使用session保持会话
2020-06-23 21:57:26session: 服务端会话技术,客户的验证信息存放在服务端,能在每个请求中自动携带所有cookie,从而保持会话持续。 -
python接口自动化测试八:更新Cookies、session保持会话
2021-01-28 18:45:28s = requests.session()# 此方法只适用于网站是cookies这种,网站是token的没用# 这样做的好处就是可以保存cookies并保持会话,不用每次都去获取、传参Token请求:Cookies请求:有保持登录的cookies:一:加入指定的... -
python+pytest接口自动化之session会话保持
2022-06-17 21:34:24那么今天笔者想讲通过session进行会话保持。session,即会话。那么什么又是会话?我们来看一下会话的生存周期就能大致明白,如下:会话保持,可以通俗的理解为使同一用户发送的相关联的请求处于同一个会话中不被断开... -
python 保持session状态
2020-12-29 21:39:59# 创建一个会话对象,它也会在同一个 Session 实例发出的所有请求之间保持 cookie, 期间使用 urllib3 的 connection pooling 功能。向同一主机发送多个请求,底层的 TCP 连接将会被重用,从而带来显著的性能提升 ... -
python+requests封装session会话
2021-09-22 11:27:24r.json()["data"]["token"] print(token_info) session.headers.update({"Authorization": "token "+token_info}) return session if __name__ == '__main__': session = get_token() print(session.headers) #time.... -
python 零基础学习篇python课程django框架 django会话保持和视图7 session的流程 .mp4
2022-04-21 12:45:16python 零基础学习篇 -
python session过期timeout处理
2021-02-09 06:24:191、使用webpy自身带的session配置选项,具体如下:web.config.session_parameters['cookie_name'] = 'webpy_session_id'web.config.session_parameters['cookie_domain'] = Noneweb.config.session_parameters['time... -
Python处理session的方法整理
2021-01-21 18:00:56其实这就是利用到了session会话机制。 因为HTTP协议是无状态的,那么在下订单,加入购物车等场景时,服务器是不知道哪个用户在操作。 因此,服务器需要为特定用户创建特定会话,该会话用于识别用户并跟 -
Python ORM框架SQLAlchemy学习笔记之映射类使用实例和Session会话介绍
2020-12-25 17:39:09前面介绍了如何将数据库实体表映射到Python类上,下面我们可以创建这个类的一个实例(Instance),我们还是以前一篇文章的User类为例,让我们创建User对象:复制代码 代码如下:>>> ed_user = User(‘ed’, ‘Ed Jones... -
Python爬虫 requests库使用session会话保存cookies继续请求
2018-09-09 15:25:28# 通过Session类新建一个会话 session = requests.Session() post_url = 'https://passport.weibo.cn/sso/login' # 往下使用requests的地方,直接使用session即可,session就会保存服务器发送过来的cookie信息 ... -
python框架web.py中session会话使用,设置session,取session
2020-12-08 14:44:33官方给的session例子这里就不讲了。下面直接将怎么设置session,取session:session相关代码一定要放在web.py框架的Main.py里面。# Main.py# 设置sessionimport webimport subsafe # 子程序urls = ("/safa", "Safe",... -
Python接口测试之requests中session会话对象
2021-01-28 18:27:10requests中session会话对象在企业级产品中的应用方案。登录一个系统,使用charles进行争包,见如下抓包获取的信息,见截图:在如上的截图中,我们首先需要登录,登录成功后,可以获取XX的信息,见login接口响应恢复... -
6.python接口自动化保持Session会话
2019-12-31 13:53:30import requests url = "https://www.xxx.com/login" s = requests.session() # 建立一个Session data = {"name": "admin", "password": "123456" } response = s.post(url, data=data) # session登录... -
Python TensorFlow,会话,Session,会话的run()方法,placeholder占位符,feed操作
2019-03-03 15:47:26TensorFlow分为前端系统(定义程序的图结构)和后端系统(运行图结构)。 会话的作用:1、运行图的结构 2、分配...demo.py(会话,Session): import tensorflow as tf import os os.environ['TF_CPP_MIN_LOG_LEVEL... -
【python】cookie和session实现状态保持(django中)
2021-05-20 20:00:14一、什么是状态保持?! 所谓的状态保持就是,服务端存储用户身份信息; 所谓的身份认证就是,...保持登录状态可以使用 cookie 或 session 来实现 但是 cookie 不安全, 所以我们使用 session 保存. django 中有提供 -
python利用session保持登录状态
2019-01-22 18:14:00在接口测试的过程中,经常会遇到有些接口需要在登录的状态下才能运行,否则会进行相应的提示,例如“请登录...2、使用requests的session会话对象 也就是requests的session会话对象来进行处理。会话对象让你能够跨... -
Python接口自动化-session会话关联cookie
2020-07-21 14:55:51目前全文是翻译的,讲的主要是 cookie 验证和 token 验证的区别,cookie 验证准确的说是利用 cookie 来作为媒介,存储 session ID 进行验证,token 其实也可以借助 cookie 来存储,不过下文中提到的 cookie 验证主要... -
python后台代码规范----登录会话(session)
2020-07-28 11:49:48Flask session 概念: 程序可以把数据存储在用户会话中,用户会话是-种私有存储,默认情况下,它会保存在客户端cookie中。Flask提供了session 对 象来操作用户会话。session 是基于cookie实现, 保存在服务端的键值... -
python 爬虫 1-1( requests.session()会话保持/模拟登录状态 )
2020-04-17 00:30:32在某些网站抓取,或者app抓取时,有的时强制登陆,有的是不登陆返回的数据就是假的或者说是不完整的数据,这时就需要用到保持会话的功能 1、requests.session简单例子 参考源:...