爬虫 模拟登录 post请求 cookie session
模拟登录两种方式
1.利用登录之后的cookie(登录信息) 访问时带上cookie参数
携带cookie的方法
(1)最直接的,在headers参数里面添加cookie,然后在get请求时带上headers参数
-
headers_user = {
-
"User-Agent":"........"
-
"Cookie":"......."
-
}
-
response_user = requests.get(url,headers=headers_user)
(2)单独构造一个字典,用于存放cookie参数 (requests的get请求支持传入cookies参数)
-
cookies_user = {"cookie" = "............."}
-
response_user = requests.get(url,headers=...,params=...,cookies=cookies_user}
-
-
# 字典中作为键的是单数cookie
-
# 传参时定义参数的是cookies=。。。 是复数
如果是高版本python的话(3.8以上):
需要把字符串格式的cookie 转化成字典格式的键值对
-
cookies_str = "........." # 从浏览器里得到的字符串形式的cookie
-
cookies_dict = {i.split("=",1)[0]: i.split("=",1)[1] for i in cookies_str.split("; "))
-
response_user = requests.get(url, headers = ..., cookies = cookies_dict }
-
-
# 字典推导式 for 后面的这个split 分割是以“; ”(分号 空格) 否则还需要用去空格的函数再转化一次
-
# for i in cookies_str.split("; ") 得到的是分割后的字符串,以XXXXXX=..........形式存在
-
# 再以“=”分割一次,前面XXXX对应的就是字典的键key,后面的.......里面可能还有更多的“=”符号,
-
# 所以只分割一次,将.......整体作为字典的值value
2. 利用post请求完成模拟登录,得到登录后的页面
1.post请求的url 跟get请求时 是不一样的
登录界面,输入错误的用户名或者密码,然后开始抓包
点击登录,在network里面 的 headers里面 一个看到一个post请求的URL
2.模拟登录 需要 用户名 密码(这是最基本的 ,有可能还需要更多)
在浏览器 network-headers右边 有个Payload 这里可以看到form data
form data右边有个view URL_encoded 这里有标准的键值对参数(对应修改正确的用户名和密码,其他登录错误和正确都不变的键值对直接复制过来就行)
按照form data的格式 建立一个字典(比如字典名为form_data)
字典的key和value都要加双引号
requests.post(url,headers=....,data=form_data)
通过post函数的data参数传参
存在不足:
通过登录后的cookie发送get请求:cookie有有效期,过期就不能用了
post请求模拟登录,如果要访问登陆后的多个页面,那么需要每次都post请求,一是比较麻烦,二是频繁登录容易被判定为非正常的用户行为从而被封禁账号
解决办法:
利用post请求发送
得到登录后的cookie
将这个得到的新的cookie作为参数再去发送get请求不同的url
这样只发送一次post请求相当于登录一次,登录之后一直使用get请求
-
url_login = "登录网址"
-
form_data = {.........}
-
-
session_user = requests.session()
-
-
session_user.post(url_login,headers=......,data=form_data)
-
# 这里可以不用定义变量来接收对象,因为目的只是为了让session_user这个对象携带登录后的cookie就行了
-
-
url_user = "登录之后需要访问的页面"
-
-
response_user = session_user.get(url_user,headers=.....)
-
# session_user 调用过post请求函数后就已经自带了登录后的cookie
-
# 此时再调用session_user对象的get请求,就能得到登录后需要访问的页面
-
-
str_data = response_user.content.decode("utf-8")
-
-
-
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhhacchi
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13