什么是对称加密?什么是非对称加密?五分钟秒懂加密技术加密。首先我们来看一下对称加密,它的整个使用流程是由后端先去生成一个密钥,然后发送给前端,此时黑客他截取到了这个密钥,然后前端呢通过这个密钥来生成密文,再发送给了后端, 这个时候黑客他拦截到了这个请求,就可以去对这个密文来做破解,数据又遭到了泄露。所以你会发现对称加密呢,它是前端和后端用的同一个密钥来进行的加解密,黑客他是可以去轻松破解的。常用的对称加密算法呢,有 aes, 但是这个加密算法呢?我不在这里去做细讲 什么是 aes? 你 可以把它简单的理解为在打仗的时候发报源,他要去向总部发送消息,比如说发的是这个 hello, 那么他把每个字母都往后面去推一位,就可以进行非常快速的加密。但是如果说一旦有内鬼,他透露了这样的一种加密算法,敌方是可以很快就进行破解的,他只需要去将加密的密文偏一辆减一,就可以去逆向破解了。所以他的一个安全性的问题是非常大的。 非对称加密。通过非对称加密,即使你黑客拿到了这把密钥,你也无法去破解非对称加密的这种算法,它会生成两把密钥,一把公钥,一把私钥。公钥你可以理解为是一个信箱,大家都可以去投递信件,但是你不能打开,只有邮递员这个私钥才能去进行打开,从而去获取到信件。 但是这种方式他的一个性能会比较慢,因为他需要去通过公钥呢来去生成一个无法破解的密文,所以这里涉及到的性能就会比较慢。 我们同样也结合着整个程序的使用流程来看一下,由后端呢去生成公钥和私钥,然后把公钥呢给到前端,前端对这个数据进行加密,把密文给到后端,后端能通过私钥来进行解密, 即使黑客他获取到了公钥,他也无法破解。那么常用的非对称加密算法呢?有 rsa 这种加密算法,他为什么无法破解通过公钥加密之后的密文呢?我这里去举个简单的例子,比如说后端他发送给前端的这个公钥是取模五这样的一个加密算法, 比如说是二十二,然后前端对加密之后的密文,假设说啊是取模等于四, 所以此时前端发送给后端的这个数据就是四,那么黑客他有的信息就是取模五以及这个密文四,他想要通过密文以及公钥来进行反推,能反推回来吗? 是推不回来的。你要知道取模五等于四,它的数字是非常多的,更别说 rsa 这种公钥,它是由六百位的天文数字来组成的, 所以黑客他想要去破解到呢?即使你现在用最好的计算机,你用上亿年也跑不出来。所以即使黑客他想要用暴力破解的方式,他也是无法破解的。那你只需要知道非对称加密,黑客他是无法破解密文的,只能通过私钥才能进行打开。 所以你会发现非对称加密,它是由公要来进行加密,由私要来解密的,是不是就非对称了?当然它还有一个问题我们需要去解决,也就是它的一个性能比较慢,在前端它通过公要和数据进行加密之后,由于它这个算法比较耗费性能, 所以你的数据越大,它整个的一个加密过程也就越久。所以我们在实战当中呢,通常会用到混合加密的方式, 混合加密,那么混合加密它同样的它会生成公钥以及私钥,把公钥呢发送给前端,但它加密的就不再是数据了,而是一个特别简短的字串,你可以把它简单理解为,比如说它就只是去加密青木的这样的一个字串, 那么青木这个字串呢,肯定是跟后端去约定好了的,因为你加密数据会比较慢嘛,特别是数据量比较大的时候,比如说这里传一个两张的图片,那么它加密过程就会比较慢, 我就不去加密你这个数据了,我只去加密一个简单的这个串,这样的话黑客他就无法去破解青木的这个这个串,因为我是通过非对称加密来去加密的,然后将加密之后的公钥,也就是无法破解的这个青木的这个串,再去结合着这个数据 做一次对称加密。对称加密呢,它的算法是比较快的,我们之前就说过,所以你会发现啊,前端它既用到了斐度乘,也用到了对称加密。斐度乘呢,它是加密的一个非常简单的函数串,比如说青木此时再用对称加密去加密数据, 最后呢把这个密文返回到后端去,那么黑客他拿到了这样的一个密文,他想要去破解你的这个加密算法,就必须要去破解青木的这个支付串,而这个支付串呢是通过非对称加密,这样的一个算法他是无法破解的,他是拿不到的, 就通过后端去用这个私钥才能去解开这个支付串,再来去通过这个青木的支付串呢,去对数据进行一个简单的对称加密的数据解密,就可以去拿到最终的一个数据了。 小杰最后再给大家总结一下,对称加密呢,它是前后端使用的同一个密钥进行的加解密,优点呢是速度比较快,缺点呢是密钥传输不安全,容易被窃取。 非对称加密呢,它是前后端使用不同的密钥,公钥加密,私钥解密,优点呢是安全,因为它私钥是不传输的。缺点呢是速度比较慢。混合加密呢,它是结合着两者 使用 rsa 算法来去加密 aes 的 密钥,使用 aes 去加密数据,保障性能与安全。那么今天就给大家分享到这里了,拜拜。
粉丝5089获赞1.4万

刚死白的 buff 第七级的时候竟然差点翻车啊!携带码还是得留意细节,今天就带兄弟们花二十一分钟实战学习一下这个爬虫题目。 nice, 像这个 c 零七啊,需求也很简单啊,想办法绕过验证码,爬取本页面的数据集。 ok, 这个地方有一个想办法绕过验证码 视频开始之前给学员准备了完整的爬虫逆向学习文档,从基础入门到进阶实战都有,另外还有大厂的项目教学直播课,需要的学员可以进我粉丝群获取。但是呢,我们刚刚的这个观察过程中啊,又没有看到什么,没有看到验证码,那到底有没有验证码?应该是什么?可能没有验证码啊, 那么在这里的话,我们先来打个断点啊,来刷新一下啊,刷新之后有一个无限低 bug 啊,无限低 bug 我 们直接用脚本过掉啊。 ok, 过掉之后兄弟们可以看到啊,这道题目之前讲过啊,对吧,那么它的验证码也是其中有一个参数位置来生成的啊, 好像是在上面啊,具体哪个位置我记得不是很清楚了。那么现在我们把这些断点痕迹啊,先全部删掉去嘛,既然讲的话,我们就重新来啊,重新开始。 ok, 那 么接下来我们来找一下啊,这,哎,这里面的数据还没加载出来啊,我们再等一等啊。 ok, 数据已经出现了,那么接下来我们来找一找这个数据所在的位置啊,那么找这个数据所在的位置,这里面有一个一十三万五千,我们来搜索一下,十三万五千, ok, 搜索一下, 那么搜索到之后呢,我们找到了啊,我们要拿页面的数据,那也就是说我们需要对着这个地址发送请求,对不对?然后这里面的数据我们就能够拿到了,但是呢,对这个接口里面有加密啊,看到没有加密啊? 点击标头来分析一下啊,标头里面有没有加密?标头里面没有加密啊,但是这个 c k 啊,不太确定啊,到底有没有加密啊?不太不太确定,在后是有的,有一个托肯啊,有一个 k, 那 么这种情况下我们该如何啊,快速找到它加密的位置呢?那么 在这我们需要一个思路分析啊,那么通过思路分析啊,在这个地方我们可以直接搜索这个托肯关键字啊,来找一找啊。 ok, 点击搜索来搜一下啊,这里有个空格啊,空格删掉再来搜。通过搜索发现托肯的话,兄弟们,这个地方不太明显,看到没有,都是什么组合的啊? rs, 托肯,我们要找的是托肯啊,没有这个什么 rs, 那 么像这里面的搜索结果呢,可以 全部 pass 掉啊,那么这种情况为什么搜索不出来呢?很有可能啊,就是代码存在混淆结构啊,所以说你搜索不出来,那么我们直接啊观察它调用的堆栈就行了。点击跳转啊, 点击跳转之后发现啊,这里面的代码确实啊,经过了混淆,对吧?经过了混淆,那么像这种类型的混淆啊,不管你能不能看懂啊,这种类型的混淆,首先第一步啊,解混淆啊,你解混淆之后,你再来看这里的代码,你就 你,你能够理解的速度就非常快啊,如果说啊,你还要看着这里面的混淆,一个个结构啊,来控制它在这里面输出啊,那效率就太慢了,对吧? ok, 我 们先解个混淆啊, 写完混淆之后,我们在本地啊,创建一个什么呢?创建一个 js 文件,比如说一点 js, ok, 那 么接下来我们再来找我们前面要的那个什么托肯,对吧?来搜索一下这个托肯啊, ok, 搜索一下托肯,通过搜索这个托肯,这里有托肯,然后再看下面啊,在这个地方他其实是构建了一个什么,构建了一个请求啊, 然后我们要的请求参数啊,那么接下来我们再来对比一下这个接口对应的一些参数啊, 一个是 k, 一个是时间戳,还有一个托肯,那么接下来我们来看一下这个地方的一个节省结构啊,有一个 k, 有 一个托肯,有一个时间戳,那么也就是说啊,这个地方很有可能啊,就能够对得上我们的请求参数结构,对不对? 那么在这个位置啊,同时也可以发现它发送的是 pos 请求,然后呢,对这里面的数据格式啊,做了一层转换啊,对吧?那么接下来我们就重点来看一下啊,这个位置的 k, 还有这个位置的托肯,以及时间戳是怎么生成的, 那么怎么生成呢?我们直接把代码从这啊,大概是在这啊,时间戳,时间戳在这里啊, k 的 话在这个地方,那我们直接扣代码从这啊,一直到上面这坨啊,直接复制, 那么复制之后干嘛呢?复制之后创建一个二点 gs, ok, 创建的这个二点 gs, 我 们来定义一个函数方法啊,这个地方就需要我们自己啊,对这个前端的 gs 多分啊,要有一点点的理解啊,不然的话,这个代码的话,你不太写的出来啊。 ok, 那 么接下来我们来看一下啊,在这段代码当中啊,如果我们直接来运行这个 aef 函数方法,那肯定会怎样?肯定会报错,兄弟们啊,因为这一份代码他还没有彻底啊,也就是把里面的 bug 全部解决掉,还没解决这里面的 bug 啊, 可以给兄弟运行看一看一眼啊,对吧?哎,直接报错了啊,那么这种情况啊,这个难度高吗?这个难度不高啊,这种情况就是说啊,需要你对 g s 代码要有一定的理解程度啊,那比如说啊,像这一段代码,你是不是不太理解啊?这是在干嘛?对不对?同样的,这里面的混胶也没有解干净啊, 那么怎么办呢?很简单啊,我们继续啊,回到他的这一个启动器里面啊,然后断点打到哪里呢?断点我们就打在这里, 断点就打在这里,我们现在不是要解决这个位置的问题吗?这一坨是代表什么意思啊?那么接下来我们触发这个断点来调试一下 gs 代码,就立马秒懂了,然后这里面有一个无限 bug, 无限 bug, 我 们直接通过运行本地的一个代码块直接 hold 掉。 ok, 现在就到这里了。主播, w x 小 程序图片打卡内的有没有私聊 w x 小 程序啊?这种都比较简单啊,这种都比较简单,抓包抓不到接口,调试还没有试,还没有试是吧,那你应该要去试一下调试啊,只要你有这个 dvd 拖死工具,那基本上都是可以调试出来的。 ok, 那 么接下来我们来看一下这一坨啊,表示的是什么意思啊?在控制台来输出一下啊,对吧?他表示的是这个语法,那么我们在这里呢,因为我们的路的环境啊,他没有这个对象,所以说啊,这一个这个位置,我们需要给他做一下这个替换啊, 那么做完这个替换之后,我们来找一找啊,这种类型的替换多不多?可以看到啊,还是比较多的啊,那么这里比较多怎么办呢?一样的啊,在浏览器上面把它找出来啊,这一行是代表什么意思啊?然后再过来执行一个替换就行了, 或者是干嘛呢?或者是你直接啊构建这一个对象的一个节省结构啊,也没得问题啊,构建这个对象的结构也没问题,但是我看这里面用的也不是很多啊,我们直接手动替换一下,速度还快一些, ok, 直接手动整替换, 那么整完替换看看还有没有啊,发现这尾巴后面还有一个,对吧?还有一个,我们继续替换啊, ok, 继续替换,替换完之后我们再来看这一部分的代码, ok, 再给大家安排一个福袋啊,卡了吗?没有卡呀,你的网络是不是有点,是不是你网络卡了? ok, 再给大家发一个福袋儿啊,在这个地方啊,这一段接词里面有一个重点位置的核心啊,就是这个地方,你看看到没有,它有一个 queries vector 啊,那么像这个地方, queries vector 又是从 document 里面来找的,那也就是说它是在这个 html 当中肯定是提取了什么东西啊, 那么像这行代码呢,我们先不去碰它,把后面的代码我们先操作完啊。 ok, 那 么上面的代码我们就先不管了啊,直接来处理下面的代码就行了啊, 这里有一个蜗牛,这个蜗牛其实管不管也无所谓啊,那这是在干嘛呢?这是什么纸啊? ok, 这个是 cookie, cookie, 那懂了啊,这个是 cookie 啊,那也就是说他肯定是做的有什么 cookie 相关那些加密,对吧?然后再就是关于这个值啊,这个我估计啊,可以不需要啊,他是 cookie 值的一些结尾符号啊,那么像这坨我们可以直接不要啊,直接删掉啊。 ok, 那 么像这里面的 cookie 呢?我们就直接啊,换上什么?换上一个变量来接收一下不就行了吗?来上一个 cookie 啊,来接收一下。然后再就是关于这坨啊,这坨的话,我们直接来做一个阶层啊, 这坨直接删掉,来上一个节省,然后我们再来构建我们需要返回出去的格式啊,一个是 k, 还有一个是什么东西啊?还有一个是时间戳,对不对?时间戳的话我就在这里复制一下啊,我懒得掐了,直接复制还那个一些啊。 ok, 还有一个值是 md 五,是 md 五吗?来看一下兄弟们啊,这个地方啊,还有个托肯啊,是这个托肯 把这个 token 拿过来,那也就是说啊,格式的话是这个格式啊,这里面是 return, 我 们要返回出去这个格式,那么接下来重点是在处理哪里呢?可以看到这个 md 五,这个 md 五等会会报错啊这个 md 五,那么这个 md 五等会会报错的话,我们就需要导入一个加密库啊。 ok, 导入一个加密库啊,导入一个加密库才可以啊,那么对应的这个 md 五方法呢?我们就直接调用这个加密库里面的 md 五方法,这样子就可以了, ok, 啊,那么现在啊,这个 c k 的 话,我们也是一样的啊,需要返回出去啊,也是需要返回出去的, ok, 那 么现在重点啊,我们来处理一下这个 document 的 问题啊,我估计啊,这个 document 的 问题应该就是它前面给我们的一个提示,什么提示?它这个地方说了啊,有个什么验证码啊,想办法绕过验证码看到没有? ok, 那 么像这个 document 的 问题,我们来看一下啊,这个 document 它这里是在整什么东西啊?观察观察啊, query selector, 然后是要什么东西呢?看一下,它是要这个井号托肯,对吧?要这个井号托肯啊, 这个井号托肯,他提取到之后又是一个怎样的值呢? ok, 发现啊,他是一个什么什么对象啊,对吧?然后托肯,井号托肯,然后提取里面对应的蜗牛值啊,这个蜗牛值我就懒得找了啊,在这里,对吧?那么接下来怎么办呢?有这个蜗牛值, 断点打到这啊,然后让下面的断点执行下来,然后把这个在控制台啊输出一下, 把这个值输出出来,那么输出出来之后,我们直接可以放掉所有的断点了啊,不需要再来调试了,接下来干嘛呢?接下来我们就来找这个值,这个值他是在哪个地方?肯定是有出现的,对不对?然后呢,我们在这个地方用放大镜啊,来搜索一下, ok, 那 么通过搜索,我们是不是已经是不是已经找到他的位置啊?他在这个 html 代码里面, html 代码里面我们要提取这个值的话,我们需要对这个接口啊,来发送请求,对吧?那么对于这个接口发送请求,我们直接来生成一下最基本的代码,我们来看一下能不能拿到这个值啊,也就是托肯这个值, 那么接下来我们开始写代码了,兄弟们啊,这里面的代码我就直接通过这个快速生成来生成的啊,当然这里面的代码我们也是需要稍微调整一下子。首先在这个地方 ck 的 话,我是打算不携带 ck, 不 携带 ck, 看一下能不能拿到啊, 那么像这个 c k 参数我们就直接删掉了啊,然后在这儿来来上一个 test, 输出一下 response, ok, 现在我们来看一下啊,能不能拿到这个 word 值, ok, 这个网站就是加载速度有点慢啊,其他的没得任何问题的。这个 word 值前面我们是不是在这里找到了 word 值在这儿啊?还是也就是说这个 word 值我们还是能够拿得到的啊, 对吧?那么这里面的提取呢,我们来搜索一下这个特征,来看一下这个特征是不是唯一的啊,如果是唯一的的话,我们就不用太过于复杂的一些提取方法,在这个地方我们直接用正则来提取, 直接用正则来提取,然后提取一下这个 ctrl 二一点三的 o, 那 么首先啊,这里面需要书写正则规则啊,正则规则我们该怎么写? 匹配的对象是这个 response, 那 么正则规则也很简单啊,我们要的是这个蜗牛值,对吧?那么我们直接把这个特征拿过来就行了,这里用单引号,我们要的是这个双引号里面的这一坨东西啊,这坨正串,那么在这里面呢,我们就直接来上一个括号点心花问号来代替啊,中间这坨正串啊。 ok, 那 这样子就提取出来了,然后再就是翻的蜗牛法,他返回的是个列表,所以说在这里面提取到之后,我们要拿上一个下标来取啊,那么这个 token 啊,我们就拿到了,这个 token 拿到了,那么接下来我们再来回到这个二点 g s 啊, 这个 token 我 们已经通过 python 代码来获取的,对吧?那么像这个 token 的 话,我们就直接通过参数啊,传过来就行了啊,传过来直接用啊,那么像这两行代码呢,这两行代码我们就直接给它删掉了,兄弟们,直接删掉了就不需要了啊, 那么这里面的 token 返回值肯定也是不需要的啊,因为这个 token 我 们已经拿到了,对吧?而且是从外部传递进来的, ok, 那 么现在再来检查检查代码,看看还有没有需要修改的地方啊。 ok, 这个地方有啊,这个地方有啊,这是在代表什么意思啊? 我们来瞅一瞅啊,看一看他是代表的一千,还是代表了几千呢? ok, 他 代表的是一千,那代表是一千,我们把它换成一千。 ok, 那 这里面的代码就基本上已经写完了,兄弟们,这里面的托克我先来个 g 啊,来运行来看下效果先, 对吧?返回值啊,都拿到了啊,那么接下来这里的代码这一行先注点,那么接下来我们直接调用这个 gs 代码,来看一下我们能不能拿到页面的数据啊。首先来上一个委托啊,从本地抖取一下这一份 gs 代码,也就是二点 gs, ok, 二点接受抖取的方式, r 的 方式来抖取,然后抖取的同时我们指定一下格式啊, u t f 杠八,然后紧接着创建一下这个 g s 的 对象啊, g s 对 象不创建的话,等会我们没办法调用啊, 那么这个对象创建好之后呢,我们就可以去调用啊,通过这个 c d 叉对象来调用 g s 里面的这个 a e f 方法了,那么接下来我们来调用看一下啊, 返回值呢,我们用 s i g 来接收一下啊,通过 c 叉来调用 a e f 这个方法,同时啊,它需要传一个参数托管啊,参数托管直接传进来啊,那么接下来直接来看一下 s i g 啊, 等会不会报错吧。我靠,老哥你对我的技术这么不自信吗?哎,等会,等会啊,这个地方我起打错单词了,打错单词了,不然的话还真的会报错啊,再来运行看一下啊, ok, 对吧?几个参数啊,我们全部都拿到了啊,全部都拿到了,没得任何毛病,兄弟们啊,那没得任何毛病,我们接下来就来干嘛呢?请求数据接口啊,还干,还愣着干啥呢,对吧?请求数据接口啊,那请求数据接口,数据接口是哪一个?我刚刚忘忘忘记了, 来找找啊,看看哪个是数据接口啊? ok, 数据接口,数据接口,再找找啊,这里面好像不见了啊, 有这么离谱吗? 这还真好像不见了啊,不见了,我那个骚党兄弟们不见了,那我们只能够重新刷新一下,把那个数据接口刷出来。 ok, 刷出来之后我们再来搜索一下,一十三万五千啊, ok, 一 十三万五千,数据接口应该是这个啊,这个是我们要的数据接口,点击载荷,对吧?是这些参数啊,那么接下来直接复制一下它的一个格式啊, 生成一下最基本的代码,然后 datast, 我 们已经有了 datast 的 话,这个地方,兄弟们,这个地方的 datast 可以 看到啊,它做了这样的一个字母串切换啊, 对吧?这里面做了一个字母的切换,它不是一个字典格式啊。首先啊,数据它是有同步加载和异步加载区别的啊,如果你要的这个数据它是属于异步加载的,然后呢,你的代码又是请求的同步的一个地址, ok, 那 你就拿不到这个数据啊, 这个数据你不要以什么为准呢?你不要以这个什么元素,这个地方,也就是 element 这里面你看到的为准啊,不对啊,要以什么呢?右击啊,查看网页源代码,以这个源代码为准, 能理解吧?以这里的元代码为准啊,你要的这个数据啊,对于你请求这个地址啊,如果这种形式你能够看得到这一个你要的数据啊,那你用叉 plus 的 话,基本上都是能够提取出来的,如果说啊,你是在这里看到的啊,有这个数据啊,然后对着这里啊,右击复制叉 plus, ok, 那 就不一定啊,能够提取的出来啊, 这里面就是异步加载和数和同步加载的一个区别了啊,很多兄弟们在这个地方都踩过坑啊,源码搜不到,那就是异步加载了,老哥,你的数据是异步加载来的, 一步加载来的,你就要在 jason 里面找了,因为像后端传给前端的数据,一般做这种数据渲染都是通过构建的 jason 格式啊,来做渲染的,一个圆数据圆, ok, 那 么接下来这个代码我们已经生成了,那么接下来我们把这段代码复制一下,只要这坨,其他的,其他的应该都不需要了,当然只要这坨,这坨也是有要求的,兄弟们,什么要求呢?我们先来一步一步来观察啊。 ok, 首先是关于这个 key 啊,这个 key 的 话,肯定是从这个帧值里面来提取这个 key, 对 不对?来上一个点 get, 然后提取一下这个 key, ok, 那 么像这个托肯的话啊,这个托肯的话,那肯定啊,就是我们前面通过正则来提取出来的,这个托肯放在这儿, ok, 时间戳也是一样的瞬,然后点 get 来提取这个时间戳, ok, 然后再就是这个 cookies 啊,这个 cookies 的 话,它也是从这个私人里面提取出来的,点 get 啊, cookies 没毛病啊,当然这个 cookies 的 话,兄弟们,这个 cookies 我 再来看一下它的格式啊, 格式的话有没有问题?这个格式格式应该没得问题啊,格式没得问题?不对啊,这个格式还是有问题啊, 这格式有问题啊,这个是 k 值对吧?这是 void 值啊,如果你是这种形式来构建建筑队的啊,那么肯定啊,是要放在 header 里面的对不对?那么这个地方它是有点问题的啊,把它干掉啊,只返回一个 md 五就行了。 cookie 子就是 md 五,那这个地方我们还要个毛,直接来上个 md 五就完事了啊, md 五放在这儿,这个不不要了, 那么在这个地方的话,我们怎么做操作呢?首先啊, cookies, 它是一个字典, cookies 是 一个字典,那么我们来上一个建筑队啊, ok, 首先是它的 k 值,它的 k 值的话 是不是这个呀? k 值是不是这个不太,我已经忘了去买已经忘了啊,那已经忘了,我们来瞅一瞅啊, k 值啊,就是由他啊,这坨啊,复制一下,然后放在这里面啊,当然这个单一号我们是要干掉的,然后接下来是由肾啊,提取,提取里面的,看一下是提取什么 cookie 啊?是提取 cookie 没有 s 啊。 ok, 那 么接下来我们直接干嘛呢?点接收来看一下我们能不能拿到接口的数据啊, 这里面的参数都没得问题了,只不过前面啊,这里面有个细节,什么细节呢? 在这再给大家讲一遍啊,这个地方啊,它是一个矩阵格式啊,那么在这里面呢,你现在构建的是一个字典格式对不对?那这个地方就要写成什么节省对不对?它再来运行,看结果,兄弟们能不能拿到数据啊,再给大家发个福袋,你对 ai 逆向有啥看法?没什么看法啊, ok ok ok, 给我们报了一个错,这,这啥情况?我赌你不能。好的,这个地方给我们报了一个错,兄弟们,这,这该咋办? 那么这里报了一个错,这个错是什么导致的?是不是这个 data data 的 问题啊?我们再来看一下,他是不能接收这种接收格式指定吗?如果说啊,他不能够接收这个这种接收指定的话,那我们就需要转换一下这个地方的格式了啊, 不着急,兄弟们。 ok, 报错了,报错了,我们就来转换一下,兄弟们啊,点 dumb 子,然后传入 date, 传入 date 之后,在这个地方我们再来上一个,一个什么 要消除掉它的格式啊?首先是这里面是哪个?这里应该是逗号,前面的话是冒号,兄弟们, 有没有问题?格式正面格式有没有问题?也就是说啊,把它变得紧促一些啊,因为我们前面通过这个代码生成他这个对卡是很紧促的,你看到没有, 他这个地方是没有空格的啊,很紧促啊,看到没有,很紧促啊,那么我们也是一样的啊,要把它变得紧促的话,我们就需要在这个地方给他干嘛呢?加这种格式啊,给大家瞅一瞅,反了吗? 看一下兄弟们,他说反了,我改回来。兄弟们, ok, 还真反了,再来一行, ok, 这里现在就变得很紧凑了啊,那么同时呢,这里现在已经是一个字母串了啊,那么接下来我们再来尝试一下子, 对他,对对他,没得问题啊,再来就行,看一下能不能过啊,能不能过啊?啊,还是不能过啊?兄弟们,这地方该咋整还是不能过呀?我们来看一下他响应的内容,是个什么玩意?翻车了,然而并没有什么卵用啊,发送破折请求,没毛病啊,这为什么呢? 我们先看一下接口给我们返回的响应, ok, 这边多了个等号。这位老哥说的对啊,多了个等号,我们再来运行看一下,还是这位兄弟眼神可以啊,这个地方多了个等号啊, ok, 果真啊,是这个等号的问题啊,这个等号把我们耽搁了。那么像以上呢,则是关于这个死 bug 的 第七题啊,兄弟们,大家也可以看到,我差点干翻车了啊,难度系数呢?虽然说没有啊,但是如果说啊,你在编程过程中啊,如果粗心大意啊, ok, 那 你可能就啊走歪了,对吧?就走歪了,兄弟们。

联通网页做登录的时候遇到这种验证码,应该如何通过咱们的协议爬虫来快速的过掉嘞?今天带领大家来实战难度指数两颗星当当网滑块拼图验证码的一个处理,当我们输入账号跟密码之后,我们点击登录,那么在这里啊,他会直接给我们产生一个滑块拼图,看到没有, 像这种验证码我们是绕不过去的,就是我们每次进行点击登录,他都会进行验证码的触发,所以大家注意一下啊,如果你也对前端逆向攻防感兴趣,老胡啊,我专门给大家准备了爬虫逆向实战的一个直播课,拆解目前市场主流的一些前端加密技术,还配套录制了全套的逆向入门学习视频,大家记得在粉丝群里面来进行获取, 我们像在这里我们是能够看到啊,在这里是一个验证码,验证码,首先我们在获取的时候请大家记住啊,验证码目前像滑块拼图验证码,分别啊是有两张图片,也就是我们的背景底图以及我们上面的这个 滑块图,我们也可以把它叫方块图啊,其实都是一样的啊,那么像验证码的验证的逻辑其实也很简单,无非就是来得到我们当前的这个方块图到背景底图它中间的这个缺口,也就是到它这里, 对吧,从他把他拖拽到这个地方,那么就验证成功,是吧?这么一个逻辑啊,好,那么我们像在这里,我们首先我们先来看一下当前的验证码的获取接口是怎么来的啊?我们鼠标右键点击检查, 然后像在下方啊,我们打开了我们的开发者工具,在开发者工具当中啊,进行点击网络,然后进行页面刷新,当我们刷新之后,我们可以看到像在下面的话,是不是直接给我们返回了我们的图片, 这个是四零八乘以二零四啊,注意框高,然后这个是七十一乘以七十一,让我们来看一下啊,注意框高啊,这个地方 好,然后我们像在这里我们可以看到这个是验证码的获取接口,在验证码的获取接口当中,我们是可以看到它有一些值的啊,像这个 in trap key, 呃是干嘛的?我们不清楚。 然后有 toky, 然后有两张图片,这两张图片分别为我们的背景图与方块图,那么在这里有个 y 九,其实很多同学对于这个 y 九啊是有存在一定疑惑的,这个是什么?对不对? 基本都回不清楚,我给大家讲一下啊,像这个 y 轴啊,其实它是什么?这个 y 轴啊,其实它是进行的一些呃处理的啊,但是实际上它所代表的位置其实就是我们当前的这个方块图, 当前这个方块图到他的顶端的一个距离,对吧?有些是这样的啊,就是这个他的一个距离,就是这个地方的一个 y 轴,就他的一个距离,那么他的一个距离,那么像在这里的话就是为零点三五,对吧?当然这个值他肯定是处理过的,肯定是进行了缩放,大家请注意啊,他这种的话以小数点的形式进行呈现,一般都是进行的缩放, 晓得吧?这个是缩放,然后你看一下这个这是高吧,然后零点三四,对吧?他可能都进行了缩放。好,那么我们来看一下,那我们可以看到当前这个接口是不就是我们所需要的验证码的获取接口?我们来生成一个 python request 爬虫代码,来,我们生成一个 request, 一个代码啊,来,我们来看,再把它复制过来。 嗯,然后我们去创建一个验证码的案例啊,这个是当当网逆向登录来创建一个拍摄的文件,我们先一个个来分析,好吧?来,然后我们在这里把这个代码给掏过来。 嗯嗯,我们可以看一下啊,在这里面我们很明显的可以看到它里面是有一个十三位的时间戳,然后其次还有个 c 写,这应该是一个签名,对不对?对吧?还有个签名,那么在这里我们通过它来,我们使用 print 来打印一下来执行。 好,那么我们来看我们像在这里我们是可以成功请求的吧,并且也可以请求成功,然后请求成功之后,我们可以打开一下,你看这是一张图片, 这是一个方块图吧,对吧?这是一个方块图吧,那么我们像在这里我们可以来看一下啊,我们现在我们肯定是需要把这个签名跟这个时间戳给他处理一下的,而且我们要注意看一下这里面的这些参数是不是变化的, 对不对?我们去看一下他是不是一个动态参数,对吧?我们可以看一下来,那么在这里我们要试一下,看一下他是不是动态接口,对不对?所以啊,我们现在在这里,你看我们可以,呃,大致的我截个图,好不好?我截个图来, 然后我们在页面当中来划来刷新这个页子吧,来刷新,刷新之后,哎,我看一下他有两个接口进去,但是这个接口好像没有反回去,什么都没有,对不对?这个接口应该没跟我们没关系, 这里面的话幺二八零,这个是我们当前的页面的一个窗口大小。 ok, 先不管他,我们来看一下。呃,时间是变化的。 pc 二零二六零幺,然后结尾是二四九九四,呃,这个结尾是 v w。 哦,好,那么在这里其实我们通过对比我们是很明显的可以看到在这里是有加密,我们首先可以看到在这里第一个十三位的一个时间戳,然后其次还有个签名的一个加密,我们是不是要把它给搞定?那么在这里我们现在可以发现这里是不是有个 c 血的一个加密,那么这个 c 血的加密我们可以去分析一下,看一下它是怎么来的。 ok, 你 看我们遇到加密的时候第一步干什么?是不是去快速的去先搜索它里面的关键字,对不对?我们看一下搜关键字能不能直接搜索到它的加密的一个位置来,我们直接搜索,呵呵,好像有点多, 好,那么像我们搜索如果有点多的话也没关系,我们可以带一些标示符号,比如我加个等号试一下,你看加一个等号的话是就比较清晰,对不对?你看我加一个等号,当然你除了等号之外,你还可以加其他的标示符, 那这个看不是的,这个是 a 字,我们的 c 写, a 字我们的 c 写,所以你看加一个等号,那么加一个等号的话,我们可以看到在这里它有个 n 点 c 写等于 r, 对 不对?我们点击它来跳转到接受代码里去, 那么我们来看,在这里你看我分别,我对当前的 r 的 前面打一个断点,对不对?因为这个地方 n 点 c 写是不等于我们的 r, r 的 话有两个,不,只有两个,有一个,两个,你看一二三四,是吧?它其实做了四次处理的啊?朋友们,你看它是做了四次处理, 所以如果说他做了四次处理,那么在这里我们将一步一步来,我们首先要观察他前面做了什么处理,然后第二步,第三步、第四步,我们要以此类推,明白吗?那么在这里,我们在最开始的啊这个地方给他打上一个断点,我们刷新我们的验证码,然后当我们刷新之后,我们可以看到,首先他会入一个参数, 大家请看这个 a 是 谁啊?朋友们?这个 a 不 就是我们当前不包含我们的 c 的 请求参数吗?就是不包含它的请求参数吗?不就是它吗?对不对?我们把它删掉,你看把它删掉,它是不是就是这样的?你看 是不是一模一样?只是说我当前的话,这个时间戳我们是把它固定的,对不对?我们需要把这个时间戳把它替换,是不是?我们需要把它替换? ok, 这个地方我们等一下再去做动态的交互,好不好?我们现在先把它固定,然后进行测试,来创建一个 ds 文件,来创建一个 q 得 e, 好,那么在这里我们现在先把这个 json data 给它拿下来,记住哦,就是这个地方我们先把它进行固定,然后要记住它是一个动态的参数,对吧? python 里面的请求体, 对吧?这是 python 里面的请求体,所以我们等一下需要把它进行动态交互,明白吗?那么在这里这有个 t 对 吧?这个 t 是 一个动态的,你们要注意啊,这个 t 是 一个动态的,我们可以尝试去找一下它,你看在这个地方,对吧?我们把它拿过来, 好,那么现在这个 json data 将来进行 n 点 a 点 json 的 一个 string 的 一个处理,对不对?我们来看一下它处理之后变成什么样子,这个是它处理之后的值,你看 a 值是还没有处理掉,这是处理之后的,我们可以看到在这个地方 很多朋友就会以为它是 json 的 转变,对不对?朋友们,我们请看一下这个代码是不是咱们在座的,是不是很多朋友都会以为这个地方啊,它进行的是一个 json 的 一个转变,其实不是的, 大家请看啊,这个地方我给大家讲一下啊,我给大家讲一下,很多人我们在遇到这种情况的时候,如果你直接使用 jason 去转的话,它的格式是不一样的啊,我给大家讲一下啊, jason, 你 看点我们的 str 转,我们的 a 折,你看它们两个格式是不一样的,看到没有?它不是 jason, 那 么这个 n 点 a 到底是谁呢?我给大家讲一下,这个 n 点 a 啊。在目前在我们的 node jason 里面也有一个第三方包,这个包的话也是能够直接来对它进行处理的,我们可以来试一下,你看我们有一个包叫做 q s 啊,叫做 q s, 在这个 q s 里面,你看啊,我们通过它来进行替换,就是把这个代码给它替换掉,你看我们在下面使用 q s, 对 吧?点我们的 stream 来处理我们的接收 data, 你 看一下, 因为它里面其实还有排序的啊,朋友们,你们要注意啊,它里面其实还有排序,你看是吧?其实是一个 q s 啊,不是 jason, 所以 你们要注意这个是一个第三方包,它主要的话就是把它的数据的类型,其实说白了它就是会在下排序,然后排序之后啊,会把它转变成一个拼接的一个格式, 你看可以看啊,你可以去读这个数字,但是我上面其实就是一个整句的啊,它会根据我们的那个排序,我我记得好像是根据二十六个字母来排掉,你们自己可以去注意一下,所以你们重点要注意,千万不要直接使用 jsen, 对 吧?直接使用 jsen 它有问题, 知道吧?好,那么在这里我们转变之后,在下面还有一个 dico 的 u l 哦,这个地方是对它进行呃,我们的解码的一个处理,对不对?你看后面还有一个解码的处理, 是不是解码的处理,然后对它解码之后,然后再是由我们的 r 等于接括号 r 的 一个处理,是不是还有个步骤,然后再往下走,那么 r 又再次的做了一个处理,然后我们才能得到我们的 c 写,是不是这样的? 来我们来看,那么在这里的话,首先你看它其实记了很多处理的啊,呃,不能,是否环境有原型键吧?呃,这个具体要看网站才知道的啊。数据库界面不能变,出门怎么办? 数据库界面你是用的数据格式化的那个工具对不对?如果你用的是那个工具,你直接去下载一个插件啊,它插件不是可以把它搞成中文版的吗? 对不对?对吧?网上还有破解版的嘞。好,我们来看,那么在这里我们现在首先这个接是谁我们不清楚,我们要看一下这个接是谁啊?朋友们,我们来看一下啊。首先看一下啊值,这是他入餐,然后是接值,我看一下接值,这个接值它里面是告诉我们它用的是 h a 点 m d 五,对不对? 你看在这个地方我们可以看到它是一个 md 五,对不对?呃,当然我们要去确定,就是我们不确定它是否标准的,我们该怎么去确定?我们是不是用大一加密法可以快速确定它是否为标准 md 五加密,对不对?你看我们在这里使用我们的大街括号加密一个字串一, 然后找一个在线的,你看在线的 md 五加密,对不对?把它同样的我们也来加密一个一,我们来看一下加密结果是否一致, 你看它其实就是标准的,看没有也就是标准的,对吧?那么在这里当前这个阶值是不是就是标准的 md 五加密,对不对?如果它是 md 五加密,那么在这里我们对它进行替换,来,我们在这个地方直接使用标准算法来对它进行实现,点 md 五进行加密,点 to space, 对 不对?就 ok 了,然后 ok 之后再往下走,是不是有个 y 值,这个 y 值有两个参数,一个 r, 它肯定也跟我们的 md 五就没有关系了,因为它有两个参数, 对吧?它有两个参数,它有像这种有两个参数啊,你们要注意啊,它有可能是呃,我们的对称加密算法啊,也有可能是 hmac 系列的消息在内加密算法,对吧?都有这种可能。 ok, 首先我们来选中这个 y, 然后进去这个 y 值,然后在这个 y 值里面,我们其实很明显可以看到它应该是为我们的 a s 的 一个加密算法,对不对? 对不对?是不是一个 a s 啊?好,那么我们把 y 值给它掏下来,它其实就是一个标准的 a s, 但是请记住这里有个重点东西。什么重点呢?大家有没发现这里有一个 k, 这是个 k, 这个 k 是 怎么来的?我们可以要去测试,就是这个 k, 它可能是动态的啊,你们要注意啊,因为我们在服务器的返回的接口里面也有一个 int 的 k, 是 吧?这个密钥的话,它可能是动态的, 我们要试一下,朋友们,我们要试一下当前这个密钥是结尾是 m 三接三,对不对?我们重新刷新一个验证码试一下,看一下啊,我记一下这个 k, 这个是 t b e f, 我 们记一下这个值啊,我们重新刷新验证码看一下, 哎,好像是不变的哦,它是一个固定的,对吧?它是一个固定的,呃,我再刷新一遍,我看一下哦,我就怕它是变化的,晓得吧?哦,它是一个固定的,对不对?那如果说这个地方它是一个固定的 k, 那 不就是非常的 so easy, 对 不对?我们在下方去声明一个 k, 把它传过去,好,然后在这里面我们把这个 h a 全部给它进行替换成我们的标准乘法包,对吧?标准的 a s 加密 一值 t 值,呃,这还有个 u, 对 吧?这个 u 是 谁?我看一下这个 u 是 谁?来把这个 u 给它找出来,呃, u 在 上面,对不对?来把这个 u 给它找出来,这是 u 好,非常的 nice。 ok。 那 么像现在的话,我们当前的 c 血是不是就生成成功了?它进行了两次加密对不对?一次 md 五啊,一次我们的 a s 做了两次加密。好,那么在这里,我们现在我们是不是要修改我们当前代码了?我们在这里的话,我们前面这个代码这个接收 data 我 们肯定是不要的, 因为它将会由动态的我们的 python 来进行传入,对不对?所以把它删掉,然后下面这个地方我们进行封装,把它封装成一个独立的函数,迈一二三。 好,然后在这里面接收一个接收的塔,下面使用 return 返回我们的阿泽,也就是我们的 c 选,对吧?那么现在我们在 python 里面,我们是不是要把它给传过来,再把它传过来?还有这个地方我们要把它修改一下,这个地方我们记得要把它改一下,变成一个动态的时间戳,所以啊,我们在上方啊,额外处理一下, 后面会教 c f, 对 吗?呃,只有在 vip 课程体系里面才有啊。来,我们还倒一个 time, 像 cf 盾什么的,这种啊,我们一般在公开课或者这种直播平台我们都不会教。你感兴趣,其实我们在 vip 课程体系里面,后续我们可能还会更新,像谷歌和微软的它的一些加密的一些内容。 你像目前的话,我们已经对阿一八四,还有像阿卡麦,其实目前都有更新。那 cf 盾啊,没看到啊。呃,它应该是在最新的一期,你应该是现在是听谁的课? 咳咳咳,我记得里面是有的啊。稍等一下,我看一眼。你可以看一下课表啊,当然了,这里有其他同学。呃,不是我们 vip 学员。没关系啊,有时间你想跟着白嫖也可以 哦。它现在更新的是阿一八四啊,现在更新的是阿一八四,应该不是 c f 顿,对吧?阿卡麦跟阿一八四。可能下一阶段的话更新就是更新 c f 顿,然后后续会更新像谷歌或微软的一些内容。啊,它会陆陆续续更新的啊,没有那么快。 那么在这里我们 ok 之后,我们现在在这个地方,我们需要把它替换成一个十三位的小数,对吧?呃,来把它替换一下,记得加个字算哦,因为我们的请求参数他不可以是 我们的请求参数,它不能是整数啊。 ok, 没问题啊,没问题。之后我们现在我们向在下方啊,我们进行文件的读取,对吧? g s code 等于 open 打开代码同路径我们的 code 一 点 g s 文件,并且采用 r 读的模式,指定拷的编码,对吧?点 read 全部读去, 然后向在下方来进行程序的执行,来得到我们的 c 选的一个值,来等于我们的 e x e c 创建一个,这是创建一个 node js 的 执行引擎。打看顾安老师的。那应该不是, 我记得好像是后续到时候是百川吧,还是下落来麦芽三,然后把这个代码给它传过去,作为参数给它传过去。那么这里我们使用 print 来打印我们当前的 c, 选它的返回,有没有问题是不?没有问题, 是没有问题,对不对?没有问题,那么我们现在我们在这个地方可以修改一下当前代码,我们直接在 data 里面 我分开写吧,不然我怕你们看不懂,对吧?这样去写好,我看一下是不是写写参数啊,确定一下 s i n 是 的,没问题。好,那么像在这里我们是不是就 ok 了?朋友们,请看,那么现在,咳,它就变成了一个动态的请求 哦,失败了,哈哈,好,抖友们,来我们看,我们在这个地方我们出现了问题,对吧?出现了一个很尴尬的问题,这个是因为什么样的原因所导致的呢?签名失败, 咳咳,我们看一下啊,首先我们看一下在 g s 代码里面的处理,呃,在 g s 代码里面的这个 key 啊,我们刚刚已经测试过了, y 值, r 值, 呃,有问题。呃,像我们现在出现问题了,我们看一下怎么解决啊?朋友们,首先我们现在要怎么办呢?我们要考虑的,记住啊,一般我们如果遇到了通过 python 掉咱们的 g s 出现问题,首先第一个先去看数据类型格式问题, 为什么?大家有没有发现我们刚刚在 g s 代码里面去进行加密的时候啊?我们当前传的 g s data 其实是一个整数, 是不是?朋友们,是不是啊?其实是一个整数,你们仔细看啊,就是我们在 jsondata 里面在做我们的加密的构成的时候,我们在这个地方你看我们处理一下啊,你的发际线好高啊。呃,做编程的基本都是这样啊,好吧,不要去捅我的心窝子好不好, 过两天我去植发来看啊。朋友们,其实在这个地方大家请仔细观察,就是在这个里面啊,它的里面的这个 jsondata 其实是一个整数, 所以我们要注意这种数据类型的问题,你看啊。呃,首先我们还可以去确定一下,就是当前这两个参数应该是不变的啊,二四九九四,你看它是不变的,二四九九四后面的是 f b c 七,对吧? f b c 七 p c 只有这个时间戳是变化的, 所以其实我的建议是啊,朋友们,就是我的建议啊,其实最好的是这样去处理,因为他们两个是处于同频的时间戳,我们不要直接传呃,我们的雷塔对吧?呃,我们这样去处理啊, 来,我们先试一下啊,我看一下这个 c 选能不能正常返回啊? ok, 可以 返回,可以返回之后,那么我们现在我们在这个地方啊,把它修改,这个地方我们要改一下啊,这个 time 一 就可以了啊,然后也很累他,我们试一下,看一下现在能不能行,你看是不是,是不是就是时间错了问题, 朋友们,所以你们要注意啊,就是我们在很多时候如果遇到报错了,你们不要慌,你要知道怎么去解决问题,对不对?要一步去测试。如果说我们刚刚测试发现不是时间错的问题,那么我们就使用一个相同的内容去进行加密,看一下我们在拍摄里面处理跟在 gs 里面处理是否相同,如果是相同的,那么就证明你的加密肯定就没有问题, 明白吗?如果加密没有问题,那会是什么问题?那肯定就是有没有可能是其他参数,或者是 cookie 失效,或者说是我们的呃,证书的问题,因为当前的请求是 h t d s, 对 不对?是不是啊?它有可能是 t l s 的 验证问题。是啊,所以说我们一定要学会怎么去调试代码,明白吗?这个很重要。 最近有点感冒,喝口水,刚刚算不算超时?呃,刚刚不是超时,刚刚是签名错误, 签名错误就是因为我们刚刚它加密的那个时间戳是要是整数,但是我们把它转成自创去进行加密了,所以导致错误。 最近有点感冒啊,喝点水,稍等一下啊。好, ok, 那 么我们现在是不是第一个步骤完成了?那么当我们完成之后,我们现在是不是要来做第二个步骤?就是来分别把当中的参数来进行提取,提取之后然后进行验证码的识别,然后还要做加密。 那么在这个地方我们其实可以对代码进行封装哦,就是你们有没发现我们要做几次请求一次,图片请求两次,验证请求三次?我们是不是要重复的做三次请求,那么这重复的三次请求,我们是可以把它封装成一个工具包,然后用函数或者面向对象的方式来调用, 你们看要封装吗?我怕封装的话你们看不懂,那我们就不封装了。好吧,我就把它分开写,好吧,我把它分成几个步骤啊?然后现在我们下面的一部分步骤就是将来进行验证码,对吧?验证码的图片的获取并且识别。 ok 啊,好,那么我们像在这里,我们现在我们像在下面分别来提取里面的图片,这是在。呃, data 里啊,我们的 response 来 response 来括号里面的 data, 然后再是里面的。 ok, 这个是背景图还是方块图来的?我看一眼, 这个是方块图是吧?这个是方块图,点个注示,哎,搞错了,好,方块图,然后再是我们的背景图, b g 背景图,然后我们还有像下面的这个 in trap k, 我 们最好也把它提取出来啊,虽然我们不知道是干嘛的,但是把它提取出来肯定后面有用,然后 tok 也把它提取出来,对吧?一,好吧,这没问题吧?然后这个是我们的背景地图,背景地图, ok, 这个这个提取大家应该会吧?这个就是一个 jason 的 一个提取啊。如果正常用协议过的话,账号会出现封号,呃,他跟你的正常有人违反问题时是大差不差的, 你可以再代理 ip 什么的。你正常用协议过的话,其实说实话,你过验证码,说实话基本不会出现封口,就是你注意下 ip, 如果你要做账号登录什么的,那你就要注意了,可是你登录平凡什么的,那就不行,你登录平凡了,可能你的账号可能就会被拉到黑名单里去, 明白吗?知道吧?你可以,你当然正常来讲,其实就是正常人违法问题,像一般网站,像当当网这种网站,它其实不会对你的账号特别严格,但是如果说像京东、淘宝吧这种网站,你说实话就要注意一点, 听见了吗?小黑同学,呃,去 case 字典有学对吧?学过是吧?好,那那么在这里我们 ok, ok, 之后我们现在要把两张图片给它保存,对不对?我们需要保存,其实我们不保存也没关系,我们就可以直接进行识别, 直接进行识别,因为我们目前啊,像我们一般在进行识别的时候,其实我们都是需要把图片转变成我们的,呃呃,叫啥来着?我们是需要把图片转变成自己的啊?好,那么在这里我的识别的话,我就去使用来,这是 app 获取验证码图片并且 识别,对吧?那么在这里像目前的识别其实有很多种,你像我们的第三方平台打码 对吧?其次还有我们的本地识别,以下本地识别我问一下各位,你们有用过吗? 有没有朋友有知道像目前第三方平台打码分别有哪些?本地识别分别有哪些啊?有没有哥们知道的小黑同学,吴宇同学,佳同学知道的朋友们有,哥们可以说一说啊,大家参与进来嘛。你要知道我讲课,其实说实话,其实我每次直播的时候真的就相当于是在讲课一样的东西, 对吧?我没有很好,因为我是传统的程序员出身,可能没有那么很牛逼的那种网感,是吧?就是平常可能给你们搞点噱头什么的啊,给你们对吧?我没有那种网感,可能讲的都是比较干的一个技术,对吧?可能很多同学也不太喜欢听, 好吧。那么在这里像目前第三方平台打码的话,本地的是,呃,对,非常棒。本地目前常见的我们就是有滴滴,滴滴 ocr 对 吧?第三步,然后还有像我们的 p y 对 吧?这也是一个 ocr 啊,然后其次还有我们的 open cv, 或者你们可以使用 uro 对吧?呃,也可以,目前本地识别啊,其实挺多的。然后其次第三方打码的话,我们分别有像目前常见的是羽马,然后像超级鹰,这两个是在国内还算可以的,当然了,其实目前打码平台其实很多啊,目前海外的话也有很多打码平台, 对吧?等等,明白吧?这个地方你们进去注意,那么在这里这个识别比较简单,我直接带你们看一下,我有很多的成品的验证码的识别代码,因为我告诉你们啊,滑块拼图的识别其实在目前市场百分之八十的是一样的, 图片都是识别什么都是一样的,明白吗?为什么还有百分之二十不一样呢?还有百分之二十可能它里面进行了缩放处理, 你比如说缩放或者呃,一些其他处理你要注意,那么在这里我们分别,你看有一个基础识别,这个是通过了。呃,我们可以看一下啊,这个是干嘛?这个是基于我们的 open cv 和朗派,就是把图片请求获得字节,然后转成簇组来进行识别对比, 然后还有个直接是通过 d、 d、 o、 c、 r 识别,然后还有一个是比较高级的啊,这个比较高级的我们先不讲,这高级的里面要计算里面的很多东西。来,我们来看一下啊,我们在这里可以使用这个基础识别,你看这个是 open cv 跟我们的 python 的 一个识别的一个程序, 我把代码放到下面好不好?放下面,那么在这里我们现在去把这个包给导一下啊, import 导入我们的 log, 其次还有像我们的 c、 v i。 好, 那么像这个识别的话,它是一个固定的代码,如果你们有需要的话,你们在这里可以给我点点关注,然后自己去获取就可以。好吧,这个大家自己去获取啊,反正是免费的。这个代码是免费的, 像今天的直播的回放和直播代码,你们有需要的话,你们也可以到时候直接找我小助理去获取好不好?呃,他们抢购的 r、 c、 e 跟团队都是。 呃,这个的话我们先不做这一块了我们先不做这一块了。你如果想做抢购的话,你等明年吧,等明年的中旬的时候,到时候找我们。我们可以做,但现在的话我们不做这一块了。啊,我们现在不做了啊,像大格同学什么。呃,哪里?呃,就是你给我点个关注,就是在我的粉丝群里面加粉丝群, 加粉丝群,在粉丝群里面的话会我的小助理,然后会有个链接,你们点击添加就可以了,我给大家发个福袋吧。好吧, 对吧,我给大家发个。好,那我们来看。那么在这里这个代码的话我们首先要改一些地方。要改什么?我们要改里面的。呃,奇说百老不改也没事啊,它里面分别有两个地址,你们要注意,分别是我们的划派图 跟我们的背景图,就是你们的这个顺序不要写反了念吗?然后在这里面的一个请求,这个里面的请求是没有 had 字的,我们可以给他增加一个 had 字, 因为这样的话它的请求会比较好一点啊,我们可以增加一个 hide 者。好, ok, ok, 之后这个代码我们直接可以调就可以了。来,我们分别把我们当前,你看一个是背景图,背景图是我们的第二个参数啊,你看我们传一下来,背景图是第二个参数。 好,没问题。 ok, 之后我们使用 print 来打印一下,我们看一下它能不能识别成功 的二零七,对吧?你看这没有问题,这不可以成功识别,对不对?呃,你那里有 s t 的 课程吗?呃,你现在学 s t 吗?北极光,不应该啊,你现在,你现在应该才学到混淆的处理吧? st 的 话,你现在做反混小是不需要学 st 的, 你可以用一些在线的还原就 ok 了。你,我给你一个网站,北极光我给你一个网站,这个网站你可以直接去做那些 st 的 反混小的根本不用学,你等到你后面做纯算的时候你再学明白吧,你做纯算的时候再去了解,到时候你可以我可以推荐你去,到时候去呃,蔡老板那边学一下, 我把这地址发给好,然后我们来看,那么像在这里。 ok, 之后, ok, 之后的话我们在这里你看是不是就会得到一个距离?这个是谁?这个是我们当前的 x 的 一个坐标, x 的 一个坐标, x 的 一个坐标啊,就是我们的那个方块图到背景图缺口部分的一个 x 的 一个坐标,晓得吧? ok, 那 么 ok 之后,那么我们现在我们将来进行第三步,也就是验证码的验证,先把这个断点都给它放掉先。这是当前刚刚调试的啊, 刷新一下。哎,它这个地方刚刚告诉我们有个 id 无效。哦,这个 id 是 对的啊,但是这个 id 我 跟大家讲一下,这个 id 应该是变化的, 对不对?你看嘛,二零二六年的一月六号嘛,对不对?你看一月六号嘛,然后是下午的几点钟几点钟嘛, 对不对?你看下午刚刚我们是应该是这个后面应该是时间戳什么的,这个地方应该是变化的,只是可能今天不变,明天变, 对吧?它应该明天就变成了。呃。七号,后天变成了八号,对吧?它应该会变,所以你们注意一下这个参数应该是变化的啊,然后下面这个也是一样的,你看这个 request id 它可能也是变化的, 只是说他可能是以当前的日期来作为变化,所以说我今天去处理他可能不变,但是如果我们在后面看我这个回放的同学们,对吧?你可能你的日期跟我现在日期不一样了,你可能是八号、九号甚至十几号了,那你们就要注意他可能就是变化的啊, 晓得吧,所以你们要注意啊。好,那么在这里我们现在来做验证码的验证,首先记住做验证码的验证,先获取验证码,然后再来验证。为什么要这样做?因为我怕他里面有什么参数,可能是需要一致的,明白吗?来我们看一下, 在验证码的验证接口里面,你看首先它里面会有,你看有个签名,呃,然后这里这个地方应该是我们的轨迹,或者有可能是我们的坐标,然后这里有个验证的 tokyo, 五一九 d 三四 a d 这个是什么?五一九 d 三四 a d 我 看一下啊,是不是它返回的 ok? 是 不是?朋友们是不是 ok, 对 吧?纯算能做的是不是补环境扣代码一定能搞?纯算也不需要学,不需要学也行吧。呃,纯算的话其实你们在前期我可以告诉你们在做逆向的前面的两到三年的阶段其实搞不搞都无所谓,明白吗?现在其实市场对于纯算的要求没有那么高, 对吧?没有那么高的,因为现在你基本,如果你能搞存算,基本现在目前市场基本都算是大佬。 ok, 那 我们来看,那么在这里大家请记住,在验证码的验证接口里面啊,它里面的这个值是对等的,我们的获取验证码里面的, ok, 对 不对?然后还有两个加密签名加密和轨迹加密,那这个是我们的轨迹坐标什么的。 来,那么在这里我们直接复制 c u l, 我 们现在来做我们的验证接口, 我写个注。是啊,验证码验证,我写两个话哈,不然我怕你们等下带了区分不了,我在这里我去 去区分一下啊,稍等一下,区分一下。 好,那么在这里的话,我们现在你看,我们来处理,首先这里有个 t 值,这个 t 的 话,反正,呃,时间戳吧,对不对?呃,刚讲过了啊,这个时间戳的话我们等一下再去处理,因为我们要考虑到这个时间戳它是否跟我们的请求验证码的时间戳是否同步,如果说它是同步的,那我们就要注意了,四四五八八是吧?呃,是不同步的, 对吧?是不同步的,但是不同步,但是我们刚刚会考虑到我们刚刚在做获取验证码的签名的时候,它里面的签名是不是跟它要同步,是不是?所以大家要注意,那么在这里我们现在将分别的来处理,首先这个 topic 可以 直接替换 这个 tokyo, 对 应的就是我们的获取验证码里面的 tokyo, 然后在这里我们分别把这两个密文先给它删掉,因为我也不清楚它干嘛的。来,我们来分析一下它的这两个加密,分别是先看一下签名吧,好吧,签名会比较简单一点。来,我们先看一下签名,看一下它这个签名是怎么来的, 来加密位置应该是一致的啊,我们打一个断点给他来进行验证,拖拽验证,那么当我们去验证的时候,我们观察一下它的 root 参数,也就是 a 值,在它的 root 参数里面我们可以看到它的轨,它的轨迹是已经先被处理好的, 如果说这种它的轨迹是先被处理好的,那么我们就要注意了,我们就要先处理轨迹,我们不能直接处理签名,明白吗?我们要往上推,看下轨迹是怎么处理的,我们向上推一下, 我们向上推,向上推的话是还是生成好的,看到没有?一个 n 值, n 值我们继续走,你看它这个轨迹是生成好的啊,我看一下这个轨迹是在哪里生成的,我们向上推,上面怎么都是叠带啊? 欸,它这个都是深深,好的,看到没有? n, 来我们看一下啊,它这个地方它的轨迹都是加密好的啊,所以我们要往上推,呃,在这里看到没有?你看 对不对?这个地方是不是我们当前的这个轨迹的一个加密的一个位置,对吧?它是对,我们的坐标是它这个应该没有轨迹,它只是对里面的坐标什么的做了一些计算,看到没有?你看我们把这个代码复制过来了,外面用了 y 的 加密,这个 y 的 加密有可能也是我们的 a s, 它这个时间戳还做了计算, cs time, c o s time, 你 看这个四六四也是变化的,这个四六四,大家请看啊,这个四六四它也是变化的,你看它有很多变化的地方,你看这个四六四是用当前的时间说减去了 t 点十二 time, 这个地方是干嘛的?这个 t 这个 time 我 不知道哪里来的,我们等下去看。好吧,我们等下去看。 呃,我们发现它里面有很多参数是变化的啊,各位你们要注意一下啊。好,那么现在我从我直接在这个 gsm 里面写吧,好吧,我写在下面,下面的话是进行我们的验证码验证的接口加密, 这个难度其实说实话还是挺高的啊,这个应该这个网站,这个当当网的这个逆向,说实话,它的整体这个验证码做下来差不多要个一千二,一千二,一千三,一千四的样子,差不多是要的, 来我们来看一下,那么在这里首先我们可以看到它有一些特殊的参数, t 点 left t 点就,哎,这有个 y 值,朋友们,这个 y 值好像, 然后有个 in swap key, 哎,这不,这不都是我们的获取验证码里面所传的值吗?你看获取验证码接口里面返回的值, 对不对?首先我们可以来分别来测试一下,看下面的断点,放掉 这个断点的话,我们先把它隐藏,你看哦,首先我们来看一下这个是验证码的加载,在验证码的加载的接口里面,它会有这些值,对不对?我们把它截个图标识一下, 好先放到一边,然后我们进行验证码的验证来断点,然后当他断点之后,我们来对比这些值。首先 t 点 left i 三六,这个 i 三六应该就是我们当前的坐标,就是我们的方块图到背景图,它里面缺口位置的距离, x 的 距离,对不对?然后其次这里 t 点 这个 y, 我 看一下零点四五是不是这个 y 值?哦,你看是不是这个 y 值哦?然后这里有个 in trap k, in trap k 是 不是他,你看是不是他?能看明白这几个值不?朋友们,你看坐标,我写一下,哦,这个地方我写一下,你看这个 t 点 left, 对 吧?坐标, 这个是服务器接口里面返回的 y 值,这是我们的 intoken, intokenkey, 你 看是不是这样的一个格式,那么这个 y 值,这个 y 值,我们现在的话,我们正常来讲,我们是不是我们少了一个步骤,就是我们上面没有提取,看到没有?我们上面没有提取,我们把这个 y 值给它提取一下, 对吧?我们要把里面这个 y 值给它提取出来,就是获取验证码接口里面的这个 y 值,我们需要用到,看没有,是吧?需要用到的好,其他的应该没有了吧?然后 in chapter k 我 们也需要使用,好,那么在这里我们现在我们是不是再把这个 y 给它找到就可以了? 哎,这个 y 的 话我们是有的,这个 y 它里面掉的也是 a s, 你 看选机进去,你看是不是一样的指令,要不一样加密是一样的,那么在这个地方我们现在是不是就 ok 了?这个代码我们是不是可以直接封装呢?你看我们直接把它封装, 这是验证,然后我们在这里需要来接收几个参数,你看,首先坐标写写个名称啊,这样你们看得清楚一点,坐标,其次 y 轴以及我们的 key 是 不是这样的, 然后这里当然了,我们这个地方现在返回的是不是就是我们需要的第一个结果?你看我们返回的第一个结果,我们直接在这里写啊,来等于 e x e, 呃,已经执行了啊,我们直接使用它来调就可以了,我上面也是执行了的,来我们上面这个地方我们是已经执行了,看到没有? 我们上面这个地方可以改一下,不要把它连在一起写,连在一起写的话说实话就有点不太好,我们这样写 就把它拆开嘛,把它拆开,那么这样的话,我在这里我改下这个名字, 免得有问题。好,然后我们像在下面这个地方的话,我们就直接使用它点 com, 对 吧?点 com 我 们去执行,你看一样的啊,就是点 com 看到没有?一样的啊?点 com, 我 们去执行里面的主方法,去执行里面这个验证 就算了,然后入我们的三个参数,坐标 y 值和 k, 哎,少个 y 值, 坐标 y 值和 k 没问题吧?那么这样的话,我们现在是不是就可以成功的得到它了?我们在下面去打印一下好不好?我看一下,我们一个参数一个参数去验证,你看我教你们搞王八啊,是不是它没问题吧?你看请求。 哎,上面报错了, 我这个地方 点 com 卖一二三。嗯,稍等一下啊,我们上面这个地方出错了啊,上面这个地方看什么过期的啊?注意一下,看一下是什么过期的?过期的。 这个 round key 是 动态的,各位就是我们,你看我们进行测试,你看我们搞着搞着,我们会发现它这里面的这个 key 是 动态的,看到没有?它是变的,它是变的,它过期了,所以我们在这里,你看,我们可以去看一下啊,你看,我们先把断点放掉来放掉。好,你看它是变化的, 它是变化的。你看在获取验证码的接口里面,你看它是变化的,你看我们进验证码刷新刷新断点是变化的。 g s 七 y, 这个 g s 七 y, 我 们看一下它是怎么来的啊? 我们试一下,我找一下。这个 g s 七 y, 我 看一下它是怎么来的啊?来全区搜索没有,那就很奇怪, 它是动态的,但是现在又没有来源,不可能的,我们可以搜索一下。我看一下啊,我看一下跟它的这个接口有没有关系?这个接口里面有返回信息吗?什么都没有是吧? ok, 它这个 key 过期了, key 过期的话,但是我们并没有看到它获取这个 key 的 位置,对吧?就这个密钥,这个密钥它是动态的,你看还要改, 好像不只是 k 过期,那这个 k 好 像有很多问题啊。朋友们,来,我们来看一下,我们先把所有断点先放掉, 我们来到我们的签名的这个位置,这个地方有点问题啊,朋友们,你看,我刷新一下,我看一下,我看一下。这个 k 是 怎么来的啊?那这个 k 过期了,嗯, 然后我们看一下。这这,它里面这些参数应该也是变化的,它过期了,我看一下。四二四九九四四 a d c 变了, request id 变化了,怎么看?没变化一样,这个变了,各位变了变了变了,这个地方变化了, 这个地方变了。四 a d c f b c 四,这里是五零六,你看是不变化了。时间戳他屁股后面这个是一个时间戳,这个是二六年一月零六号, 一月六号啊,一月六号,然后屁股后面的话,这一串应该是一个十五点,应该是三点,应该是我们当前的时间吧,或者是时间戳吧。各位,你看车变了,看,没有这个 request id 它也是变化的,那么我们就要注意这个 request id 变化,它怎么来的?我们向上推, 我看一下啊,我们刚刚其实我们是可以看到我们的 a 值的。我向上推一下啊,我看一下我们的 a 值是怎么生成的啊? 没有了,这里只有个 n 值,我看一下 a 值是在哪里。赋值的朋友们,稍等一下,我看一下它里面的值是怎么来的,很奇怪,对吧?这个地方很奇怪,我们来看一下它变化到底是怎么变的啊? n 值,它是在这里复制,在这里复制的,你看啊, d 值里面的 request id 这个地方有获取的值的位置。 d 值,这个 d 我 看一下是怎么来的啊? d 值, d 值是一个大对象, 我们去全区搜索一下,我感觉跟它上面那个接口有关系,我感觉它跟这个接口有关系,但是这个接口里面返回内容都没有,对不对? 二零二六, 好像跟它前面这个地方有关系,大家请看,只是后面这个。这,这,呃,后面这个不一样的,后面的不一样。我看一下啊,这好像跟 cookie 挂钩,我们生成一下啊,稍等一下,我把生成一个 c o l 看一下, 这个 cookie 是 二零二六零幺零六幺四二七幺六五七七零,对,这是请求 cookie。 哎呀,它这个地方我看一下跟谁有关啊? 跟它应该跟这个接口应该是有益的关联的,因为它是变化的,对吧?这个地方你们要注意啊,这个是变化的啊,算了吧,走, 但是他这个地方,他这个地方应该是一个时效性参数,所以朋友们你们千万要注意啊,他是一个时效性参数,你也可以直接手动改掉,改掉他应该肯定也是可以的,改掉肯定也是可以的,但是你们要注意, 你看他是一个时效性参数,对吧?他是一个时效性参数,所以各位你们要注意啊。好,然后我们看一下下面,下面这个地方,我们可以看到下面这个地方,我们打印我们的这个地方是没有返回的啊,所以我们要把它返回一下,哎,对碰返回它, 然后就加密,把轨迹加密搞好了,你看这是轨迹加密,然后轨迹加密好了之后,然后我们再把这个签名给它搞上,然后就搞定了。记住这个时间戳啊,这个时间戳我们记得把它替换一下啊,我们可以在下面重新去生成一个选项, time 二等于,对吧?把它替换,记得请求参数里面,请求题里面要加个 string, 然后下面的话,我们将来生成我们的 c 血, c 血的生成其实就是基于这些参数来进行生成的,我们可以看一眼, 主要核心是这个地方,它里面这个地方应该是变化的,这个变化的话我们的前面是可以看懂,但是后面这个 x l j 六这个地方就不知道它是怎么来的, 对吧?你们要注意啊,这个地方你们要注意,你们自己客户到时候去分析一下吧。好吧,我后面到时候我也去看一下来,然后在这里我们需要做它的签名的一个加密,签名加密这里打上断点来进行滑动,然后断点,你看里面的 a 值,它里面现在只是说白了只是对象不一样而已。 ok, 你 看是不是它里面无非就是跟前面的加密一样的,它跟这个加密是一样的。各位,它跟这个加密是一样的,只是说它里面的对象是不一样,是吧?它跟你们对象不一样,那么这个地方我们可以重写一遍,也可以了,可以重写啊,因为我们防止 k 不 一样啊, 你看这个地方我们改成验证的 c 写啊,验证的 c 写,其实你们可以不用这样写,其实白了是为了让你们看得清楚, 其实你们可以直接调,可以直接调,这个方法只是把这些 data 给它改一下就可以了啊,好吧,但我用这种方式的话,主要是为了教一下同学们啊,让你们看得更加清楚。来,然后这里把这个改掉, 把这个改掉。但是记住我们把这个改掉的话,那我们现在的话需要把这个梯子啊,要格外的注意啊, 然后这个 token 也要改,然后他也要改,这样的话改得比较麻烦,对吧?我们这样改的话改得比较麻烦, 其实我们可以直接把这个接收 data 由 python 传过来算,但是 python 传过来的话,你们要注意这个梯子,这个 time time 的 话,我们要搞成整数,然后这个地方这有个七百八十四,这个七百八十四也是动态的,这个地方我们也要去做计算, ok, 呃,这样的,我们看一下这个地方计算的话,它的计算值标准是在刚刚的计算,我刚是打断点的,我找一下它 在这里吧,它这个地方的话会由一个当前的时间戳来减去的。一个什么时间,对不对?我们看一下它是谁? t 里面的这个 t, t 是 哪里来的?我看一下 t 啊, 打个断点给他,这两个地方先放掉啊,来我们重新验证一下啊,来验证验证码的验证,来拖拽,然后断点。来,我们来看一下啊,它这个地方处理点,说实话有点东西哦,这应该是我们的开始实验中 四五幺幺四五幺幺应该是我们刚刚获取验证码的。哎,各位,这里有个获取 key 的 接口哇,我找到了,你看这里有个接口,是吧?我们刚刚没看到,你看这个就是这个接口里面它是不是就包含了我们刚刚需要的我们的 wrong key 以及我们的 request id, 你 看是不是都在这里?各位你看, 所以说我们还要请求这个接口,你看我们还要请求一个接口,你看 这地方大家能看明白不?应该没啥问题吧?你看这里我们还有个接口,我们还需要去请求这个 get run down 这个 run key 值来获取里面的 key 和获取里面的 request id, 然后把它进行替换,然后才可以。 它总共是要请求三个接口,获取 k 和 request id, 然后获取验证码图片,然后再是做验证码验证。 ok, 非常熟一点啊,里面轨迹其实是没有的啊,它里面的加密的话,其实就是一个 md 五加密和一个 a s 加密,你看都没什么东西,看到没有?这个都没有什么东西,你看这个一千块钱到手了,朋友们简单吧。

这是一堆字符,复制到 python 中,然后回车就会抓取对应网页的内容,如果可以自动保存信息,那整个过程就叫做网络爬虫。 理论上来讲,网络爬虫可以获取网络上几乎所有的信息,但是因为爬虫而踩缝纫机的人却不在少数。在网站的根域名后边加上这一段字符,然后回车我们就可以看到这一份君子协议, 他是网站管理员给爬虫写的一封信。在 b 站的君子协议中,他默认各大搜索引擎的爬虫随意的抓取,但也禁止了其他的所有爬虫。君子协议嘛,防君子不防小人。而本期是 python 的 爬虫入门级内容, 目前这些很行的知识咱还是摸不着的,但至少看完本期内容,能让你对爬虫有一个基础的认识,能对这一大堆字符有一个大致的了解。本期我们使用页卷编程来开始今天的爬虫入门级内容。 开始之前,我们先考虑这三个问题,然后进入网络爬虫的学习。网络爬虫的英文是 web crawler, 它可以根据一定规则自动抓取网页的信息,它就像一只在网络上爬行的蜘蛛,所以也称为网络蜘蛛。 之所以可以抓取信息,还是因为日常所浏览的网页几乎都是由源代码构成的,因此爬虫获取的内容就是浏览器解析之前的源代码。我们设想一下, 如果我现在想知道榴莲味的口香糖值不值得买,我可能要手动去找相应的评价。对于爬虫来说,它可以自动化的抓取网页的内容,然后提取之后保存在文档中,这是不是大大节约了手动搜索的时间呢? 网络爬虫的英文 warp crawler, 也叫网络蜘蛛,它只能获取网页中存在的信息,所以选择 c 项。对于每一个网页来说,想要访问它就需要有唯一的链接,那这个链接也称为 u r l, 左右两段是不变的,可变的是中间的主记名,这也是 u r l 的 规律。 主机名不同,那访问的网页也就不同。一般我们访问的网络资源是存储在服务器中的,服务器的种类有很多,浏览网页所需要用到的是 web 服务器。接下来我们看一下 http 协议,它就好比快递公司定义了客户和仓库之间发送快递的内容和步骤。 在这个网址中我们会发现多了一个 s, 它对应的英文是 secure, 安全的,它在之前传输的上边加了一层保护,使得传输的数据更加的安全。接下来我们学习一下请求和响应。如果现在静静买了一件商品,但是觉得不合适,他要换货, 那他需要先寄快递,然后填写换货的信息,发出快递给到仓库,仓库会根据请求的换货信息来进行执行,处理完之后会返还给静静,这个过程就叫做请求和接收。静静告知给仓库的是要更换的商品和尺码, 仓库验收之后再把匹配的商品尺码发送给静静,这就完成了一个信息接收的闭环。在 http 协议中也是如此,发送请求,告诉 web 你 想要的数据,然后 web 服务器会根据收到的请求进行执行,并返回 http 进行响应, 最后会把收到的数据解析成网页展示出来。接下来我们看一下状态码,这一章节并不需要特别的记忆, 网页可以正常打开,那它的状态码就是二零零,相比于这个四零四更为常见,有时也会出现五零三等等。 看到这里还有有多少小伙伴呢?如果觉得有点累了,可以休息一下,接下来我们继续使用页距编程来学习 requests 模块的安装和导入。 小伙伴需要安装 python, 在 这里我安装的是三点九版本的,安装好之后按 win 加 r 输入 cmd, 然后会弹出命令提示符,然后进入 p i p install requests, 然后回车就可以安装了。这个模块的作用是用于网络数据的获取, 爬虫爬的是网页中的内容,那我们就需要网页的 url, 我 们需要把网页的链接复制给 url, 这里需要注意的是等号两边是有空格的。然后我们需要引入一个全新的 requests 点 get 的 函数,它可以模仿浏览器请求网页,让我们使用 requests 点 get 请求之后会得到一个回应。二零零大家应该很熟悉,这个是代表成功的意思, 有时候请求网站也会出现异常,这个是 h t d p s 协议造成的,需要在请求的时候加上一个参数,就可以忽略证书的认证了, 我们尝试一下,最后运行就得到了 response。 二零零说明爬虫是可以正常访问到这个网站的,接下来我们学习 html, 它的全称是超文本标记语言, 主要是来定义网页的内容和结构,它是由一系列的标签组成的,这些标签用来标记内容,块儿分为成对出现或者单独出现, 在成对出现的标签中,开始标签和结束标签的差别就是结束标签中多了一个斜杠,这些都是成对出现的标签,单独标签,如 br 这个是换行的一个标签。接下来我们需要安装一个 beautiful soup 模块,这个模块的安装和 request 的 安装非常相似。 在 cmd 命令提示符中输入 pip install bs 四就可以进行安装了,它可以从网页中提取想要的数据。我们想要使用 bs 四模块中的 beautiful soup 类,需要使用 from import 从 bs 导入 beautiful soup, 用代码表示为 from bs 四 import beautiful soup 导入之后,我们需要尝试使用这个模块来解析一段 html 代码,复制给 html beautiful soup 这个函数可以把不标准的 html 代码重新更正。在创建 beautiful soup 对 象时, 需要传入两个参数,一个是 html 文本,我们用变量小写的 html 表示。一个是解码器类型,我们使用 l x, m l 来表示。 解码器是有双引号的,这里需要特殊记忆一下。然后我们将 beautiful super 对 象复制给 super 之后,就可以解析这一串 html 代码了。如果能看到这里,那是真的不容易,真的挺厉害的。接下来我们使用一些编程来创建一个 beautiful super 对 象, 传输变量 html 和解码器 l x, m l, 然后复制给 super, 那 么 super 等于 beautiful super 括号。把这一行代码敲一下,然后 print 速步运行一下,就得到了上面的内容。接下来我们尝试提取这三段文字。在这几段话中,两边的标签都是 e m, 那 我们就需要用到一个全新的函数来查询符合条件的节点, 它是 find 函数。如果我们想获取 h 一 中的内容,那我们在速步中查找名字为 h 一 的节点,然后复制给 ps, 然后 print ps, 就 得到了标签 h 一 的内容 变量。 soup 是 beautiful soup 对 象 find out 函数,可以查询 soup 中符合条件的元素,并排列一个列表赋值给 ps name。 参数是可以忽略的,我们也可以直接传入参数值。这些内容没有什么技巧,它们都是人为定义的,有了这些底层的逻辑,才能够更好地理解下面的知识点。 在 html 的 代码中,我们可以看到三句台词都在 e m 标签内,我们使用 soup 点 find, 然后在里面填入 e m 节点 来提取所有的包含 em 节点的内容,然后复制给 content 哦,最后 print content 哦。运行之后就得到了 em 标签中的所有内容。如果你看到了,现在是不是觉得离成功不远了呢?我们只需要把这些标签去掉就可以导出了。我们先通过这道题回顾一下整个过程。 首先使用音炮导入 requests, 然后从 b s 四中导出 beautiful soup, 然后把网址复制给 url, 然后发送请求复制给 response, 之后把服务器给到内容转换为文本 t s t 之后使用 beautiful soup 读取 html, 添加 l x m l 解码器,复制给 soup, 然后使用 findout 去查询 soup 中的 em 节点, 之后复制给 content 哦。最后使用 print 输出 content 哦,然后运行就可以得到 e m 节点中的所有内容了。在上面的内容中,我们提取了内容,但是两边都是有标签的,我们就需要想办法获取标签内的内容。这个时候我们需要用到 string 属性来获取节点中的内容, 但是由于 find all 返回的是一个列表,我们不能够直接调用 string 属性,所以我们需要使用 for 循环便利列表来获取每一个节点的字符串,再调用 string 属性来获取节点的标签里的内容。我们使用 for 循环便利 canton all 获得完每个章节中的标签的内容,然后复制给 content stream, 最后用 print 输出,这样我们就得到了视频开头的画面,看视频的你如果能看到现在这些字母应该不再那么冰冷了吧? 再回过头看这三个问题,我想你心里已经有了答案了。也许编程这门爬虫入门课讲解的非常细,从一开始的名词解释,再到慢慢的 request 模块的安装, 网址的赋值,再到 beautiful soup 模块的安装, find 函数节点的查询,整体的这几节课下来,真的是由浅入深,非常适合想要学习编程而又无虫下手的小伙伴们。 当然后边的内容还有很多,如果小伙伴也比较喜欢 python 的 爬虫课程的话,请用你的点赞投币、收藏、转发来告诉我,我也会。

三十分钟超长技术干货教学,带你十八式搞定 spare 霸的第十二题,深入学习前端加密解密方式以及混淆处理的办法。 nice, 更多爬虫逆向教学视频项目接单教学直播,我都放在了我的抖音粉丝群,兄弟们可以直接进群获取。然后在 c 十二这里我们先来看一下需求,主要是抓这个 macbook 十四, macbook m 四的商品价格,哪个是商品价格?我们看一下啊,有一个 plus, 三个九, ok, 这个地方是商品价格, 那么这里的商品价格我们同样的看一下,有没有翻译啊。 ok, 他 没有翻译,那这种没有翻译的情况相对来说啊,会方便很多啊,但是在这里面可以看到啊,我们右击啊, ok, 这个右击是不是右击不了啊? 那接下来我们直接通过这里啊,更多工具,打开开发的工具,然后再来刷新, ok, 刷新之后我们来找一找啊,他这上面的数据啊,在哪里?之前的断点痕迹我们先闪点。 ok, 数据在哪里?然后这里面有一个启齿架啊,适合学生和日常时间。我们来搜索一下这个数据,他这面好像是不让复制啊,我们手动打一下启齿架, ok, 搜索启齿架,发现启齿架没有任何提示啊,那也就是说啊,这上面的数据很有可能是什么情况的? 密文,密文解密的结果啊,能理解吧,很有可能是密文解密的结果啊,所以说我们搜索这上面的数据搜索不到啊,那接下来我们来观察一下这个数据的包啊,数据接口是哪一个啊?来找找啊,数据接口可以看到啊,这里面是密文对吧? ok, 再看下一个一步的, ok, 在 这里面他也是密纹,看到没有? ok, 我 们来看一下这个密纹的长度啊,来推断一下我们要找的是哪一个啊?这密纹的长度可以看上去啊,也是有点长的啊, 为什么要看这种长度呢?因为他这上面的数据有这么多啊,那对应的将这些数据全部加密起来,那他的密纹是很长的,能理解吧? 如果密文很短啊,那他就对应不了这份数据的加密,那么通过对比的话,我感觉啊,这一个数据包对应这里的数据密文呢,可能性高一点,为什么呢?大家来看这啊,他还有一个显示更多啊,十七点九点 kb, 那 也就是说啊,这一个密文它是最长的, 这个密文是最长的,兄弟们,那对应这里的数据呢?应该是刚刚好的,那么接下来我们就直接来修什么呢?可以先来看一下这个加密的特征,兄弟们,这个加密的特征你们想到的是什么加密算法, 给个解释啊,这个地方有个等号结尾,看到没?有个等号结尾啊,那么有个等号结尾啊,就不要单独认为是什么 face 四啊,没这么简单啊,顶多是他加密过程中啊,用到了 face 四,我们也可以尝试用一下这个 face 四啊,来给大家解个密,来看一下子,绝对是行不通的, ok, 有 车对吧?是行不通的,那么对于这种类型的加密,我们基本上啊是可以把它判断的范围啊,给它缩小的,缩小它的一个范围,也就是它用的是什么加对应的加密啊, 那绝对就是 aes 或者是 ds 或者是 rsa, 对 吧?无非就这几种。那关于这种类型的加密,我们可以直接搜索加密关键字,或者是搜索解密关键字,重点就看什么,重点就看你要干什么事情。如果是搜加密关键字的话,你就直接搜它,这个是加密关键字, 那如果是搜解密关键字的话,你就直接搜他就可以了。那么同样的啊,在这个地方,我们就直接搜索他, ok, 那 么接下来啊,展开一下搜索,加个冒号。兄弟, 那通过搜索,我们是得到了三个结果啊,这三个结果的位置啊,我们都给他来上一个断点, ok, 都给他来上个断点, 这是最后一个了,嗯,这最后一个和第一个怎么是一致的? ok, 那 断点啊,我们都全部打上了啊,那么打上断点之后,接下来再来刷新一下, 为什么刷新呢?因为他只有一页啊,我们要让这里面的数据重新啊,渲染加载一下,所以说就只能够通过通过什么,通过这样一个刷新来操作了, 那么可以看到这一个断点现在已经触发了,那么接下来回到他的上一步, ok, 回到上一步,回到上一步啊,我们就基本上已经知道了他是属于什么加密 aes, 对 吧?然后在这里呢执行 aes 的 解密,对吧? 别人 app 反面之后呢?能增加功能吗?老师,增加不了的,这个 app 不是 你开发的,有些功能它是要对接服务器的。老师, 那么对于这种位置的代码有一点点混淆啊,这一点点混淆啊,老手啊,这点混淆啊,对他来说啊,很简单,但是如果你是新手的话。兄弟啊,这一点点混淆啊,他也很简单,为什么他是 o b 类型混淆, o b 类型的混淆是可以解混淆的, 我们只需要有一个解混淆的工具就行了,那么在这里面我们先进入到解混淆的工具, ok, 这两个解混销平台我们都来一下,因为解混销你玩的多了,你就知道啊,这种工具解混销啊,他也有可能解出来的是错的,兄弟们,那关于这一点啊,兄弟们一定要注意这个问题,那么接下来我们直接将解混销的代码 放在这,我们接下来再来看一下找他解密的代码, ok, 通过结果一下,我们发现这个代码是不是有点少啊,有点少啊,那接下来我们就来阅读一下啊,这一份代码啊, 首先在上面啊,拿到他的一个什么东西啊,在上面拿到他的一个结果,应该是拿到的结果,拿到结果之后呢,这里面这里面提取了一个币啊,这个币我们来找找,看一下能不能找到。提取了一个币, ok, 这里面提取了一个 b, 这是有一个 b 的, 那下面的这个数据接口呢?这个数据接口有没有 b 数据接?这是数据接口啊,这数据接口里面没有 b 啊,那这个地方是不是我们要找到呢? 不太清楚啊,不太清楚,那我们接下来继续往下拉, ok, 他 这里面如果要做解密的话,一定会提取他,对不对?因为他定的是立稳啊,我们来搜索一下,看有没有这个字的, ok, 这个字还没得, 这个字还没得,兄弟们,这有点牛逼啊,这个字还没得,那他的解密是在哪个位置做的解密动作呢? 关于这个问题啊,如果你实在找不到啊,我们再来回,回到什么哪里呢?回到他的一个解密的位置,然后想办法来看一下他的密文我们能不能找到。 找一找他的密文,如果他的密文我们能够找到的话,我们也能够锁定我们当前解密的这一个密文是不是我们要做的一个操作。 ok, 这里面断一点我直接放掉就可以直接放掉,这个地方的断一点不要了,直接放掉,放掉之后这里有个断点也放掉。 ok, 然后我们再来重新刷 新一下,再给大家发个图片就可以了。 ok, 然后我们再来重新刷新一下,再给大家发个福袋就能。 现在断点我们只有一个了啊,有没有福利?刻件插件 有没有福利啊?福利就左上角的福袋。兄弟啊,刻件的话,刻件的话没得啊,可以给你一点什么教程啊,教程是没得问题的,可以给你点教程。插件的话有一个插件网址啊, 插件网址我给你找找啊,插件网址啊,户口脚本,户口脚本这个网址呢,就是全部都是你想要的这些插件了。老哥,这位小白兄弟啊, 像这个插件的话,这个地址啊有点长啊,你如果懒得自己打的话,你可以干嘛呢?和这个教程一样的啊,进一下我的粉丝群啊,在粉丝群里面找中,你要。兄弟, ok, 我 们接下来再来看一下啊,我们刚刚执行的刷新,他好像这个断点没有触发,对吧?这个断点没有触发,这个断点没有触发,我们重新来搜一个, 我们断点打到这上面,之前打的断点,哎,删,删除错了,之前打的断点,我们直接给他删掉啊,只打这一个再来刷新。 这网站速度的加载有点有点慢啊,断点已经触发了,然后我们再回到它的上一集,这里面是 q 九。 ok, 是 q 九的话,我们来找找它的这个对应的数据包,看一下能不能找到 是 q 九。 ok, q 九在这,兄弟们, q 九在这啊,那也就是说当前的应该不是我们要处理的密文,那么这个断点呢?我们直接跳过,好进入下次断点。进入下次断点,我们再来看啊,这里面有一个 co, 这个 co 的 话应该就是我们要处理的密文了。 嗯, co 是 在这里, co 在 这,这个 co 也有点长, 这个 co 有 点长,我们来看一下它的一个解密的结果吧。兄弟们,看一下它解密的结果。那要看它解密的结果的话, 我看一下这个括号在哪里。 ok, 直接把这一坨,直接把这一坨复制,复制之后来到控制台来输出一下。 ok, 输出之前再给他加点东西。兄弟们,加点什么东西呢?来上一个通知证。 ok, 吐司春,兄弟们,这个地方吐司春有点长啊,这是在做解密吗?有一点不像啊,兄弟们,有点不像。 ok, 这个断一点,我再把它放掉看一下,再把它放掉就没了。那这个数据的解密到底在哪里呢?兄弟们,数据的解密啊, 我们要找的是这个,对吧?那接下来我们来搜索一下它,为什么搜索一下它呢?因为在前端啊,要做,要做解密的话,肯定是要提取这个东西的,看一下能不能提取到。 ok, 搜索之后一共有两个结果,上面这个是接收点,上面这个是接收点,我们来找一找, 这里面怎么感觉都有点不对劲,兄弟们,对吧?有点不对劲,如果是要做解密的话,他这个地方做这样一个操作是没有任何必要的,我觉得,那我们要处理的这个是不是我们要做的解密的一个数据啊? 毕竟我们前面断点断点住之后呢,好像也没找到我们要处理的这两个。 ok, 那 么其他的我们先不管那么多啊,再把这个搜一下,看一下其他的断点会不会触发,再搜一下这个, 这是一个位置,这个位置我们是没有整的断点打到这之前的断点我们直接给它删掉。断点打到这真的断点打到这之后再来刷新。 ok, 这个地方的断点不会触发这个地方的断点不会触发。那他处理这个接口想要的解密是在哪里解密的? 难道是这个数据做的渲染吗?这个数据做渲染我总感觉有点不对劲啊。 ok, 兄弟们,这里面不做那么多的纠结啊,我们来截图看一下这两段密纹,这两段密纹也是不一样的。 ok, 这两段密纹也是不一样的,那就只能因为其他密纹洁面地方啊,没有触发这个断点。没有触发这个断点,那我们就来看一下啊,研究研究他触发这个断点位置的一个密纹洁面。 又是一个爬虫靶场吗?是的,又是一个爬虫靶场,这个是 spa 的 buff。 ok, 这里面的网址加载有点慢啊,再等等, 这也太墨迹了吧。 弹出的登录窗口 f 十二看不到怎么办?弹出的登录窗口 f 十二看不到。没明白你要表达的意思,老哥, ok, 这个页面终于打开了,回到上一集,回到上一集这里,回到上一集之后,我们来简单来看一下这两段代码。 ok, 都已经转成这样的一个字节了,转成字节了,这种情况下该怎么办呢? 我们不是对这段代码已经解过混淆了吗?来这里面来搜,我们现在断点位置是在这里, 那我们要处理的东西啊,就是上面这两个啊,先找到他,找到他的话在上面,在这个地方, ok, 再来观察,还要找到他,对吧?他的话也在上面,在这里,那也就是说我们断点的话要找到这个解密函数, 也就是找到这个解密函数传入的这两个参数是传的什么? ok, 兄弟们,这里面很明确啊,很明确,对吧?传了这两个啊,那传了这两个,我们在本地啊,来构建一下这两个, 这个代码我运行看一下有没有问题。 ok, 多功能怎么的?放了一个多功能的错误,我在想上面的代码能不能删掉啊?上面的代码能不能删掉?我看一下 上面这份代码,我们先给他注射起来,先不要,我们先只要这一个位置的代码,然后把它填充一下。 ok, 那 么接下来呢?接下来我们就来命名一下这两个参数,看一下它解密之后长什么样子。 ok, 先把它拿过来,然后是拿它, 那像这个的话应该就是什么,应该就是 a 和 b 了。 ok, 这两个拿下来之后,我们也来调用一下这个方法,看一下它给我们返回什么, 然后分别传入两个参数,对吧?这里面的 return 啊,我们它已经有 return 过了啊,我们直接来上一个 ctrl 点 logo, 这个函数是有 return 的, 直接 ctrl 点 logo, 它的一个返回值就行了,运行看效果。 ok, 解密之后只有这么一点, 这么一点,兄弟们,这么一点,我们先截个图啊,很有可能这么一点,他对应的是一把钥匙啊,是一个新的力啊,兄弟们,我们先暂时放在这啊, ok, 再来看他下一次的解密动作啊,现在是我看一下啊, 这个地方我们不是只打一个断点吗?这个地方断点不要了,直接跳过 ok, 再刷新一下。窗口是 gs 渲染的吧,肯定有登录接口请求接口不是 gs 渲染,就是原始的浏览器弹出窗口这样比较老的系统了。那比较老的话得看情况啊,看情况来处理了。 ok, 现在断点已经触发了,回到上一级,回到上一级之后呢,再来看啊,它这个地方是在传什么东西啊? 这个我们刚刚已经处理过了,对吧?这个必要是不是一直在变化呀,兄弟们,一直在变化啊,他这个变化是怎么变化来的啊?等一会我们再去整理啊,这个变化是怎么变化来的? ok, 那 么在这里面我们再来跳过一次断点啊,这是第二次断点了,再回到上一节, 这次我们再来看,这次是比较长的了啊,把它复制, ok, 然后再就是复制这个比较长的 粘贴啊,那么接下来我们再来运行看效果。兄弟们, ok, 这就是我们要的这个网页的数据了啊,但是它这里面有一个问题啊,什么问题呢?它这个密钥是怎么来的,我们还没弄清楚,对吧?这个密文啊, s o, 这个密文是 s o s o, 我 们来找找这个结构,看一遍 数据接口啊, ok, 这个是数据接口,对吧?数据接口我们找到了,那他这个密钥是怎么定义的呢?不太清楚,对吧?那么这个断点我们先过点,这里的数据包全部清空,接下来开始找密钥,刷新一下, 解密啊,没得问题啊,解密的代码我们都可以说已经玩玩玩够了啊,解密就是长这样子的,但是它那个密钥是怎么来的,我们还没弄清楚,对吧?那么接下来再给大家瞅一眼,发个密钥 在这里啊,这个密钥是怎么来的?不知道,对吧?我们来搜索一下。 ok, 通过搜索我那个小港区们,它是来自于 cookie 里面的, 它竟然在 cookie 里面,好离谱啊,是不是很离谱?兄弟, 也就是这个值,这个值,那么在 cookie 里面的话,这个值我们是不是找 set cookie 就 行了? ok, 那 么接下来我们再来看这个密钥,我们先把它的解密的结果,它解密的结果是一个新的东西,我们来看一下是不是第二把密钥,它这里面的香的解密是不是要两把钥匙才行? 这是第一次解密啊,这个我先删掉了,这个不需要啊,看一下他解密的结果,他解密的结果应该是第二把密钥,兄弟们, ok, 看一下他第二次解密是不是这个跳过当前段点好,接下来再来回退一下子, 再来看二者对比一下,对不对吧,刚好能够对应上,那也就是说它一共有两把钥匙,一共有两把钥匙? ok, 那 基本上已经懂了,它这里面一共是怎样的逻辑呢?首先啊,在 ck 里面 提取密钥啊,这是第一次解密啊,对,什么做解密呢?在这个地方一共有两个数据接口,看到没有?先对这个比较短的啊,做解密啊,也就说先解密接口的 b, 然后解密接口接口的 b 数据, 拿密钥,对吧?拿新的密钥啊,这个地方来上拿拿新的密钥,真的,那么这个密钥拿到之后呢?再解密什么?再解密?再解密 a, 再解密 a 数据,然后就是最终的一个过程了,那么这个过程啊,有一个问题啊,就是这个 c k 里面的密钥我们怎么取的? 如何取 ck 里面的密钥? ck 里面的密钥,它有一个,就是这个万字,也就它啊,它是密钥,它这个密钥是怎么来的?那么接下来开始来重点来看 ck 里面的密钥是怎么来的,这里面的断点全部跳过啊,不需要了,然后接下来再来走花心, ok, 我 们让这里面子弹飞一会行吗?有点墨迹啊,他,他的防御有点墨迹, 这也太墨迹了。兄弟们,我们在这个页面刷新一下, 这个断点全部跳过啊,不需要。 ok, 再来看 ck 啊,它这里面 ck 力要应该是变了,变化了,那么这个值是怎么来的?我们现在全区来搜一下,搜完之后呢?找 set 口给, ok, 兄弟们,这个地方,这个地方这个力很有可能是 gs 生成的,而不是互断给的。 这个地方搜的话没有任何的结果,很有可能是 gs 生成的,不是后端给的。我前面的判断是这个密钥是后端给的,那这个情况,我先把这里面的 ck 啊先给它删掉啊,这里面我全部清空啊,清空之后再来重新加载,看一下它到底是 gs 生成的还是后端给的。 ok, 那 么接下来再来看 ck, 哎,这个密钥跑哪去了? 也就是它,对吧?它把它复制,复制之后再来搜, ok, 兄弟们,这里可能实锤了啊,就是 g s 代码生成的, g s 代码生成的,它不是后端给的,那么接下来我们就要重点看什么?看这个被我们注视掉的代码, 在我们被注视这个代码当中啊,找他,兄弟们啊,找他,他是怎么来的?是通过这一段代码然后转换这个 key 来的,这个 key 的 话是在上面通过这段代码来生成的。 ok, 那 接下来我们直接把 这段代码不要行不行?看一下兄弟们这段代码, 这段代码我们先不要一直到这儿啊,注视掉,注视掉之后来输出一下这个 key, ok, 再来看一下这个可以能不能拿到我们想要的。 ok, 没得问题啊,他就是这么深沉的。兄弟们,那也就说通过这两行代码先生沉力要,当然在这里面这个器我好像没看到他用这个器,没看到他在使用啊,对吧?那也就说这段代码是可以删掉的。 ok, 那 关于这一个必要的话,我们也可以自己封装一个,还是方法,兄弟们,封装一下,然后这里面我们来上一个 a e f g l t, ok, 做一下封装。兄弟们, 那么封装完之后,这里面这一行代码他没有用到,没有用到可以直接给它删掉。这个七,我再搜一下,看一下有没有其他地方用的,我给他在这里面有判断,有判断,不管他了,这个我直接删了,这个直接删了, ok, 那 么他最终的代码就是长这个样子的, return key, ok, 中间这一坨就不需要了, 那它最终的一个解数代码就是这两部分啊, 那么现在我们开始尝试,兄弟们啊,现在开始尝试啊,怎么做尝试呢?先用这个带 ck 的 接口来请求它啊。 ok, 这里面还用到了一个 q 啊,还有个 q, 还有个 t 啊, 还有参数要解决啊,没那么简单,兄弟们,没那么简单。 ok, 看一下这个地方 c k 带上微博的话没有加密,没这问题。那接下来我们要解决请求参数问题啊,解决请求参数的问题。最近在学爬虫逆向,有没有啥资料可以参考学习一下。 老哥啊,想学技术要教程资料的老哥,进一下粉丝群啊,像我这个地方语却文档这些啊,全部分享给你。我也看到有很多兄弟啊,看到我的作品之后呢,后台给我私信啊,说要这个教程资料,你就直接进粉丝群啊,在粉丝群里面拿, ok 吧。 那接下来我们继续来看一下新的问题,这个 q 怎么解决?这个 t 怎么解决,对吧?这个 q 怎么解决和这个 t 怎么解决? ok, 我 估计啊,答案还是在哪里,还是在解混接的这个 gs 代码里面。 那我们把这个二点 gs 打开来看一下这段代码,我们要的 q 和 ok q 在 这看到没? q 在 这啊, md 五 hex, 然后 t 的 话也在这, t 的 话是 t 二。那明白了,兄弟们,这个 md 五 hex 和 t 二是我们接下来要做的操作, md 五 hex 有 个默认值啊,然后 t 二的话在上面, 他这个地方就相当于啊,干嘛呢?打了一个时间差,兄弟们做了一个时间差,如果是大于大于五,大于五会怎样?他这个地方大于五的话 就有这行代码,感觉没啥用,没啥意义,真的,然后 t 二加 k, 这个 k 加上这个 k, 加上这个 k, 然后干嘛呢?又得到了这个 md 五 hex, 那也就是说他这个地方就时间说拼接这个 k 啊,然后做这样一个 md 五,说明那这个 q 的 话就很好解决了。兄弟们,那整个题目我们基本上都已经全部解决了,那么接下来直接啊来组装兄弟们,可能有些兄弟们还是没明白啊,没得关系啊,在组装过程当中我也会继续讲解的。 那么接下来直接啊将前端啊,不是将爬虫给我们生成这段代码拿过来,拿过来之后,首先 首先是什么?首先的话我们要想办法生成它的一个立文参数,这个 ck, 这个 ck 的 话,这个 ck 还是先保留,先保留这里,当然这里面先保留的话,我就直接保留个控制就行了, ok。 然后 c k 是 怎么来的? c k 的 话在一点 g s 里面, c k 的 话就是这么来的,这是在获取 c k 里面的值,那么接下来我们需要导入一下执行 g s 的 方法,然后尾端 这里面我用的是一点 g s 啊,这里面直接啊一点 g s, 然后抖取的方式啊。二,拎扣点一 k 的 杠八 点 com, 然后传入 f 的 位置,做完这一步操作,那么接下来 c k 里面的这个值,这个值的话是这个什么?也就是这个箭头,对,这个箭头,对,直接拿过来,拿过来之后呢,来上一个等于啊, 然后 f 格式化字母二,这里面传入 c d 叉点括,然后第二用什么呢?第二,用这个 a、 e、 f、 k 的 k 方法, ok, 那 么接下来在这里面我们输出一下 h、 d、 s, 看一下 h, d, s, 解决没有? 下面这两部分代码,直接注视点,看一下 h、 d、 s 里面的 c、 k, ok。 再给大家发个福袋,什么狗顿要干我,哪个狗顿 找一找 ck, 兄弟们, ck 在 这里面正常获取,兄弟们,这个值正常获取,当然因为这个 ck 我 们等会要用的啊,所以说这个生成的值呢,我们等会要用的,那么最好需要用一个变量来接收一下它的值, ok, 然后再将这个变量放在这,这一步先搞定啊,搞定之后接下来来看第二步啊,解决请求参数的加密,这里面请求参数的加密也很简单啊,然后呢,它加密过程当中用到了 md 五啊,我们导入一下发行代码啊,不啊,我们直接导入 md 五啊, 王某发行列表导入 md 五,然后 md 五加密也很简单,它这里面是什么?拼接什么?再来瞅一眼, 它这里面是时间戳拼接,这个 k, 这个 k 就是 什么,这个 k 就是 ck 里面的 k, ok, 那 这一步弄清楚之后,接下来时间戳拼接 key, 那 在这里面首先是时间戳,时间戳我们生成一下,导入一下 time, 时间戳来上一个 ts 等于 int, 然后是 time 找 time 乘一千, ok, 这里面我们同样的啊,需要 f 格式化这个块儿,毕竟这个 time 它现在是个 int 类型,对吧?然后再加上什么,加上这个 key 啊, 加上这个 k 之后,兄弟,这个地方我就直接放在这里,不也一样的吗?放在这也是一样的,兄弟们,然后再来上一个点音扣的, ok, 这个 q 参数啊,我们就搞定了,然后再将时间戳 ts 放在这里,这个时间戳长度是不是有点问题啊?兄弟, 我看一下这个时间戳长度啊,他好像是除以一千了的,以表为单位啊,对吧?我们是不是有点长啊?有点长,那么这里不需要乘一千,直接这样子才是合理的, 对吧?然后再将 ts 放在这, ok, 那 这步操作完之后,请求参数啊,我们也搞定了,那么接下来开始发送请求啊,来上一个 u i l 接收一下,这是请求地址, 然后这里的代码直接删掉吧,重新写 request 点,这是什么请求? 这个是 get 请求,传入 ui, 传入 headers, 然后传入请求参数,最后的结果,它是个 json 数据,直接点 json 获取就行了,然后输出一下 response, 那 么接下来运行看效果啊,我们能不能拿到密文,再次一遍, ok, 密文的话,我们已经拿到了啊,成功拿到密文,拿到密文之后开始做解密,那么这里面的解密一共要分两步骤来操作, 那么首先第一次解密啊,拿密钥, ok, 第一次解密,获取密钥,那么第一次解密,获取密钥,我们是要对这里面的 b 啊来做解密,对这个 b 做解密, 那对这个 b 做解密的话,我们来上一个 b k 啊,来接受一下,然后是通过 c 叉 d 要用什么方法? d 要用的是这个方法,把它复制粘贴到这里,利用这个方法,然后需要传入两个参数, 传入两个参数,第一个参数是密钥 k, 也就是我们要传的第一个参数,然后第二个参数就是 response, 哎呀,这里面的自动补全不好使了。点 get 币,这是第二个函数,然后拿到这个 bk 之后,给兄弟们输出,观察一下,这个 bk 有 点慢, 网站速度有点慢啊,其他的都比较顺, ok, bk 啊,拿到了,那么接下来就是第二次减,获取 零,维数据获取零,那么第二次解密,我们来上一个 data, 然后再来通过 c 叉点括。第二,用什么呢?还是调用这个解密方法,只不过传入的东西啊,有区别了,跟你讲,第一次传入必要就是传这个 bk, 然后第二次传入需要解密的就是 resource, 只要 get a, ok, 操作完这一步啊,输出一下 dat, 当然这个 dat 它现在是个什么现,这个 dat 应该是一个伺候判数据,来观察一下, 对吧?它现在还是个字母串数据,那在这里面我们再来导入一下接收,然后再来做一下转换啊,转换之后的话,观察起来会舒服一些。来上一个 datast, 然后最终的 datast 就是 接收点 log 传入 datast, 这样的一个转换操作啊,就搞定了,然后再来输出一下代码, ok, 那 么接下来我们再来看看名为数据,我们能不能成功解密, 这个接口要慢,这没办法。 ok, 数据拿到了,对吧?数据全部拿到了,那么以上啊,则是关于这个 spider buff 的 d c 十二题了, spa 的 bug, d c 十二点,相对来说流程来讲会有点绕,会有一点点绕啊,但是我们目前还是比较顺利的,对吧?操作到这儿,各位兄弟,能不能得到您的认可,点个赞呗!能得到您的认可,点个赞呗!兄弟们。

在 tsp 这个实用工具下面爬取工具在做数据爬取的时候,有可能会出现提示说这个 k 就是已经失效或者怎么样,那这种情况的话,建议大家可以自己去申请一个百度、高德、腾讯这些 k, 让我们来介绍一下怎么申请。高德跟腾讯、百度都差不多类似,比如说我们以腾讯为例,点击这个在线申请密要, 然后这边有三个链接,腾讯的话就点击这个地址链接过去,链接过去之后 这边会让你申请一个开发者账号,如果你没有这个账号的话就申请一下,要简单,反正就账户密码输进去,输进去之后就可以申请出来啊。有了这个账号 之后,那就是点到进到这里面来,就开发这个环境里面进来,这里面进来之后一个应用管理,这边一个应用管理 刚进来的时候应该这里是空的,然后他会让你选什么行业啊?然后是,嗯,还有个什么行业跟那个什么类似信息这些东西随便填,无所谓。 点好之后进来之后会进到这个界面是空的,那我们要创建 k, 那就是这里点击添加 k, 然后 k 的名称也是随意,你自己知道就行。 然后把这个外部基石啊,外部 seven 和那个地图 sdk 两个选上,然后你输入这个 说这个码,点击确定添加 好,那就可以了,创建一个 k 出来了,你可以自己多申请几个都可以。申请好之后你复制个 k, 复制好之后到软件里面来把这个加上去,原本的就私下的话你可以删掉原本,如果还有效,你可以在后面直接加这个,可以多个的点击修改 好,那你下次再进来的话,这边就已经是个好了,那他就会用这个可以来进行下载了。现在我们再来下载的话,应该就可以了,比如说我们这个时候再下载 好,这样的话就可以下载成功了。这相当于用了你自己的 k, 因为你跟我们是从自己本人附带的开的话,这么多人用,因为他每天下载量是限定的,所以也会出现失效的情况,这个是我们这个腾讯密码的一个申请过程。

pason 爬虫从零开始学第三期出示 requests, 不 对呀,这个时候应该有掌声啊, 好,同学们好,我是马可。在上一小段中,我们讲解了利用 request 请求去发送了一个小小的请求,然后获取到了网页上面那个图片。那这节课呢,要给大家详细去讲一下 request 它一个各项方面的一些参数,那回到我们这里 来,这里大家注意它的参数是非常多的,那在这里我们这里列出一些常用的。首先是我们熟知的请求方法,按照我所说的 get 跟什么 跟这个 post 这两个请求方法,重点是我们要看一下它的常用参数来。首先第一个这个参数它是做什么操作?大家在看我们刚才的案例代码的时候,有没有发现一个问题,我们这个代码 除了这里之后来看开看好了,来在这里做问号之后有一段很长的东西对不对?他们用这个不知道是什么东西的符号在拼接是吧? w 等于多少? h 等于多少? c 等于多少? r 等于多少,那他们是什么东西?大家可以理解为它就是查询的参数, 你可以用两种方法来把这个参数携带,第一个是利用来这个参数进行携带,第二个是直接写在 url 的 链接后面,那后面还有一个叫做表单数据的东西, 它是提交保表单或者说普通见值率数据的时候,它使用的是 pos 的, 你可以写一个 date, 以见值率的形式去进行提交,那这个时候就是我们之前所说的账户或者密码来进行操作的。 举个例子,账户或者密码来进行提交的时候就会用这样的方式来进行,那还有一种数据啊,他可能说你在进行请求的时候,你是要去给人家发数据,但是注意 你这里去进行请求的时候,他要要求你必须用的是 jason 的 数据发送给他,这个时候你必须要写 jason 等于多少。 这里有个问题,大家千万不要手动地去写,比如说你写个 date, 自己去把它做一个 json 系列化的操作,不要这样去写,因为这样会导致它不会带这个设置请求请求头,它的 content type 它是不会给你设置的。当你使用 jason 或者说 date 直接去使用的时候, 它会给你设置对应的请求头,它会默认做这样一个操作,所以说跟你直接去手动地去传递还是有很大区别的,这一点需要大家注意, 也就是我们的 headless 请求头了,请求头就是我们前面所说的那些来证明你身份的东西,比如说 u a, 比如说 cooking, 比如说 talking 等等内容, 那这个东西一般来说是必须要带的啊,至少你要带一个 u a 的, 好吧,那在这里我们这个图片它没有这些限制,我们就不带了,后续我们会经常见到它,也经常使用它,所以大家也不用担心。现在我们要先了解一下,再往下走,是一个叫做 cooking 的 东西。 那首先 cooking 是 什么东西?大家可以简单理解为 cooking 是 你的令牌,当你现在进入一个城市或者进入一个地方的时候,一个新的地方,我们拿在古代来说,你必须要有一个证明你自己身份的东西,对不对? 你是哪里人啊?你今年多大?你祖籍哪里的?等等等等,反正诸如此类的问题,那 cooking 其实就代表了你的一个身份信息。那我们如果说去反问一个数据的时候, 或者说访问一个网页的时候,我们常规情况下有两种状态,大家想一下。第一个状态叫做游客状态,我没有登录,没有注册,我作为一个游客来到这个网页,我去访问他们那些东西。 好,第二个状态是登录用户的状态,我是这个网站的用户,我有他的账号,有他的密码,我会登录这个网页去访问那东西。那大家发现了吗?很多网页你在游客状态下浏览一些东西是浏览不全的, 或者说有些东西他会说请登录后查看,肯定见过。那好,如何保存?或者如何叫验?你的登录状态?我如何判断你是一个用户,或者说你是一个游客,就是我们的 cooking, 你 可以携带这个 cooking 来手动定义一个 cooking 参数,在 get 或者 pos 的 时候去携带它,也可以通过 session 来进行自动管理的 cooking, 那 这个 session 后面我会详细的去讲它。 所以大家知道 cooking 它的作用是什么?是保证我们登录的一个状态。我说如果一个接口,一个网页,他要看你登不登录,你得用 cooking 告诉他我是登录的还是未登录的。 那这个东西如果再往下走有个 timeout, 他 是干什么呢?他是超时时间,什么意思?比如说你现在反问一个网页,这个网页等了十秒了,他还是没有给你响应,但是他也没报错, 你能忍吗?说,老师,我能忍,我多等等,我今天有空,这不是你有没有空的问题,注意,这不是你有没有空的问题,你一个网页你等十秒,一百个网页你能等的下去吗?所以说你会指定一个超时时间,如果五秒钟之内, 三秒钟之内,多少秒之内,他没有对你的请求做出一个对应的响应,好,我会报错,他会告诉你连接超时,或者说请求超时了,进行一个报错, 再往下看,那代理是什么东西?我们去进行请求的时候用的是本级的 ip, 但是大家想一下,一个用户会频繁的反问网页吗?有同学跳出来说了,老师,我会 有一个网页,我是他的重度狂热爱好者,我每天起码刷八个小时的视频,或者我要每天起码刷八个小时的帖子, 我狂热,好,你重度狂热,你能做到一秒钟,或者说你能做到一分钟?反问翻页几百次吗?你能做的到吗?你做不到吧,对不对?这一看,不对,这不是超人,要不是超人,要不不是人,是不是?对不对?人家一看,要不你是超人,要不你不是人。 所以说那我们肯定会要进行一个分流的一个政策。什么意思?大家如果把一个 ip 理解为一个用户的话,那多个 ip 其实是不同的用户在访问不同的页面,大家这么简单去理解就可以了,所以说使用代理是非常有必要的, 那如何使用代理呢?来,我们也可以定义一个代理的参数,直接在 get 或者说 pos 的 时候去指定这个东西就 ok 了,这是一个简单的用法,后面我们还会去详细的去讲代理池之类的东西。好吧, 非常的 ok, 我 们先简单了解,我再往下讲。还有一个叫做证书验证,那这个证书验证又是个什么东西?大家可以简单理解为我们前面说过, https 去请求的时候,它会在进行这个请求的时候,它会验证双方的身份, 记得吗?验证双方的身份,你是谁?你是不是跟我对接的街头人?还记得这个事情吗?大家可以理解为这个 s l s s l 证书就是来验证网店身份跟用户身份的,你可以这么理解,那双方验证双方身份的,你把它禁止说我不做这个验证了,我不做这个验证了。 好吧,是这个意思,这是我们请求的时候可以携带的一些内容。那继续往下走,还有一些我们响应里面常有的一些属性,有哪些属性?状态码,那这里要详细跟他说一下,状态码里面就是我们之前所说的二百四零四啊五百,以及他们所对应的一些原因。这个大家知道 第二个叫做点 text, 它是干什么呢?它其实就是一个网页的文本内容,你可以理解为字母串的格式,它会自动解码。什么意思?假设说你的网页它是一个文本,传过来之后它会自动把这个东西 解码成字母串,然后同时它会自动选一个解码格式。所以说你直接用点 text, 它有时候是可能会导致乱码的。注意,它有时候是会导致乱码的。那第二种点 content, 它是原始而今的内容,你也可以用 content 自己去进行一个解码,或者说一个操作, 你指定 u t f 杠八,最后也可以得到这个对应它的一个字母串,也是 ok 的。 但是一般情况下我们去获取一些图片或者文件的时候,也会使用这个点看成的,因为本身它就是一个二阶式原始二阶式内容。 那第三个是点 jason, 它是解析 jason 响应,再往下看还有点 h 的是点 cooking, 点 url, 它们分别代表的是响应头响应的 cooking 以及最终访问的 url。 那这里的最终返回问 url 重点是什么呢?你反问一个 url, 最终它不一定是你目前的这个地址网页,因为它可能会从定向到另一个网页,那这个点 url 返回的就是你从定向之后的 url, 而不是你一开始请求的那一个。这个大家需要注意 点 cooking 是 响应的 cooking, 注意响应的 cooking 是 服务器返回给我们的,不是我们前面说到携带过去的 cooking。 点 head 响应头,也就是我们在开发者工具里面看到的请求标头跟响应标头这两部分的内容。 那在这里呢,也是我们这个响应他的一些常见的属性跟内容。那大家可以去做一个操作,就说你完全可以用我们刚才所爬图片的案例 对这些参数去一一进行添加和尝试,来看一下它所达到的一个效果是不是这样的,大家可以去尝试。当然对于一些参数这个接口本身是不存在的,那你就无法去使用了,好吧,你可以去多打印一下这些响应的内容,这些对象,去看一下 他们的一个对内容到底是什么样的一个情况。好,那这节课我们简单的去了解一下,或说我们更详细的去了解了一下 request 它的一些模块的属性,或者说对象里面的一些方法,那这节课的内容就到此结束,希望大家喜欢。

今天给大家带来一个 python 爬虫来获取这个 vip 视频的一个案例。好,那接下来看程序啊,程序的话在这啊,一个写好了代码,点击运行走,它会弹出个这样的界面,这里提示一下,仅供学习啊,不可用作他用。 好,那么接下来我们首先选择一个你喜欢的平台,比如就以爱奇艺为例,点击爱奇艺,那进入了他的官网是吧?接下来我们选择,比如像电影吧,喜欢看电影,在电影分类里边自己选一个电影。嗯,这个不封追影吧,就这个吧。 ok, 那 么这个话呢,首先会先看广告,那我就不看了,我甚至连会员都不想看,更别说看广告了。接下来在这边我们复制一下这个视频的链接,然后呢粘贴到这个地方, ctrl v 粘贴,粘贴完之后点击播放 vip 视频就可以了,开始播放,那他就开始了, 免费的,来,我快进一下啊。哇,我快进一下啊, 这行,那这就是我们今天的案例,谢谢大家,我们下次再见,拜拜。

欢迎来到爬虫,本期教大家如何利用 python 获取网页的 h t m l 资源信息。第一步,下载第三方模块 request, 它是 python 最流行的 http 请求库,因为是第三方的缘故,所以我们需要额外安装, 安装的方法就是使用 python 的 解释器,打开左下角终端,输入 piping start request 下载并安装。 安装成功后,我们需要新建一个编辑环境,然后使用 import 方法导入 request 库。接下来通过 request 点 get 方法就可以发送 get 请求了。 get 请求是 http 协议中最常用的一个请求方式,简单说就是向服务器索要数据的操作。我在这里呢,请求获取的是豆瓣的二零二五电影排行榜,这里需要把对应爬取的网页复制在 get 请求之后。 为了能获取响应的内容呢,我在前面复制了一个叫 response 的 变量,现在可以把这个 response 打印出来看看。 现在打印出来的是 response 对 象,也就是存放我们爬取内容的列表名,后面跟着的数字是 http 状态码。我们也可以通过 startcode 属性来查看返回的状态码。 状态码还是四幺八四幺八,它并不是一个表示成功的状态码,大家记一下,所有四开头的状态码都表示没有获取成功,大家呢,可以通过这个网页来查看获取的具体 http 状态码是什么意思, 这里状态码显示我是一个茶壶,也是比较有意思的一个状态嘛。之所以会遇到这种情况,是因为该网页在用这个状态码回应我们的爬虫。遇到这种情况呢,大家不要灰心,我们可以通过一种方式把我们的程序伪装成浏览器, 现在我们创建一个名为 reply 的 字典变量,字典里头写上 http 请求头 user agent, 后面跟上我们网页客户端发出的请求信息,作为 user agent 的 值。不过要怎么样获取我们的网页客户端请求信息呢? 我们随便打开一个网页的任意界面,点击右键点击查看,在里边找到 not work, 点击进入,这样你就能看到浏览器帮你发送出去的所有 http 请求头,不过点击 notwork 的 时候要刷新一下,不然你是看不到的。我们点击任意请求,然后找到并展开 requestheadass, 找到 usagent, 然后呢,把里边的信息复制出来,放在我们的字典里, usagent 的 后面伪装成浏览器发送请求, 然后我们就可以把这个 reply 作为传入 get 里面, had 是 这个侧显参数的值。现在我们再运行一下试试看, 大家看到现在是零四,已经变成两百了,两百呢表示数据获取成功,这个时候响应题里面就会储存到服务器返回给我们的数据,这个时候咱们去打印 response, 点 text 就 能获取到那个页面的 html 源码。再运行一下,看看 这个 html 源码,上面就会有我们想要拿到的信息。看不太懂的朋友们呢,可以回顾一下我的上一期视频 是怎么依靠 html 源码组成网站的,看完了你就能熟悉 html 源码的组成结构。好了,我是韩川,我们下期见。

hello, 大家好,今天为大家带来的是爬取绝对领域的一个爬行代码案例,这个代码的话大概也就 十几行左右,再加上一个装好的,下载的方法和之前的是一样的,这里面是图片的地址和下载的目录以及请求头和重置的次数。这里面爬取的是一个少女的一个图片,大家可以看一下, 也就是这一个链接,然后这里面使用的是叉 plus 获取到这个 l i 标签,大家可以看一下, 就是这里面的,大家不一定按照我这个来使用这个叉 plus 的 话,主要去分析这个元素,它这里面是在这里 大家可以看得到,也就是这个 d i v 下面的 u l 标签以及 l i 标签下面,然后再找到这个标题, 也就是这个 h r 下面的 a 标签的内容,这个就是它的链接,去到这个链接下面, 然后再使用请求找到这个 s r c 的 属性。 get s r c 属性,也就是找到这个图片的地址, 大家可以看得到检查元素,它实际上找的也就是 这个 d r v 下面的 emulator 下面的 date s r c 也就是这个。找到这个,然后对它进行一个请求,下载这代码也是非常简单的,然后我运行看一下 好了,它正在下载, 这里提取的主要是一个美女图片的代码案例,大家可以看一下, 这里面主要就是这十几行代码以及这个请求的 ur 地址和使用叉 pad 找到这个 ai 标签, ai 标签下面的标题以及这个链接,然后去到链接详情下面找到这个 图片的地址,对它进行一个循环下载,基本上就是这样,现在我停止掉这个代码的话是非常简单的。好了,今天的视频主要就是这些,感谢大家的一键三连,多多关注,谢谢大家。

今天给大家带来一个 python 爬虫来获取这个 vip 视频的一个案例。好,那接下来看程序啊,程序的话在这啊,一个写好了代码,点击运行走,它会弹出一个这样的界面,这里提示一下,仅供学习啊,不可用作他用。 好,那么接下来我们首先选择一个你喜欢的平台,比如就以爱奇艺为例,点击爱奇艺,那进入了他的官网是吧?接下来我们选择,比如像电影吧,想看电影,在电影分类里边自己选一个电影。嗯,这个不封追影吧,就这个吧。 ok, 那 么这个的话呢,首先会想看广告,那我就不看了啊,我甚至连会员都不想看,更别说看广告了。 接下来在这边我们复制一下这个视频的链接,然后呢粘贴到这个地方, ctrl v 粘贴,粘贴完之后点击播放 vip 视频就可以了,开始播放,那他就开始了,免费的,来,我快进一下啊。 哇,会干嘛?玩蹦极啊?行,那这就是我们今天的案例,谢谢大家,我们下次再见,拜拜。 男的,快叫我密码,爱你 ktv 让你快睡。我的是个贪污的多男的吧,男女,我会对我方便,你看见给你买一单车嘛。三天呐,都看到这个,我的小三都快离了,你怎么离我那么近?