一.Post请求的理解:
POST请求是HTTP协议中的一种请求方法,用于向服务器提交数据.有时我们需要在网页上执行登录输入密码账号操作,提交表单数据,上传文件时,这时候就可以使用post请求。
与get请求的区别:与POST请求不同,GET请求将数据以查询字符串的形式附加在URL后面,而不是封装在请求体中,post请求放在request body中传递,也就是传递参数不同。
post请求的应用:
Post请求在百度翻译的一个小应用:
import requests
hehe={"kw": input("请输入你需要翻译的英文:")}#输入自己想要查询的单词
resp=requests.post('https://fanyi.baidu.com/sug',data=hehe)
print(resp.json())#得到的是json数据
# requests.post(url,data,json,)
# url:网址
# data:data 参数用来传递 post 请求需要提交的数据,这个参数可以是字典、元组列表、bytes 或文件类字典等类型数据
# json:如果我们需要向服务器提交 json 类型的数据,那么就需要使用 json 参数。
如何找到data参数,按FN+F12打开浏览器工具,然后点击 '网络' 找到对应的位置,点击'负载' 即可
二.session会话:
1.为什么用session:
POST
和 GET
请求本质上都是一次性请求,因为每次请求都独立发起,并且在请求完成后,服务器不会记住请求的状态。POST
用于提交数据,而 GET
用于获取数据。每个请求都是独立的,服务器处理完请求后不会保留任何关于该请求的持久信息。比如当我们想要获取某小说网站上自己账号书架上的书籍时,如果你用get或post请求,获取不到书籍名单,只有当你登录了自己的账号时,才能获取书籍名单。而在登录的过程中,session类能够自动处理发送请求获取响应过程中产生的cookie,进而达到状态保持的目的,下一次再使用session请求对方服务器的时候,会带上前一次的cookie。提高了信息的传递.
2.requests.session的作用:
自动处理cookie,即 下一次请求会带上前一次的
3.cookierequests.session的应用场景:
自动处理连续的多次请求过程中产生的cookie,在账号登录上常用到
4.案例:
目标:我们需要获取书架上的书籍名单,网站地址:https://passport.17k.com/
我们按住fn+f12打开开发者工具,跳转到如下的页面,先获取到登录页面的url:
如下图:然后再获取post的参数:data,即需要提交的表单数据,用来登录自己的账号。
将'负载'的'表单数据'复制添加到post的参数:data。
以下代码是成功登录到这个网站:
import requests
#1登录,找到登录的url,得到cookie
#2带着cookie去请求到书架的url>>书架的内容
#上述的两个操作必须连起来
#我们可以使用session进行请求>session你可以认为是一连串的请求,在这个过程中的cookie不会丢失
#resp=requests.get()#一次请求
# 获取会话
session=requests.session()
#提交登录信息
data={"loginName": "填写自己的账号",
"password": "自己的密码"}
#处理一个反扒
headers={"User-Agent":
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36 Edg/123.0.0.0"}
url='https://passport.17k.com/ck/user/login'#登录页的url,在开发者工具模式下寻找url
resp=session.post(url,data=data)#在这里会保留cookie信息
print(resp.text)
print(resp.cookies)
这时候成功登录到17k小说网站上 。
最后获取书架上的书籍名单:
因为书架上名单不在页面源代码上,所以打开开发者工具找到书籍的url,然后使用session再次发送请求,因为session含有上次发送请求携带的信息:
import requests
#1登录,找到登录的url,得到cookie
#2带着cookie去请求到书架的url>>书架的内容
#上述的两个操作必须连起来
#我们可以使用session进行请求>session你可以认为是一连串的请求,在这个过程中的cookie不会丢失
#resp=requests.get()#一次请求
# 会话
session=requests.session()
data={"loginName": "填写自己的账号",
"password": "填写自己的账号密码"}
#处理一个反扒
headers={"User-Agent":
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36 Edg/123.0.0.0"}
url='https://passport.17k.com/ck/user/login'#这个url在开发者工具模式中寻找
resp=session.post(url,data=data)
# print(resp.text)
# print(resp.cookies)
# 拿到书架上的书
# 再次发送请求,请求到书架上的书籍网页上,并且携带了上次发送请求的cookie信息
#打开书架页面的源代码,发现书籍名单不在页面源代码上,所以是通过异步加载来加载数据,
#然后打开开发者工具,找到对应的url,再获取数据
resp=session.get('https://user.17k.com/ck/author2/shelf?page=1&appKey=2406394919')
print(resp.text)
通过这段代码可以看到自己书架上的名单,然后就可以通过xpath或者其他数据解析库来获取啦。