python 爬虫(三十七)之登陆

编程入门 行业动态 更新时间:2024-10-17 19:25:17

python <a href=https://www.elefans.com/category/jswz/34/1770264.html style=爬虫(三十七)之登陆"/>

python 爬虫(三十七)之登陆

1.1 目标站点网址

=%2F

知乎上所有的数据都是得登录之后才能获取的,所以我们首先得用爬虫模拟知乎的登录操作

1.2 站点分析

1.2.1 登录过程分析

首先我们访问登录页面的时候,服务器会给我们返回一系列的cookie

这些cookie我们需要保存下来

接着,咱点击密码登录会发现,如下的一个验证码的请求:

这个请求是用来询问服务器,我需不需要填写验证码,'show_captcha’为false,则不需要验证码,'show_captcha’为true,则需要验证码

经过多次测试,会发现,lang这个字段,控制的是验证码格式,en为英文验证码,cn为中文验证码(这个需要你点击哪些中文是倒置的).因为我们选择使用英文验证码

当’show_captcha’为true的时候,浏览器会继续像这个url发送请求,来获取验证码的图片内容

虽然是同一个url,只不过这次请求的请求方法变成了PUT,返回的内容为base64处理过的图片内容,这个我们只需要用python中base64这个库去解析就好了

当我输入验证码并提交的时候,浏览器会向这个url发送第三次请求,用来验证我的验证码是否输入正确

提交验证码的url依旧是这个url,不过这次请求方法为POST,请求体为{“input_text”:‘验证码内容’}

如果验证通过,'success’这个字段的值就为true

然后紧接着,浏览器就会向服务器提交我的用户名和密码.

这个时候,咱就懵逼了,因为请求体的数据全部是前端js加密过的密文

第一,我不知道请求体都需要哪些字段

第二,我就算知道都有哪些字段,不知道加密规则,也无法正常提交

所以,我们下面就需要找到请求体的加密算法

1.2.2 加密算法破解

正常情况下,网站程序员为了便于识别,对于加密算法,一般都会带有关键字"encrypt",所以,我们使用控制台上的搜索功能,来尝试定位到他们的js加密算法

这个结果让人心情愉悦,咱一共找到3个文件,共6个匹配.

每个匹配都点进去瞅一眼

最后,我们会找到下面这块代码,咱打个断点,然后重新点击登录,程序会被卡主

这个时候我们注意看上边e这个变量

"client_id=c3cef7c66a1843f8b3a9e6a1e3160e20&grant_type=password&timestamp=1566371889615&source=com.zhihu.web&signature=849409fe69f76b28a7ebfa95f0acc784d7c812bf&username=%2B8618896530856&password=dadasdasdas&captcha=nngt&lang=en&utm_source=&ref_source=other_https%3A%2F%2Fwww.zhihu%2Fsignin%3Fnext%3D%252F"

很明显了,我们找到了post请求的请求体数据,但是这是url编码的,有些字段看不懂呀,咋办?

python里调url解析库解个码就好了:

from urllib.parse import unquote_plusmsg = '''
client_id=c3cef7c66a1843f8b3a9e6a1e3160e20&grant_type=password&timestamp=1566371889615&source=com.zhihu.web&signature=849409fe69f76b28a7ebfa95f0acc784d7c812bf&username=%2B8618896530856&password=dadasdasdas&captcha=nngt&lang=en&utm_source=&ref_source=other_https%3A%2F%2Fwww.zhihu%2Fsignin%3Fnext%3D%252F
'''
print(unquote_plus(msg))

输出结果如下:

client_id=c3cef7c66a1843f8b3a9e6a1e3160e20&grant_type=password&timestamp=1566371889615&source=com.zhihu.web&signature=849409fe69f76b28a7ebfa95f0acc784d7c812bf&username=+8618896530856&password=dadasdasdas&captcha=nngt&lang=en&utm_source=&ref_source=other_=%2F

里面需要包含的字段如下:

client_id      用户id(固定值)
grant_type     验证方式(固定值)
timestamp      时间戳*1000,去尾
source		   (固定值)
signature	   签名(js加密,变动)
username	   用户名
password	   密码
captcha		   验证码
lang		   验证码方式(固定值)
utm_source	   (固定值)
ref_source	   (固定值)other_=%2F

这些字段都很好处理,但是让人老壳疼的地方又来了,这个signature是加密的,我们还得找出它的js加密算法

怎么找,很容易,咱搜索关键字"signature",在一堆匹配中会找到下面的匹配

ok,咱找着了,hamc的加密方式,sha-1的加密算法,咱用python的hmac,hashlib这两个包就能搞定

import hmac
from hashlib import sha1

咱接着说请求体的加密,刚刚我们找到了加密的地方,怎么处理呢,只要把它所在的js函数全部复制到python里,在python里调用node.js去执行就可以了,复制结果如下:

function t(e) {return (t = "function" == typeof Symbol && "symbol" == typeof Symbol.A ? function(e) {return typeof e}: function(e) {return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e})(e)}Object.defineProperty(exports, "__esModule", {value: !0});var A = "2.0", __g = {};function s() {}function i(e) {this.t = (2048 & e) >> 11,this.s = (1536 & e) >> 9,this.i = 511 & e,this.h = 511 & e}function h(e) {this.s = (3072 & e) >> 10,this.h = 1023 & e}function a(e) {this.a = (3072 & e) >> 10,this.c = (768 & e) >> 8,this.n = (192 & e) >> 6,this.t = 63 & e}function c(e) {this.s = e >> 10 & 3,this.i = 1023 & e}function n() {}function e(e) {this.a = (3072 & e) >> 10,this.c = (768 & e) >> 8,this.n = (192 & e) >> 6,this.t = 63 & e}function o(e) {this.h = (4095 & e) >> 2,this.t = 3 & e}function r(e) {this.s = e >> 10 & 3,this.i = e >> 2 & 255,this.t = 3 & e}s.prototype.e = function(e) {e.o = !1},i.prototype.e = function(e) {switch (this.t) {case 0:e.r[this.s] = this.i;break;case 1:e.r[this.s] = e.k[this.h]}},h.prototype.e = function(e) {e.k[this.h] = e.r[this.s]},a.prototype.e = function(e) {switch (this.t) {case 0:e.r[this.a] = e.r[this.c] + e.r[this.n];break;case 1:e.r[this.a] = e.r[this.c] - e.r[this.n];break;case 2:e.r[this.a] = e.r[this.c] * e.r[this.n];break;case 3:

更多推荐

python 爬虫(三十七)之登陆

本文发布于:2024-03-14 11:32:42,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1736372.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:爬虫   python   三十七

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!