谢谢大家的支持,您的一键三连是 罡罡同学前进的最大动力!

一键三连 一键三连 一键三连 一键三连 一键三连 一键三连

可能大家对session已经比较熟悉了,也大概了解了session的机制和原理,但是我们在做爬虫时如何会运用到session呢,就是接下来要讲到的会话保持。

首先说一下,为什么要进行会话保持的操作?

requests库的session会话对象可以跨请求保持某些参数,说白了,就是比如你使用session成功的登录了某个网站,则在再次使用该session对象求求该网站的其他网页都会默认使用该session之前使用的cookie等参数

尤其是在保持登陆状态时运用的最多,在某些网站抓取,或者app抓取时,有的时强制登陆,有的是不登陆返回的数据就是假的或者说是不完整的数据,那我们不可能去做到每一次请求都要去登陆一下怎么办,就需要用到保持会话的功能了,我们可以只登陆一次,然后保持这种状态去做其他的或者更多的请求。

其次,我们该如何使用会话保持?举一个事例来说明一下:

#requests.session():维持会话,可以让我们在跨请求时保存某些参数import requests#实例化session
session = requests.session()#目标url
url = 'https://www.douban.com/accounts/login'form_data = {'source': 'index_nav','form_email': 'xxx','form_password': 'xxx','captcha-solution': 'stamp','captcha-id': 'b3dssX515MsmNaklBX8uh5Ab:en'
}#设置请求头
req_header = {'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
}#使用session发起请求
response = session.post(url,headers=req_header,data=form_data)if response.status_code == 200:#访问个人主页:url = 'https://www.douban.com/people/175417123/'response = session.get(url,headers = req_header)if response.status_code == 200:with open('douban3.html','w') as file:file.write(response.text)

接下来的一点就是,我们该如何在session中手动设置cookie?

import requests
import time
mycookie = { "PHPSESSID":"56v9clgo1kdfo3q5q8ck0aaaaa" }
x = requests.session()
requests.utils.add_dict_to_cookiejar(x.cookies,{"PHPSESSID":"07et4ol1g7ttb0bnjmbiqjhp43"})
x.get("http://127.0.0.1:80",cookies = mycookie)
time.sleep(5)
#请求以后抓包可以检验一下是不是添加成功
x.get("http://127.0.0.1:80")

这样,通过requests.utils.add_dict_to_cookiejar对session对象设置cookie,之后所有的请求都会自动加上我自定义的cookie内容。

也可以通过requests.utils.cookiejar_from_dict 先生成一个cookiejar对象,时候在赋值给session.cookies。貌似还可以使用session.cookies.set()或者update()。

另外说一点单独处理cookie字段,处理为字典格式

# 处理cookie内容为字典
cookie = "SINAGLOBAL=821034395211.0111.1522571861723; wb_cmtLike_1850586643=1; un=tyz950829@sina.com; wb_timefeed_1850586643=1; UOR=,,login.sina.com.cn; wvr=6; SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9WWsNeq71O_sXkkXNnXFHgOW5JpX5KMhUgL.Fo2RSK5f1hqcShe2dJLoI0qLxK-L12qLB-zLxKqL1hnL1K2LxK-LBo5L12qLxKqL1hML1KzLxKnL1K.LB-zLxK-L1K-LBKqt; YF-V5-G0=c99031715427fe982b79bf287ae448f6; ALF=1556795806; SSOLoginState=1525259808; SCF=AqTMLFzIuDI5ZEtJyAEXb31pv1hhUdGUCp2GoKYvOW0LQTInAItM-ENbxHRAnnRUIq_MR9afV8hMc7c-yVn2jI0.; SUB=_2A2537e5wDeRhGedG7lIU-CjKzz-IHXVUm1i4rDV8PUNbmtBeLVrskW9NUT1fPIUQGDKLrepaNzTEZxZHOstjoLOu; SUHB=0IIUWsCH8go6vb; _s_tentry=-; Apache=921830614666.5322.1525261512883; ULV=1525261512916:139:10:27:921830614666.5322.1525261512883:1525239937212; YF-Page-G0=b5853766541bcc934acef7f6116c26d1"
cookie_dict = {i.split("=")[0]: i.split("=")[1] for i in cookie.split("; ")}

在这里也谢谢https://www.jianshu.com/p/264955856e61简书

requests.session()会话保持相关推荐

  1. python的requests.session()_Python+requests之session保持会话

    session()方法 会话对象让你能够跨请求保持某些参数.它也会在同一个 Session 实例发出的所有请求之间保持 cookie,如果你向同一主机发送 多个求,底层的 TCP 连接将会被重用,从而 ...

  2. python requests session刷新_Python Requests Session set-cookie不生效的坑

    我们知道 Python Requests库 中的 Session 模块有连接池和会话管理的功能,比如请求一个登录接口后,会自动处理 response 中的 set-cookie,下次再请求时会自动把 ...

  3. python requests session post_requests.session()发送请求 和使用requests直接发送请求的区别...

    requests.session()发送请求 和使用requests直接发送请求的区别 一.Session 在requests里,session对象是一个非常常用的对象,这个对象代表一次用户会话:从客 ...

  4. python模拟登录详细教程_Python模拟登录requests.Session应用详解

    最近由于某些原因,需要用到Python模拟登录网站,但是以前对这块并不了解,而且目标网站的登录方法较为复杂, 所以一下卡在这里了,于是我决定从简单的模拟开始,逐渐深入地研究下这块. 注:本文仅为交流学 ...

  5. Django源码分析5:session会话中间件分析

    django源码分析 本文环境python3.5.2,django1.10.x系列 1.这次分析django框架中的会话中间件. 2.会话保持是目前框架都支持的一个功能,因为http是无状态协议,无法 ...

  6. 爬虫之利用requests.session进行状态保持

    requests模块中的Session类能够自动处理发送请求获取响应过程中产生的cookie,进而达到状态保持的目的. 1.1 requests.session的作用以及应用场景 requests.s ...

  7. python中requests.session的妙用

    在进行接口测试的时候,我们会调用多个接口发出多个请求,在这些请求中有时候需要保持一些共用的数据,例如cookies信息. 1.requests库的session对象能够帮我们跨请求保持某些参数,也会在 ...

  8. python中requests库的用途-python中requests.session的妙用

    在进行接口测试的时候,我们会调用多个接口发出多个请求,在这些请求中有时候需要保持一些共用的数据,例如cookies信息. 1.requests库的session对象能够帮我们跨请求保持某些参数,也会在 ...

  9. 跨域请求,关于后端session会话丢失的解决办法

    目前使用前后端分离的模式开发,后端提供跨域接口.前端jsonp调用,绑定数据,但是在该站点下有个人中心模块存在的情况下,服务端的session会话会被跨域请求覆盖改掉 大家都知道tomcat使用coo ...

最新文章

  1. 【错误记录】Visual Studio 中编译 NDK 报错 ( error : cannot use ‘throw‘ with exceptions disabled )
  2. 用Python对数学函数进行求值、求偏导
  3. 面试官问:能否模拟实现JS的call和apply方法
  4. LCD显示深究day01 mmap知识补充
  5. vue 父链和子组件索引_vuejs填坑-父子组件之间的访问
  6. html div英文自动换行,div 实现长英文字母自动换行CSS
  7. Mysql:语法:虚拟表DUAL
  8. Traefik-kubernetes 初试
  9. mysql后台数据库学习报告
  10. 惠普打印机墨盒更换教程_惠普打印机怎么换墨盒 一不小心就洒了一桌子墨水...
  11. mybatis逻辑删除
  12. python下划线怎么输入_Python中下划线的使用方法有哪些
  13. java redis使用卡死_注意!Redis使用不当可能导致应用卡死
  14. 看不到 虚拟打印机 adobe pdf printer
  15. 微信公众号 二维码场景统计 场景二维码
  16. Redis源码笔记四: skiplist
  17. 机器学习-降维算法(MDS算法)
  18. AcWing 1064 骑士
  19. 今天到下次生日中间隔的天数C++
  20. JAVA反序列化漏洞简单理解

热门文章

  1. 制作apt-get本地源解决无网络情况下安装软件
  2. 不管ACM是不是屠龙之技
  3. 电影无极下载地址(HTTP下载)
  4. HC-SR04超声波测距块讲解(附32单片机源码)
  5. 我们在讲的 Database Plus,到底能解决什么样的问题?
  6. 报表服务器虚拟目录,报表服务器虚拟目录
  7. 学习Web前端开发前景怎么样?
  8. 南邮考研811数据结构经验分享
  9. OpenCV2:imread 和 imwrite
  10. 直播系统---从数据层设计的角度看映客直播系统架构变化