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--完结撒花.mdphp