Python爬虫高级之JS渗透登录新浪微博 | 知了独家研究

或许小伙伴们瞅见标题会寻思, 我可不可以径直自行登录, 将登录之后的内容复制下来添加到自定义的请求头里头, 这难道不香吗, 为何非得运用模拟登录这个过程呢? 要是我们进行长期的数据爬取, 就仿若每日早晨、中午以及晚上定时去爬取新浪, 那么, 此种方法对咱们而言兴许会极其不便, 缘由在于我们始终都在反复开展登录、复制的劳作, 这对咱们程序员乃至普通民众来讲均是颇为不友好的。

所以,今天我给大家带来用模拟登录新浪微博的过程。

python模拟登录新浪微博_Python网络抓包_JS渗透爬虫

一、JS渗透爬虫准备工作

在介绍代码之前,我先说一下代码中用到的库。

1.rsa(是一个非对称加密算法,需要pip安装一下)

2.(可以说,只要有爬虫的地方大多数都有它)

3.(加密算法)内置的

4.time(时间模块)

5.json(处理字符串的)

6.这个可以处理 16 进制数, 能将前面那种多余的显示十六进制信息的符号给去掉。

1.工具介绍

然后, 我们会用到抓包工具, 4。这款工具, 对于爬虫而言, 尤其在涉及高级以及js渗透的情况下, 没有它是绝对不行的。源于在此我们还涉及js渗透, 所以通常推选使用的浏览器是谷歌浏览器, 我们选用的例子具体也是运用谷歌浏览器达成的。此刻, 我务必要先介绍一下js渗透的基本思想与方法的相关情况。Js渗透, 顾名思义, 是借助js代码, 进而剖析出网页里的参数究竟是经由何种由来, 进而效仿关键参数构建的进程, 进而能够自行构建数据包, 达成我们期望实现的目标 那究竟依照怎样的方式完成渗透呢 我们首先来知悉一下我们所运用的工具。

2.谷歌浏览器

python模拟登录新浪微博_Python网络抓包_JS渗透爬虫

首先, 我们来看, 第一个, 由两个箭头所指向的地方, 在元素这一栏目里面, 右边的位置, 存在一个事件。也就是如此, 当我们进行点击这个栏目的操作之后, 我们能够看到click这个字段。我们去点击它, 此时会看到出现了几个栏目。而这个, 就是我们触发调试的关键所在。在click这个情况当中, 只要我们的鼠标轻点一次, 这么做就相当于触发了一个焦点。每一次触发一个焦点, 就会致使触发调试。当然啦, 这是需要我们去打断点的。至于究竟要怎么去打断点, 我会在下面就此讲到句号。在那种会触发的焦点里头, 我们所需要的是登录此按钮的那个触发点, 也就是click动作, 鉴于这个是极其关键的, 就如同图中呈现的那样。

JS渗透爬虫_python模拟登录新浪微博_Python网络抓包

为了唤出那我们所需的点击事件, 我们还得以如下显示着模样之小鼠标取用呈现, 点一下那相应的它, 而后还需点击那位居上边所述的登录类按钮, 如此这般之后, 于其click当中就可为能够跳出那我们妄图的触发类事件, 情况犹如所附图示这般:

Python网络抓包_python模拟登录新浪微博_JS渗透爬虫

这个模块, 它极为有意思, 是我们窥视js内部代码的关键要点, 等会儿我们就会进行演示, 此模块用于查看js代码, 在此处我们点击, 而后瞧瞧右边的栏目。

Python网络抓包_python模拟登录新浪微博_JS渗透爬虫

箭头按照从右到左的顺序依次是, 用于调试的暂停操作, 下一步的调试步骤, 进入到该行代码所属函数之中的操作, 以及跳出函数后继续执行的操作。这是我们在调试过程里的又一个关键的模块。我们能够发觉, 上面所展示图片里的js代码完全不是给人看的那般。当然了, 这并没有什么要紧的。我们可以留意到, 图片的左下角存在一个{}, 点击这个{}, 就能够让代码呈现出可供人阅读的样子。

这是那种自身携带的抓包模块, 是在这个里面噢, 我们能够抓到每一个请求的http包。还有这样一个状况, 其使用方法呈现出来就是像图这样的:

python模拟登录新浪微博_Python网络抓包_JS渗透爬虫

位于左边位置的箭头的作用是停止抓包, 处于右边方位的箭头的功能是清除已经抓到的包。点击图示之中的该部分, 能够进入到这个包所对应的js模块里边, 而这个模块同样也是后续我们重点会使用到的。

3.

我最后再次介绍此软件, 该软件于网上能够下载, 且是免费的。它属于一款在osi七层模型内抓取应用层之上http协议的软件, 其于爬虫里的地位颇高, 同样至关重要。

Python网络抓包_JS渗透爬虫_python模拟登录新浪微博

能看到, 上面是协议包, 那个表示正在抓取, 当能抓取到想要的数据包时, 再点击它, 把抓包停止。

JS渗透爬虫_python模拟登录新浪微博_Python网络抓包

这便是我们要看参数之处, 极为关键, 因我们的参数是从此处观察所得。若文本显示不了, 就点击黄色那一栏, 如此便能转码。当然, 我们还得善于借助查找关键字来确定参数所在位置。大家务必留意, 全局搜索用处极大, 平常大家的搜索技能在爬虫中能更充分发挥作用。

二、微博实战1.抓包应用

现在让我们看看到底怎么样实现微博登录的吧。

第一大步, 我们去开启以新浪命名的网站, 该网站所拥有的url是/紧接着, 我们着手开启这个用于抓包的工具, 要明确,我们提前输入账号以及无误的密码, 再点击进行登录, 之后要使得登录后的页面呈现出来之后, 我们停下抓包的操作, 此时, 我们能够看到如下这般的数据包: 当然咯, 最开始运用的时候极有可能出现读者抓不到包的状况, 而这个也是具备解决办法的: 我们点击位于左上角的Tools, 接着点击其内部的选项, 在弹出的框体当中, 点击HTTPS, 随后点击, 点击弹出的首个选项, 接着按一下yes, 稍后始终保持同意的状态就可以了,继而我们便能够实现抓包了。

Python网络抓包_JS渗透爬虫_python模拟登录新浪微博

我们察觉到, 于数据包之中存在一个带有login的url, 此点我判定理应是一项登录请求。那么是否意味着, 只要对这个包含参数组成部分进行构造, 就能够开展模拟登录之行径了呢?

现在,我们来看一下这个包里面具体的数据:

JS渗透爬虫_python模拟登录新浪微博_Python网络抓包

于这个数据包里头, 我们能够瞧见存在许许多多的参数, 然而参数这方面, 我们皆称是划分成固定的参数以及动态的参数的, 对于固定的参数而言, 我们仅仅需要实施复制黏贴这一行为便可, 可是, 动态参数是需要我们去进行模拟的, 所以, 我们需要于这些参数之中, 寻觅到动态的参数。寻觅的方法即为多次发送请求去用错误的密码以及正确的密码来尝试,接着对比这几次抓取到的同一个包。这里该项步骤我们交由读者自行去做验证留下, 现下在轮到我的时候, 来说着结论, 我发觉, nonce, sp, rsakv, 这几个参数是处于变化状态的, 其他参数则固定着。那么, 在这之后, 我们所要做的事情也就是对这些参数予以模拟, 弄明白它们究竟是怎么从哪里来获取来的。首先呢, 我们借助查找功能, 去查找nonce的出处所在地方, 就如同下面这样呈现着:

这个软件会将关键字出现的地方标黄。

我们点击这个包,发现在它的数据体里面出现了nonce:

Python网络抓包_python模拟登录新浪微博_JS渗透爬虫

以及rsakv也在这个当中出现了。于此情形下, 我们能够得出结论, 是不是只要构建这一内部所包含的参数, 我们便能够取得这两个动态参数呢? 经由实际操作验证, 证明这个结论确实准确无误了。

2.代码构造参数,抓取第一部分的关键信息

接下来就是代码的实现:

Python网络抓包_python模拟登录新浪微博_JS渗透爬虫

既已明确其处于此包内, 那么随后, 我们必然要着手js渗透行为。

我们得先去刷新一下新浪的界面, 接着要把里面的数据包全都清除掉, 之后点击账号的输入框, 输入自身的账号, 随后在用鼠标点击密码框后, 我们察觉到, 在上面就跳出了我们所想要的包。

接下来, 我们需要点击当中, 与之相对应的那个链接, 进入代码里, 随后再依照左下角的大括号来整理代码样式。当进入到代码之后, 我们按下Ctrl+F, 在弹出的搜索框中输入su接着回车, 我们便能迅速发觉su的加密方式:

Python网络抓包_JS渗透爬虫_python模拟登录新浪微博

也就是执行加密操作。鉴于此, 我们进而纳入了这个模块, 着手构建su参数, 其实际情况在代码里得以显现。紧接着, 我们所要开展的便是对这个页面发起请求, 借此来获取其中所包含的文本 , 原因在于, 我们所需获取的是其中除sp之外的动态相关参数。对页面发起请求后, 我们打印显示r.text, 所获取到的相应数据呈现出这样的状况:

JS渗透爬虫_python模拟登录新浪微博_Python网络抓包

能被我们发觉, 上面诸多的参数之中, 存在着不少是我们切实所需的, 而这便表明, 我们的渗透首个阶段已然成功了。

三、关键参数sp

能够发觉的是, 皆已在其中了。此刻, 仅运用正则, 去匹配大括号且以及大括号里的物件, 接着借由将其用json使其再度加载(loads), 文本便能够如同字典那般展开操作了。随后, 所要做的便是去思索究竟该如何去破解sp此参数呈现所得来源了。

下面,就到了之前介绍的环节了。

首先, 去往里头的Event那儿, 执行点击行为, 接着再点进入js页面, 情况如图所示:

Python网络抓包_python模拟登录新浪微博_JS渗透爬虫

点点这个链接, 这样便可进到js代码里头。接着, 又在js里摁下Ctrl+f键入rsa,怎么不输入sp? 缘由是要是输入sp, 好多并非咱们所需的东西也会掺和进来, 会致使搜索的繁杂程度变得愈发大。然而, rsa是一种非对称加密算法, 在先前的里头咱们能够找到这个字段, 从这里咱们能够判定出来, sp跟rsa加密算法联系紧密, 进而通过搜索rsa去找出sp的具体实现位置标点符号。

当进入js以后, 我们瞧察到于2825行之处存在着一个蓝色的箭头, 要是不存在, 即为要点击2825这个数字, 便能出现, 这即是我们所谓的断点。在断点设定完毕之后, 我们得将鼠标挪动到登录框那儿, 于框的范围之内点击一回, 这称作触发一次事件, 如此便可进入断点调试模式。

之前咱们已经于搜索栏当中打入了rsa, 所以, 在尚未匹配到rsa以前, 我们得持续不断地按下一步, 在此过程中会跳过多数js文件, 这是正常情形, 我们只需留意我们所需要的js代码就行。

当我们成功匹配到rsa之时, 那就表明, sp必定也蕴藏于其中, 就在这个时候, 我们将rsa替换为sp, 我们便能够迅速发觉sp所处的位置, 就如同图中所示那般:

python模拟登录新浪微博_Python网络抓包_JS渗透爬虫

我们经觉察到, b被赋予给了sp, 那b究竟是什么呢, 我们察觉到b乃是f的返回数值, 并且, 鉴于我们采用的是rsa加密手段, 因而属于if语句之下执行的代码段落。继续观瞧, 我们留意到的首个情况是, f进行了公钥的设定, 转而, 通过公钥为b施加已采取加密举措, 其中另外增添进去了别的参数, 而这些参数恰好是我们能够得到获取达到的。公钥的设定过程, 以及加密的整个流程牵涉到rsa算法, 对此读者能够去查看这个url链接之下的文章内容, 借此更妥善地领会接下来的操作行为。

////

因, 第一个参数于其中是固定的, 而第二个之中存在一个 10001, 读者至此绝不可单纯如此认定便是十进制 10001 这个数值, 倘若这般, 那就实在太过不严谨了, 因, 此数有可能是十六进制, 也有可能是二进制, 甚或是 17 进制;只要开发者胆量够大, 何种进制皆能够去设置, 这亦是此渗透中难点之所在。那么我们要怎样去判别, 这个参数究竟是何种进制呢? 在这个时候就务必得要运用控制台()了。方才我们已然介绍过控制台。于js里头, 此控制台能够将自身的代码予以打出, 小伙伴们来到这儿别感到惊奇, 这般的js竟是如此随意的吗? 的确, js随意起来连自身都售卖。

1.断点调试

首先, 我们需在我们想要看的f这个对象之处打上断点, 能让代码执行到这儿, 如下所见这般:

Python网络抓包_JS渗透爬虫_python模拟登录新浪微博

之后, 我们去点击调试按钮里如同播放键这般的一个符号, 以此停下调试, 接着再度点击登录按钮, 进而触发事件并且启动调试, 如此一来, 我们便能停在所设置的断电之处, 需要留意的是, 密码与账号均需输入, 密码可不正确, 毕竟这只是调试罢了。如图:

Python网络抓包_JS渗透爬虫_python模拟登录新浪微博

然后, 我们去点那下一步, 一直点到过了f这一行。之后, 我们去点击控制台, 在里面键入f.(), 再按下回车键, 我们就发现, 源代码显现出来了, 就像这样:

能够发觉出, 此10001所对应的是十六进制, 并非十进制。紧接着, 最终的一个问题便是,b究竟是什么呢? 十分容易, 于控制台当中输入b并回车, 众人将会惊奇地察觉到,那是自身的密码。在明晰了sp的前因后果以后,我们着手构建sp的加密函数了:

JS渗透爬虫_Python网络抓包_python模拟登录新浪微博

其中, 是专门用以把数据从十进制转变为十六进制, 最后的, 是把数据采用以二进制编码转化为成字符串的样子再传送给服务器。

2.伪造请求

函数构造完后,我们就可以构造最终的登录请求了:

JS渗透爬虫_python模拟登录新浪微博_Python网络抓包

3.url的进一步分析

数据提交完后, 我们事实上并未成功登录, 缘由在于参数提交后, 在真正页面呈现之前的请求, 我们于抓包软件中能够发觉, 这些请求用于设置, 如下图所示。

JS渗透爬虫_python模拟登录新浪微博_Python网络抓包

那么, 在我们发送登录请求之后, 依然需要持续去模拟四次请求才可达成, 从而让服务器为我们进行设置, 进而完成登录这一操作。这些网址究竟是如何得来的? 总不至于一个一个地手动打上去, 当然且不用说, 我们编写代码可不是为了手动去敲网址, 而这些网址正是隐匿于/.php?这样的包当中。我们仅仅只需把这四个网址里任意一个网址的部分内容复制下来去查询一番, 便能非常迅速地定位这四个网址的出处了, 正如图所示:。

Python网络抓包_JS渗透爬虫_python模拟登录新浪微博

怎会是这样, 那我们究竟该以怎样的方式得到这个页面, 我们持续在网上进行查看寻觅, 不料竟然发现在我们方才发出请求的login页面里的文本内容之中, 有着此页面准确无误的地址, 就如同这样所呈现的一般 , 如图:

python模拟登录新浪微博_Python网络抓包_JS渗透爬虫

4.再次伪造请求,设置

先是, 我们有了思路这点, 首先, 去构造参数进而发送请求, 跟着, 再次去请求那个login 页面, 运用正则把里面的 url 给匹配出来, 接着又再度请求一回, 将里头的四个网址匹配获取下来, 最后撰写一个循环, 对这四个网址展开请求。

5.查询自己的用户名,检查是否登录成功

最后我们请求

把 /u//home?wvr=5&lf=reg 这个网址所对应的 html 文本打印出来查看, 查看自己的用户名是否位于该 html 文本之中, 要是用户名在其中的话, 那就表明我们的模拟登录成功了。现在, 附上剩余的代码:

JS渗透爬虫_Python网络抓包_python模拟登录新浪微博

到此,我们的模拟登录就完成了。感谢大家的观看和学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值