session及其用法

所谓的会话,你可以理解成我们用浏览器上网,到关闭浏览器的这一过程。

session是会话过程中,服务器用来记录特定用户会话的信息。

比如你打开浏览器逛购物网页的整个过程中,浏览了哪些商品,在购物车里放了多少件物品,

这些记录都会被服务器保存在session中。

如果没有session,可能会出现这样搞笑的情况:

你加购了很多商品在购物车,打算结算时,发现购物车空无一物Σ(っ°Д°;)っ,

因为服务器根本没有帮你记录你想买的商品。

session和cookies的关系还非常密切

cookies中存储着session的编码信息,session中又存储了cookies的信息

浏览器第一次访问购物网页时,服务器返回set cookies的字段给浏览器,浏览器把cookies保存到本地

等浏览器第二次访问这个购物网页时,就会带着cookies去请求,

cookies里带有会话的编码信息,服务器立马就能辨认出用户,同时返回和这个用户相关的session。

这也是为什么你每次重新登录购物网站后,你之前在购物车放入的商品并不会消失的原因。

因为你在登录时,服务器可以通过浏览器携带的cookies,找到保存了你购物车信息的session。

import requests
#引用requests。
session = requests.session()
#用requests.session()创建session对象,相当于创建了一个特定的会话,帮我们自动保持了cookies。
url = 'https://wordpress-edu-3autumn.localprod.forc.work/wp-login.php'
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
}
data = {'log':input('请输入账号:'), #用input函数填写账号和密码,这样代码更优雅,而不是直接把账号密码填上去。'pwd':input('请输入密码:'),'wp-submit':'登录','redirect_to':'https://wordpress-edu-3autumn.localprod.forc.work/wp-admin/','testcookie':'1'
}
session.post(url,headers=headers,data=data)
#在创建的session下用post发起登录请求,放入参数:请求登录的网址、请求头和登录参数。
url_1 = 'https://wordpress-edu-3autumn.localprod.forc.work/wp-comments-post.php'
#把我们想要评论的文章网址赋值给url_1。
data_1 = {
'comment': input('请输入你想要发表的评论:'),
'submit': '发表评论',
'comment_post_ID': '13',
'comment_parent': '0'
}
#把有关评论的参数封装成字典。
comment = session.post(url_1,headers=headers,data=data_1)
#在创建的session下用post发起评论请求,放入参数:文章网址,请求头和评论参数,并赋值给comment。
print(comment)
#打印comment
复制代码

使用requests.session(), 你就不用在考虑cookies的问题了

存储cookies

import requests
session = requests.session()
url = 'https://wordpress-edu-3autumn.localprod.forc.work/wp-login.php'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
}
data = {'log': input('请输入账号:'),'pwd': input('请输入密码:'),'wp-submit': '登录','redirect_to': 'https://wordpress-edu-3autumn.localprod.forc.work/wp-admin/','testcookie': '1'
}
session.post(url, headers=headers, data=data)
print(type(session.cookies))
# 打印cookies的类型,session.cookies就是登录的cookies
print(session.cookies)
# 打印cookies
复制代码

把cookies保存成txt文件的代码

import requests
import json
# 引入requests和json模块。
session = requests.session()
url = ' https://wordpress-edu-3autumn.localprod.forc.work/wp-login.php'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
}
data = {'log': input('请输入你的账号:'),'pwd': input('请输入你的密码:'),'wp-submit': '登录','redirect_to': 'https://wordpress-edu-3autumn.localprod.forc.work/wp-admin/','testcookie': '1'
}
session.post(url, headers=headers, data=data)
cookies_dict = requests.utils.dict_from_cookiejar(session.cookies)
# 把cookies转化成字典。
print(cookies_dict)
# 打印cookies_dict
cookies_str = json.dumps(cookies_dict)
# 调用json模块的dumps函数,把cookies从字典再转成字符串。
print(cookies_str)
# 打印cookies_str
f = open('cookies.txt', 'w')
# 创建名为cookies.txt的文件,以写入模式写入内容。
f.write(cookies_str)
# 把已经转成字符串的cookies写入文件。
f.close()
# 关闭文件。
复制代码

读取cookies

字符串==>字典==>cookies

cookies_txt = open('cookies.txt', 'r')
#以reader读取模式,打开名为cookies.txt的文件。
cookies_dict = json.loads(cookies_txt.read())
#调用json模块的loads函数,把字符串转成字典。
cookies = requests.utils.cookiejar_from_dict(cookies_dict)
#把转成字典的cookies再转成cookies本来的格式。
session.cookies = cookies
#获取cookies:就是调用requests对象(session)的cookies属性。
复制代码

完整版代码

import requests
import json
session = requests.session()
# 创建会话。
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'
}
# 添加请求头,避免被反爬虫。
try:# 如果能读取到cookies文件,执行以下代码,跳过except的代码,不用登录就能发表评论。cookies_txt = open('cookies.txt', 'r')# 以reader读取模式,打开名为cookies.txt的文件。cookies_dict = json.loads(cookies_txt.read())# 调用json模块的loads函数,把字符串转成字典。cookies = requests.utils.cookiejar_from_dict(cookies_dict)# 把转成字典的cookies再转成cookies本来的格式。session.cookies = cookies# 获取cookies:就是调用requests对象(session)的cookies属性。
except FileNotFoundError:# 如果读取不到cookies文件,程序报“FileNotFoundError”(找不到文件)的错,则执行以下代码,重新登录获取cookies,再评论。url = ' https://wordpress-edu-3autumn.localprod.forc.work/wp-login.php'# 登录的网址。data = {'log': input('请输入你的账号:'),'pwd': input('请输入你的密码:'),'wp-submit': '登录','redirect_to': 'https://wordpress-edu-3autumn.localprod.forc.work/wp-admin/','testcookie': '1'}# 登录的参数。session.post(url, headers=headers, data=data)# 在会话下,用post发起登录请求。cookies_dict = requests.utils.dict_from_cookiejar(session.cookies)# 把cookies转化成字典。cookies_str = json.dumps(cookies_dict)# 调用json模块的dump函数,把cookies从字典再转成字符串。f = open('cookies.txt', 'w')# 创建名为cookies.txt的文件,以写入模式写入内容f.write(cookies_str)# 把已经转成字符串的cookies写入文件f.close()# 关闭文件
url_1 = 'https://wordpress-edu-3autumn.localprod.forc.work/wp-comments-post.php'
# 文章的网址。
data_1 = {'comment': input('请输入你想评论的内容:'),'submit': '发表评论','comment_post_ID': '13','comment_parent': '0'
}
# 评论的参数。
comment = session.post(url_1, headers=headers, data=data_1)
# 在创建的session下用post发起评论请求,放入参数:文章网址,请求头和评论参数,并赋值给comment。
print(comment.status_code)
# 打印comment的状态码
复制代码

加上cookies过期判断, 封装成函数

import requests
import json
session = requests.session()
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'
}
def cookies_read():'''cookies读取'''cookies_txt = open('cookies.txt', 'r')cookies_dict = json.loads(cookies_txt.read())cookies = requests.utils.cookiejar_from_dict(cookies_dict)return (cookies)
def save_cookies():'''cookies存储。'''url = ' https://wordpress-edu-3autumn.localprod.forc.work/wp-login.php'data = {'log': input('请输入你的账号'),'pwd': input('请输入你的密码'),'wp-submit': '登录','redirect_to': 'https://wordpress-edu-3autumn.localprod.forc.work/wp-admin/','testcookie': '1'}session.post(url, headers=headers, data=data)cookies_dict = requests.utils.dict_from_cookiejar(session.cookies)cookies_str = json.dumps(cookies_dict)f = open('cookies.txt', 'w')f.write(cookies_str)f.close()def publish_comment():'''发表评论'''url_2 = 'https://wordpress-edu-3autumn.localprod.forc.work/wp-comments-post.php'data_2 = {'comment': input('请输入你要发表的评论:'),'submit': '发表评论','comment_post_ID': '13','comment_parent': '0'}return (session.post(url_2, headers=headers, data=data_2))
try:session.cookies = cookies_read()
except FileNotFoundError:save_cookies()session.cookies = cookies_read()
num = publish_comment()
# 判断cookies是否过期, 返回200说明没有过期
if num.status_code == 200:print('成功啦!')
else:save_cookies()session.cookies = cookies_read()num = publish_comment()
复制代码

快速跳转:

猫哥教你写爬虫 000--开篇.md
猫哥教你写爬虫 001--print()函数和变量.md
猫哥教你写爬虫 002--作业-打印皮卡丘.md
猫哥教你写爬虫 003--数据类型转换.md
猫哥教你写爬虫 004--数据类型转换-小练习.md
猫哥教你写爬虫 005--数据类型转换-小作业.md
猫哥教你写爬虫 006--条件判断和条件嵌套.md
猫哥教你写爬虫 007--条件判断和条件嵌套-小作业.md
猫哥教你写爬虫 008--input()函数.md
猫哥教你写爬虫 009--input()函数-人工智能小爱同学.md
猫哥教你写爬虫 010--列表,字典,循环.md
猫哥教你写爬虫 011--列表,字典,循环-小作业.md
猫哥教你写爬虫 012--布尔值和四种语句.md
猫哥教你写爬虫 013--布尔值和四种语句-小作业.md
猫哥教你写爬虫 014--pk小游戏.md
猫哥教你写爬虫 015--pk小游戏(全新改版).md
猫哥教你写爬虫 016--函数.md
猫哥教你写爬虫 017--函数-小作业.md
猫哥教你写爬虫 018--debug.md
猫哥教你写爬虫 019--debug-作业.md
猫哥教你写爬虫 020--类与对象(上).md
猫哥教你写爬虫 021--类与对象(上)-作业.md
猫哥教你写爬虫 022--类与对象(下).md
猫哥教你写爬虫 023--类与对象(下)-作业.md
猫哥教你写爬虫 024--编码&&解码.md
猫哥教你写爬虫 025--编码&&解码-小作业.md
猫哥教你写爬虫 026--模块.md
猫哥教你写爬虫 027--模块介绍.md
猫哥教你写爬虫 028--模块介绍-小作业-广告牌.md
猫哥教你写爬虫 029--爬虫初探-requests.md
猫哥教你写爬虫 030--爬虫初探-requests-作业.md
猫哥教你写爬虫 031--爬虫基础-html.md
猫哥教你写爬虫 032--爬虫初体验-BeautifulSoup.md
猫哥教你写爬虫 033--爬虫初体验-BeautifulSoup-作业.md
猫哥教你写爬虫 034--爬虫-BeautifulSoup实践.md
猫哥教你写爬虫 035--爬虫-BeautifulSoup实践-作业-电影top250.md
猫哥教你写爬虫 036--爬虫-BeautifulSoup实践-作业-电影top250-作业解析.md
猫哥教你写爬虫 037--爬虫-宝宝要听歌.md
猫哥教你写爬虫 038--带参数请求.md
猫哥教你写爬虫 039--存储数据.md
猫哥教你写爬虫 040--存储数据-作业.md
猫哥教你写爬虫 041--模拟登录-cookie.md
猫哥教你写爬虫 042--session的用法.md
猫哥教你写爬虫 043--模拟浏览器.md
猫哥教你写爬虫 044--模拟浏览器-作业.md
猫哥教你写爬虫 045--协程.md
猫哥教你写爬虫 046--协程-实践-吃什么不会胖.md
猫哥教你写爬虫 047--scrapy框架.md
猫哥教你写爬虫 048--爬虫和反爬虫.md
猫哥教你写爬虫 049--完结撒花.md

转载于:https://juejin.im/post/5cfc4add6fb9a07eae2a507d

猫哥教你写爬虫 042--session的用法相关推荐

  1. 猫哥教你写爬虫 046--协程-实践-吃什么不会胖

    吃什么不会胖? 低热量食物 食物的数量有千千万,如果我们要爬取食物热量的话,这个数据量必然很大. 使用多协程来爬取大量的数据是非常合理且明智的选择 如果我们要爬取的话,那就得选定一个有存储食物热量信息 ...

  2. 猫哥教你写爬虫 006--条件判断和条件嵌套

    流程控制 复仇者联盟3-无限战争(搜集宝石) python里面, 不需要使用;来结尾, 因为python是使用换行来结束一行代码的 if判断, 没有{}, python使用缩进来表示层级关系 if.. ...

  3. 猫哥教你写爬虫 002--作业-打印皮卡丘

    作业 请你使用print()函数将下面的皮卡丘打印出来, 使用三种方式 へ /|/\7 ∠_// │ / /│ Z _,< / /`ヽ│ ヽ / 〉Y ` / /イ● 、 ● ⊂⊃〈 /() へ ...

  4. 猫哥教你写爬虫 005--数据类型转换-小作业

    小作业 程序员的一人饮酒醉 请运用所给变量,使用**str()**函数打印两句话. 第一句话:1人我编程累, 碎掉的节操满地堆 第二句话:2眼是bug相随, 我只求今日能早归 number1 = 1 ...

  5. 猫哥教你写爬虫 004--数据类型转换-小练习

    小练习, 改一下代码 word = '3.8' number = 1 sentence = '人工智障说:3.8+1等于' print(sentence+str(int(float(word)+num ...

  6. 猫哥教你写爬虫 037--爬虫-宝宝要听歌

    戴上耳机, 这个世界与我无关... 让我们用音乐洗涤心灵吧... 我们从哪个网站爬取资源呢? 专治各种不服... 打开酷狗官网, 可以看到搜索框,我们要爬取的数据就是搜索歌曲后, 酷狗后台返回的歌曲列 ...

  7. 猫哥教你写爬虫 027--模块介绍

    time模块 import time # 时间对象转美式时间字符串 print(time.asctime()) # Wed May 29 09:25:07 2019 print(time.asctim ...

  8. 猫哥教你写爬虫 000--开篇

    写在前面 快速跳转: 猫哥教你写爬虫 000--开篇.md 猫哥教你写爬虫 001--print()函数和变量.md 猫哥教你写爬虫 002--作业-打印皮卡丘.md 猫哥教你写爬虫 003--数据类 ...

  9. OpenGL.Shader:志哥教你写一个滤镜直播客户端:仿3个抖音滤镜效果(4镜像/电击/灵魂出窍)

    OpenGL.Shader:志哥教你写一个滤镜直播客户端(可能是结束篇) OpenGL.Shader基本的图像处理知识已经学习的7788了,所以这篇应该是滤镜直播客户端的最后一篇了,之后会出基于FFm ...

  10. OpenGL.Shader:志哥教你写一个滤镜直播客户端(5)视觉滤镜:对比度、曝光、马赛克

    OpenGL.Shader:志哥教你写一个滤镜直播客户端(5) 上一章介绍了如何在渲染nv21流的时候进行滤镜的无缝切换,这章内容紧接上一章,介绍三种滤镜特效:对比度.曝光.马赛克,并介绍如何动态调节 ...

最新文章

  1. Windows 8部署系列PART6:准备模板计算机配置
  2. docker安装elasticsearch和kibana
  3. vue调用接口获取后台数据_Vuex 存储||获取后台接口数据
  4. 未启用当前数据库的 SQL Server Service Broker
  5. android广告平台的介绍
  6. shell grep sed awk 练习
  7. No authorization to log on as a Trusted System
  8. oracledatabase11gr2怎么打开_win10 安装oracle 11gR2_database(内附下载地址)
  9. init进程(即进程1,或者说linuxrc)的详解
  10. python定义私有变量的方法_Python中私有属性的定义方式
  11. 读《学术研究,你的成功之道》读书笔记分享给各位
  12. webpack-dev-server启动后, localhost:8080返回index.html的原理
  13. 银行核心系统是什么?
  14. 1950 - Computing Machinery and Intelligence(计算机器与智能,又译作:机器能思考么?)
  15. Bitmap、BitSet、RoaringBitmap持久化存储
  16. Java环境下运行fastqc_质控软件fastQC的安装及用法
  17. python四叶玫瑰数,任意位数自幂数寻找|Python练习系列[4]
  18. 2017年六级翻译:宋朝和唐朝
  19. Spark综合练习——电影评分数据分析
  20. 在Win10|Win11中安装ArcGIS10.2时遇到缺少.NET Framework 3.5问题的解决办法

热门文章

  1. 钉钉打卡作弊软件非法获利近 500 万元,CEO 被判刑 5 年 6 个月
  2. 华为交换机初始化_我想问华为 s5700交换机 1。请问怎么恢复出厂设置? 2。如果没有密码又怎么恢复出厂设置? 谢谢了...
  3. dma子系统 dmac
  4. java实训报告总结
  5. 计算机网络运行管理,计算机网络管理规定
  6. 十五、Spring cloud 消息总线(Bus)
  7. C# winfrom 在button按钮上显示箭头
  8. TKinter —— GUI in python  4. Handing User Event 小组件 赋功能 (概念 必看!)
  9. 数字图像处理Python语言实现-图像增强-导向滤波(Guided Filter)
  10. ajax中返回sucess里使用this.$message()