使用python完成知乎模拟登陆

1、模拟登陆主要就是用POST方法给知乎服务器提交用户登陆相关的信息,POST的表头和表单的填写都可以通过抓取一个实际的登陆过程仿照,如下,按F12然后登陆后记录下其中一次浏览器向服务器提交的请求过程

2、需要填写表头,这个可以在谷歌浏览器里面打开F12,然后真实触发一次知乎登陆,把对应的表头模拟下来,如下
<span style="font-size:18px;"><span style="font-size:18px;">self.loginHeaders = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36',
    'Referer': 'https://www.zhihu.com',
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
}</span></span>



3、由于是登陆,所以需要提交表单,表单信息主要包括账号、密码以及_xsrf,主要_xsrf可以通过登陆跟踪获取
<span style="font-size:18px;"><span style="font-size:18px;">self.post = {
    'email': "",
    'password': "" ,
    'rememberme':"true",
    '_xsrf': "14a654d344b558f4bf5001ef6595ecd6"
}</span></span>


表单还需要编码一次,如下
<pre name="code" class="python">self.postData = bytes(urllib.parse.urlencode(self.post), 'utf-8')
 
4、将表头表单填入request消息中,会返回一个信息,代表登陆成功,如下veriCode获取
request = urllib.request.Request(self.siteURL, self.postData, self.loginHeaders)
response = self.opener.open(request)
veriCode= response.read().decode('gbk')

返回下面字符代表登陆成功
{"r":0,
 "msg": "\u767b\u9646\u6210\u529f"
}

遗留问题:
1、知乎登陆多次会要求输验证码,怎么解决?
2、如何保存一次cookie后续不用再登陆?
3、请求的网页的编码格式怎么转换成自己需要的编码格式?
已经找到现成的代码,研究代码背后的动机再解决自己的疑问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值