02_python爬虫之post请求和session会话

一.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:

POSTGET 请求本质上都是一次性请求,因为每次请求都独立发起,并且在请求完成后,服务器不会记住请求的状态。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或者其他数据解析库来获取啦。
                                                                                                        
                                    

                                                                                                                                    
                                                                                                                                                                  

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值