00:00
OK,同学们,那么我们接下来呀,要做一个啥呢?做一个这个验证码的一个登录啊,也就是我们的request的一个cookie登录,那我们想主要想做啥呢?同学们大家看啊,我们这有个网站,这个网站叫做古诗文网啊,古诗文网。这个网站呢,它登录的时候有验证码,但是呢,跟大家各位同学讲哈,说这里边的这个登录出接口啊,不是很好找,为啥呢?它在哪儿呢?它在我的这里边儿啊,在这里边,诶这里边你一点它其实就是我们登录的页面啊,而这个登录页面里边呢,这个验证码的识别还是有点难度的啊,还有点难度的,那我们这样吧,我们先创建一个文件,创建完这个文件之后啊,我们来分析一下它的需求,分析完这个需求之后,我们再来去一点点来写代码,这个代码大概不超过50行,所以说呢,我们也不是特别的难啊。但是他这个解题思路非常非常的复杂啊,而且呢,同学们你要需要注意的是啥呢?这个案例的时间稍微的长一点啊,稍微长一点,所以说大家看视频的时候一定要注意力集中啊,上规谷爬虫,这叫requests下线叫cook k登录,然后呢,我们再有一个描述,就是叫古诗文网啊古诗文网OK,同学们,那我们先观察一下啊,观察一下它这个需求对吧?观察需求也就是说现在呀,我们要通过这个页面登录进去,我们先正常的登录一下啊,正常登登录一下叫CA gon对吧,我们来登录走,嗯,登录进来了,登录进来之后呢,我们要干什么,同学们,我们要绕过它的登录页面,然后进入到我的呀,或者什么什么其他页面都OK啊,无所谓。
01:59
你想进入到哪个页面都行,所以说同学们现在啊,我们要做的是啊,通过登录啊,然后进入到进入到主页面,诶,这是我们想要的,但是有一个难点就在啥呢?我们这有一个验证码。
02:21
明白吗?各位,而验证码这个东西是我们在绕过登录这件事儿的时候呢,比较麻烦的一个一个需求啊,一个需求,所以说大家一定要好好的去分析一下啥呢?分析一下它的业务逻辑,那OK啊,我们先找啥呢?同学们,我们先找登录接口,我先把它退出一下啊,找登录接口,一般情况下我们如何去找登录接口呢?我们有两种方式,啥叫登录接口?就是你点击登录之后,什么样的情况下他才允许你登录,这个就是我们所说的登录接口在这检查。啊检查,然后在这里边呢,点network,你点它的时候干了啥事儿,就是我们所说的登录接口啊,假如说我输入正确的这个账号,这个密码呢,啊,一会儿我告诉大家啊,我这里边密码叫action,我现在输入一个错误的啊为什么呢?因为我们可以通过错误的这个东西来找到他的登录接口,那么同学们看啊,点登录走。
03:20
嗯。好,失败了,先别点确定啊,因为你点击确定之后就跳转了,我们干什么呢?同学们,我们来找一下登录,一般情况下,同学们带登录的这个接口一般都在login啊,Login就是login啊,Login带这样的一个单词的,它就是登录接口,我们来找一下在这儿在这儿找。嗯,好缓一缓在这了啊,同学们看看这里。往上滑一滑,这看到了吗?login.asx就是它,那这里边我们来看一下是不是我们想要登录接口啊,同学们,你看是一个post请求,那么posts请求之后,这里边携带的参数好像很多呀。
04:09
对吧,哎,我们知道这个参数怎么这么多呀。这好像没看过呀,同学们对不对,那么我们现在通过啊,通过啥呢?通过找登录接口,我们发现啊,登录的时候需要的参数很多,那这个参数都有哪些呢?我们先把它注释一下,一点来写来,把它拿过来,这个参数我们知道啊,这个应该是固定的,那这个email呢,是不是我们的用户名啊,对吧,各位这个大家都都能知道,我们怎么去写,那这个呢?这是我的密码,我的密码叫action对吧?然后这个是什么?是我们的验证码,那有同学说老师啊,那你上边这两个又是啥呀。难道它也是固定的吗?其实这事啊,我们倒得好好去想想,一般情况下,同学们,我跟各位同学啊,一般情况下这两个东西你不认识的,基本上不是固定的。
05:11
那基本上是不固定,所以这里边我们有几个是变化的呢?我们我们观察到啊,我们观察到谁呀,一个叫下划线,下划线will state和谁呢?下线下线will state generator,它还有啥一个code,它们三个是一个变量。啊,啥叫叫可以变化的量,是一个可以变化的量,为啥呢?同学们要注意啊,一般情况下是这样的啊,你这个用户名我们不可能变,你的密码更不可能变,然后你的from这个也不可能变,对吧?所以现在如果说我们要想登录的话,大家想想是不是我要到这三个值就可以了。
06:01
但是这三个值我们应该先找谁呀?因为先找这哥俩,这哥俩到底是谁?我们现在还不知道对吧,各位,所以说我们现在的难点应该先干啥,记住啊,同学们,这道题的难点有两个难点,第一个就是他们两个。就是他们两个,这是第一其一,那么我们说的难点二指的是谁呢?就是我们的验证码。哎,我们的验证码有两个难点,所以大家注意啊,当我们遇到一个比较复杂的这个爬虫的需求的时候,你要把它细化并且拆分,拆分完之后,那么接下来我们就能拼一起就能实现这个功能了。啊,OK吧,各位好,那现在呢,我们要猜一下,诶说这个will state和view,这个state generator这两个值是哪来的。
07:01
我们其实现在还不知道对吧,各位,哎,不知道哪来的,那我就干啥呢,我就先点确定还是到这页面哈,一般情况下我告诉各位啊,一般情况当你看不到这个数据的时候,就是他俩你看不到数据的时候,一般情况下啊。一般情况下看不到的数据都是在页面的源码中,页面的源码中,那我们就找找呗,怎么找说这个页面啊,我们来检查一下子,或者我们右键查看源代码,两个钟都行,那么查看源代码你在这来CTRLF叫什么来着,下划线,下划线一个叫view VI ew,然后state是吧?诶同学们,我们发现了在这有啊。有吧,都是分别是input的值,一个叫will state,一个叫will state generator,同学们看到了,各位,那也就是说这两个东西是不是在我当前的这个页面中的一个数据呀?而这个数据同学们,无论你是什么之前学过什么专业的同学,你应该都认识这个单词叫hidden。
08:22
啊,Hidden den hiddenn是啥呢?它叫做一个隐藏域,什么叫隐藏域?就是它的页面不显示,但是页面中它存在,我们把这种东西叫做隐藏域,同学们能理解吧,各位,诶,所以说在这儿呢,我们知道这两个东西在你的页面源码中。那么这个问题就简单多了,怎么简单,你去访问这个页面,同学们,你去访问当前的这个页面。啊,当前的这个页面,访问当前页面之后,你是不是获取到页面源码,然后就可以解析出你刚才想要的这个两个值啊,所以现在我们知道我们观察到观察到啥呢?观察到这两个。
09:13
两个数据在页面的源码中,所以我们需要获取页面的源码,然后进行解析就可以获取了,同学们理解各位啊,那你把这个东西你获取完之后,你再给他俩赋值不就完事了吗?对不对啊,哎,所以说你要清晰,那当你这个完事之后,你就差谁了,差验证码了。对吧,诶我们一点点来验证码,你就是干啥呀,你要把验证码注意啊,同学们,你要把这个验证码下载下来,然后我们一点点再来做下载之后呢,然后我输入,把输入的这个值给它就可以了,当然这是我们第二个要操作的,我们先不着急,我们先干啥呢?我们先把这两个数据获取到。
10:08
啊,先把这两个数据获取到,好同学们,那么你现在我们开始写这段代码,那这个代码中,你刚才两个数据是不是在这个页面中啊,我们是不是在这右键呢?对吧,然后在这干啥?CTRLF,然后下划线,下划线它一搜索是不是他俩呀,所以说大家注意啊,第一个访问接口就是谁呀,就是它。啊,我们来看一下右键检查是不是它呢,来刷新走,你就是他看一下pro view,诶没问题吧,各位,这就是我们想要的数据了,所以说最开始的时候我们就要用它来访问,是一个概念请求啊,不用去管别的。好,那在这来吧,先写上,呃,既然我们刚才学了requests,我们是不是要用用request来做呀,所以在这写上啊,先导入一下import requests。
11:01
好,那在这定一个URL等于啥?哎,等于它,那这个是什么?同学们,我写上这是啥呀。这是登录页面的URL地址对吧,那接下来我要干啥,我是不是要对它进行访问,访问之后我要的那两个数据啊,好,那那就那简单的,你再给他一个啥呀。你get请求不就request get吗?我再给他来个这个UA对吧?可不可以啊,哎,来在这给他来个UA,嗯,复制一下,然后给它粘贴到这里UA,好同学们,那么接下来这个UA有了啊,这个UA有了,我是不是可以去访问它了,访问它之后我能干啥呀?我是不是就获取它的源码数据,然后再对它的源码数据干啥?是不是进行解析就OK了?好同学们看啊,Request是点get,这不刚学的嘛,对不对?来URL等于UR,然后接下来head等于head没问题吧,各位好,那接下来干啥呀?Content等于response.test。
12:11
所以现在这两步它的意义是啥呢?叫做获取,获取啥呀,页面的源码明白不?各位我们来打印一下啊,看有没有来print,来content OK,同学们,我们来运行一下,走你。嗯,OK了,是不是获取到了,嗯,很多很多东西是吧,那有同学老师你这个到底要没要着啊,大家注意啊,这个疑问是很正常的,你先别着急,你在这儿你先检索一下,你看它有没有万一做反扒了呢。你做反扒的话,你这个情头这块是不是也得改呀,但他现在没有做反扒吧,你是不是找到了呀,那就无所谓了,是不是好,那既然数据有了之后,接下来同学们我们要做啥呀。啊,我们要做啥,我们是不是要做解析了,那接下来解析页面源码,然后获取啥呢?获取这两个值分别是下限下限will state和下限下限will state generator,哎或这俩好同学们,那它俩我是不是就得定位一下呀。
13:18
好,那咱先别别着急,我们要去选择一下啊,你的解析方式用啥。那我们发现了,这里边我们是返回的是HTML页面板,那我们是不是要么就选择叉pass,要么选择L,不是要么选择啥呀BS啊,那我相信啊,很多同学都说老师啊,那我就用这个叉pass吧,我认为那个比较简单不啊,你哪个不熟我就用哪个。啊,这样的话就以后你就啥都会了啊,啥都会了,好,同学们,那既然你要想解析,你要用用BS的话,我是不是就让bs import beautiful soup,有同学说老师啊,啊,你之前不都放在最上边吗?那这把为啥放下边了?我为了啥呀?为了让你在看这段代码的时候很清晰,所以放在这了,正常我干活的时候应该放上边啊好,接下来soup soup等于啥呢?Beautiful soup,大家一定要记住这个语法,然后在里边写啥content对吧?各位,哎,你要解析它,然后里边有个内核就是L叉L明白吧,好OK,那这个完事之后我们要做啥呀,兄弟们。
14:25
啊,我们要做啥,我是不是要这个页面源码中的什么来看。来找一下啊,CTRLF找它走,诶你看同学们你要的是啥,你是不是可以通过ID来找到这个input,再获取到它的Y6的值啊。对吧,各位,那你还记得BS的语法吗?还记得吗?第一个来写上叫获取,谁获取will state会它会它之后啊,我们知道啊是soup点它select,那里边我是不是可以选选择器呀,对吧?以井号为啥是井号呢?兄弟们,你看它是不是ID选择器,ID选择器我们用啥呀?是不是井号啊好,那同学们注意啊,这个获取的对象我之前给他讲课的时候讲过,说它返回的是一个什么值,是不是一个列表。
15:28
对吧,而列表里边我们要取里边的数据吧,ID肯定是啥呀,只有一个嘛,取数据,取数据之后我如我怎么去获取这个对象的属性啊。还记得吗?滚,是不是点at t rs.get里边来写个啥呀?我们看它的值是谁?是不Y6各位,哎,就拿到了呗,所以大家注意啊,你这个如果之前BS的语法你要不会,那这个就有点难了啊,等于它好,那么紧接着同学们我还要获取谁呀,是不是获取它呀,来写上叫获取贼获取它。
16:12
那来呗。然后啥generator?OK,等于啥呀,等于soup.select然后在里边你再看呢,看它下边是啥,你看这个是不是又有一个什么,又有个ID呀,那我就来呗,ID前面一定要加井号啊,你不加井号是不行的,因为你使用的是这种选择器叫select,千万注意啊,那它返回的同学们是不是也是一个列表,而这个列表中我还想要啥呀?要里边的属性吧,点get谁六吧啊Y6吧,对吧,各位好,现在我们来打印一下,哎,分别来打印下来打印一下他俩,我看我能不能获取到,获取到之后我再干啥呀,我再去研究验证码。
17:06
明白不?大家哎,这会千万要注意啊,来走。你们看拿没拿到啊,是不是同学们这两个值我就拿到了啊,一般情况下呢,有很多大的网站呢,都设置这种隐藏域,然后呢,你每次进到这个页面中,它都不一样,所以说呢,我说各位同学在这儿有一个非常非常好的一个反扒手段,就是他加了这两个隐藏域啊,注意啊。好,呃,那么这整个的这两个数据完了,还差谁呀,同学们。我是不是差验证码呢?那验证码这玩意儿又是啥呢?我得来看看呢,同学们看,把它关掉,把它关掉之后,我定位一下这验证码来检查。这验证码哪来?他是一个什么?他是一个以妹子,以妹子的图片是啥?是他吧?
18:01
对吧,各位,那也就是说你这个值每次进到这个页面的这个值应该变一下吧。对吧,这个值应该变一下,那这个值的地址是谁呀?是你看看啊,我鼠标移入之后,你看他在下边。诶,没有了哈,再来移入之后,它在下边没展示在这儿啊,是不是有一个HTTPS,然后搜点古诗文点CN.rad然后code的点ASHX啊对吧,各位哎,它有这个东西,那我就在想哈,这个地址我能不能给它打开一个东西啊,我能不能复制一下是吧?然后呢,用干什么呢?就这个这个src本应该是什么,是应该图片的路径,对吧?那这个图片的路径,如果我获取到这个图片,我是不是就知道它的验证码是啥了,同学们。
19:01
明白我的意思吧,好,那接下来啊,同学们我干啥?接下有不有个以email扣的吗?你当前页面啊,当前页面我获取到这个验证码,你获取到验证码之后,一看我是不是就能往里边填了。明白吗?大家那有同学老师还是有点懵,没关系啊,在这我写上叫获取验证码图片啊,取验证码图片,那这验证码图片我应该咋获取呢?这个验证码图片我应该咋获取呢?同学们,你看在这是不是有个叫image code的image code的这个image标签的src属性是它不,那现在我们来获取啊来说这叫啥呀,我们给它起个名叫code吧,验证码嘛,对吧,等于soup.select然后在里边写上是不是井号叫什么来着,Image扣吧,看是不是image扣在这里看好啊,Image扣它我们都知道select返回的是一个列表,而这个列表我们要取里边的元素对吧,元素的at ts.get我是不是要src的值,我们来打印一下,同学们扣我看一下这个值能不能获取着啊来。
20:22
走,你。我们看诶获没获取着,获没获取着,同学们,你获取的是啥,你是不是获取的src的值,而这个啥,这个图片的路径前面是不是拼了一个东西啊,叫HTTPS搜点古诗文点CN拼上它了呀。对吧,各位,诶这个别写错,那这个东西有用吗?我们来看一下啊,说这个我给起个名字吧,叫Co的下划限URL等于谁HTPS冒号斜线搜点古诗文点CN,然后去加上一下扣的吧。
21:04
对吧,乖,因为它返回的,我们看是不是返回来带个杠啊,而我们这里边你看这杠我们就不加了一拼,是不是就他自己呀,哎,所以在这里边同学们看啊,我这打印一下扣的圆,我看是不是这个东西啊来走。打印个地址,点他。哎,是不是这个地址啊,来刷新,刷新是不是每次都不一样,各位对不对啊,所以说同学们你在这儿要知道它咋整,那这个东西你你获取这个路径它有啥用啊,同学们你获取这个路径它有啥用啊。诶,那我有个想法啊,你获取这个地址啊,你获取这个图片的地址之后,如果我把它下载下来。我把它下载在本地,然后我看看完之后我在这写个什么,同学们看啊,我在这里边,我来给他来一个叫code name。
22:01
肯定等于啥?等于input行吗?请输入。你的验证码啊,同学们你看啊,我既然想干的这些事儿,逻辑你必须捋顺,捋顺之后我们才有可能干啥呀。来识别它对不对,那在这啊,我要干啥呢?获取了获取了这个验证码的图片之后,下载到本地,然后观察验证码,观察之后,然后在控制台。在控制台来输入这个验证码。就可以将这个值给谁了,同学们看是不是给我们叫做code的这个值啊,对吧?哎,给code的参数就可以咋的是不是可以登录了,哎,大家要知道这个啊,那你这里边接下来我们一点点来呗,你咋把它下载到本地啊。
23:16
啊,同学们,你如何将一个值下载到本地呢?这个时候大家肯定会想到啥呀,会想到UR lib里边我们有一个什么叫做URL retrieve的一个东西吧。哎,是不是各位叫re u re,那我们试试呗,但是我前提我跟大家说明一下子有坑啊,先写俩字,有坑咱们稍后再说,那你既然你说下载图片,你用UR lab,点这个UR retrive也可以啊,没毛病啊,对吧,那我们来,你既然想用UR吧,对吧,我就干啥。导它对吧,点request好,那么我们要干啥呢?同学们下载咋下载的呢?啊,Your live点快点URL retrieve yourr等于谁等于code yourl是不是来个fair name啊,对吧?哎,Fair name等于谁呀?起个名吧,叫叫啥呢?我们把它叫做cold。
24:20
点U勾PG吧,勾PG行吗?哎,扣勾PG我看能不能下载成功啊,咱一点点来呗,对不对,好右键运行它。好OK了,同学们,但是你先别着急啊,你看这里有没有啊有啊,诶下载成功了是吧,那同学们如果啊,他下载成功之后,你是不是就可以在这儿输入这个样,你看完之后你是不是可以输入了。对不,各位各位你输入完之后这个值给谁呀。给他不就完了吗?明白不喂,OK啊好,那现在我们干啥呢?我们需要的几个值啊,全搞定了,一个是谁叫view state,一个叫real state generator,一个叫啥呢?Code name我全有了,那接下来我们干啥登录?好,同学们,那我接下来干啥呀?要是不是要抓登录的接口啊,那来吧,我之前跟大家说了,一般情况下我更习惯于抓登录接口的时候咋抓,我就是输入一个错误的就能找到了,还有一种情况,同学们注意啊,还有一种情况怎么登录。
25:34
怎么转录,你在这里边看有一个东西叫preserver log。那如默认情况下,同学们默认情况下它是没有勾上的,默认情况下是没有勾上的,那没有勾上咋整呢?为啥勾和不勾有啥区别没有啊,咱看看咱们都知道它的接口叫login了是吧?呃,输入一个名密码X,然后X。嗯,0ET我们登录一下走好同学,诶啊这验证码错了啊,验证码错了,然后再来X,然后这个C,那你刚刚才应该是O吧,无SW来登录。
26:12
好同学们,我们进来了,我们进来之后,我先把它干啥全清空一下啊,再退出一下,再退出就是咱们从头来,因为刚才有点多是来选择呢,再来一个,然后8M5勾把清空来走,你好,同学们,我们看啊。在这里边儿,我们刚才这个是登录吗。是登录对不对呀,但是注意啊,同学们,为什么它现在有原因是现在的Chrome浏览器的版本会把你之前登录过的东西保存,也就是说pre serve log在这块它给你勾上了,但是以前呢,有一些chome览器的版本,你如果它不勾,它直接就跳到这页面了,而它则会消失。
27:06
明白吗?各位,所以说此时为了将来你在写案例的时候,如果你的可用浏览器版本过低,那么你就注意把它勾上,如果它不勾的话,之前执行过的这个接口就已经被覆盖掉了啊同学们听懂没有啊,所以说在这呢,我一般上啊,我不会说把它勾上啊,为啥?因为勾上的话,你这里边接口太多了,我找不到,所以说它的测试我是这么测的,一般哈咋测,我在这随便输入,输入一个错误密码,他肯定登,登不进去码Z。HG,那既然它登不上去的话,同学们,那这个接口就不会跳转到新的页面吧,如果它不跳转到新的页面,那这个接口我们是不是就抓到了呀,就是它呗。对不对,明白明白明白各位啊,就他自己的呗,OK啊各位。好,那这个接口是谁呀,是他。
28:03
好。那是它是一个pose请求吧,那我就来写呗,对吧,咋写呀,接下来登录了,登录需要三个参数,我也找到了是吧?来写上,接下来这个叫啥呀?叫登,点击登录,那么这个有URL,起个新的名吧,因为上面有了叫post等于它。等于它之后,因为上边有hi,我在这就不写了,我直接给它个啥呀,直接给他一个啥参数等于什么,我也叫date post吧,为了统一一下啊,等于谁等于它,那这些参数都有什么呢?应该是一个动态的吧,对吧,来我把它再复制一次。嗯,好,OK。那么在这里边粘贴它好OK,同学们啊,我把它第一个来,它被选中一下。好同学们,这个值啊,它后边这个值是不是应该是一个动态的呀。
29:01
但是我们先不写啊,别着急先给他一个假的啊,先把这个结构不要他报错,它也别着急给他个假的,嗯,然后这个应该给它选中一下来走。他走,哎,这个用户名你得写对吧,那接下来密码密码我也写写对吧,同学们你可以拿我这个测啊叫action。好,呃,这里边应该有点小问题,在这里边没有加逗号啊,没逗号好嘞,那接下来扣的扣的也加,这里边也给他写一个假的,一会我们来改啊在这儿,哎,默认登录OK了,那刚才同学们你要知道这个值我已经获取到了,就是谁呀,Will state对吧?哎,Will state。好,还有一个谁呀。就是will state generator。我也拿到了对吧,各位还有一个我们说了,你先别着急笑啊,也别先别着急开心,在这里边我说了他是不是有个坑啊,但是我们也干啥呀,我们也有这个啥呀,叫code name,先别着急,你下载完之后,虽然下载了,但一会有点小问题,别着急啊,Code内给他这是你输入的,那这个是不是有了,那接下来就访问它呗,对吧,咋访问呢?咋访问同学们是不是还是request是点post对吧,URL等于ul,接下来谁hi上面有没有hi有啊,对吧?啊,然后接下来data等于叫post啊data post对吧?那这个执行完之后,如果它正确的登录,同学们,它是不是会给你一个结果啊,诶这个叫啥呀,叫response_post然后content_post为了和上边。
30:58
再做一个区分,等于response post.test内容嘛,然后接下来干啥呀?我可以给它保存一下吧啊,With open来写上啥叫古诗文,点H界面对吧?然后来一个写的模式,再来个encoding,省着有中文是吧?然后我们给它搞定一下子is FP fp.right来写个content post没问题吧?各位万事俱备,啥毛病没有,除了咱们说的这旮有有小坑,我看能不能进去啊,如果进不去的话,我们再研究为什么。
31:36
就可以了,来走走。哎,输入你的验证码,这验证码这把变成谁了?叫看啊叫ER,这是啥呀?零还是P呀,还是O啊先写个零吧,走好诶可以了是吧,这是零,那是零之后我看对不对呀,来打开一下走。完了说验证码有误,那就验证码错了呗,那我刚才说难道同学们这时候就会想,难道它是一个O吗?我们再来试来运行。
32:12
来观察验证码走。还是有一个那啥哈,但05NV走,那我们看啊,还是登进去,你就写啥都登不进去,那为什么呢?还是验证码有误,好有的老师啊,还是零和O的问题吧,我再运营一下,我就不信这把它还是零和O。那如果是的话,咱们再来一次是吧,好走好,这把没有了,我不可能输错了吧,有同学老师大小写跟这没关系啊,但是我也为了满足大家这个好奇心,Z,走,那我们来看能不能进来看一眼。来再看好大家发现每次都怎么都是验证码错呀,对吧,每次都验证码错,那为什么呢?我告诉各位啊,这个并非大小写。
33:04
也并非是连和O的问题,而是什么呢?同学们要注意这个坑点在哪儿。这个坑点就在这儿。大家注意啊,如果你通过这个请求再去下载它,你和这个请求他俩就不是一个了,也就是说你在这个表单提交的时候,和这个验证码,验证码已经变了。他不是你最开始生成页面那个验证码的,假如我们再打开一下。啊,干啥呀?在这儿来写一个古诗文王,嗯。不是他啊古诗文啊好同学们,我想说的是什么,就是你当你下载的时候,你执行了一次啥这个请求,那此时这个UR地址下载的时候,它就不是啥呀,不是你看到页面这个地址了,所以和你登录的它就不一样了,明白吗?各位。
34:07
那这个时候我们应该怎么去解决呢?对吧,这个问题我们应该怎么去处理呢?你要做的是不是就让这个提交请求的时候和这个验证码是同一个呀。明白吗?各位,哎,所以说在这块我们就要讲一个新的知识点。这个知识点叫啥呢?叫做session,所以在这块有坑不行,那咋整呢,咋整呢?注意啊,同学们在这里边我们要做啥,我们要还是对它进行访问,但是此时我们要使用谁了呢?我们就不能再去使用啥呀这个请求了,而是这个request里边,Request里面有一个方法啊,有一个方法,这个方法叫做S。
35:06
三神,那么这个三神能干啥呢?通过。通过塞身的返回值就能使啥呢?请求变成一个对象啊,就变成变成一个对象,那咋来呀,同学们,这个30我们后期会干啥呀?给大家讲一讲对吧,它到底为什么,其实里边有一个啥cookie的东西啊,通过session ID来做的,好,那我们来试试吧,先把这个问题解决了,Session等于requests.session。三身离开点三身,那么这个三身要干啥呢?同学们注意啊,这个三身要干啥呢?兄们看啊,那我接下来呀,我通过这个session.get干什么呢?我来访问一下这个code的ul,那你访问它之后,它必然会有一个什么呀,同学们。
36:10
啊,它必然会有一个这个响应吧,和request一样的啊code,那这个是不是它的一个内容啊。对吧,这是一个啥验证码。验证码的URL的内容,我要将这个内容干什么,给它下载到本地,那在这块呢,不能用UR lab.request啊,不可以,那这我怎么办?我可以获取内容吗?Content code,哎,这个内容等于response code.test但是在这里边注意啊,你不能再去使用test了,注意注意此时要使用二进制数据。
37:03
为啥呢?因为我们要使用的是图片的下载,而图片的下载要干啥呀?要用二进制,所以在这写一个content,明白了各位,诶,因为你要把图片写入到本地,而图片要使用C的这个二进制。那接下来就简单了,With open来写一个名叫扣点勾PG,对吧?这里面写的时候我记得我们讲文件的时候注意啊,它有一个叫WB的模式,写个小注释,别着急,WB的模式就是将啥呀,二进制数据写入。到文件啊,写入到文件,好,我在这儿,在爱子。
38:00
FPFP.right来将这个啥呀,文件的内容给它写进去。啊,先去好,同学们,我是不是通过三身来发送请求啊,那么咱们说了它能干什么,是不是将请求变成什么,同学们是不是变成同一个对象,所以在这的访问我就不能用request,我用啥呀,我用session,我用session之后,也就是说他的访问和他的访问是同一个,这样的话我们就能保证啥呀,你那二进这个什么,你这个验证码的请求和你这个登录请求是同一个了。啊,这块有点难啊,这块难,它也是现在我们比较常用的一种处理方式,那现在我把它删掉,也把它删掉。大白,删掉好走你。好,那现在同学们我们来运行一下走。嗯,但是这里边可能有点小问题,啥问题,你在这儿看不着这个图片,你别着急,这是因为啥呢?你把它写完之后啊,它反应的没有那么快,对吧,反应没没有那么快,咋整同学们注意你在哪看你在你的本地去看。
39:17
在本地看在哪,在这里边。啊走嗯,在哪呢?看到了吗?扣到个笔记,当你把这个打开之后,你再回头再看一眼,你它就有了,当然你在刚才本地看也行啊,这个要注意啊,啊这个要注意来走它叫。EAQ3D吧,Q3D走。啊好,同学们,我们来看一下这个现在有没有呢?如果没有,那刚才就一是吧,走。来,我们看进没进来是不是OK了各位,哎,所以说在这里边注意啊,同学们,这道题的难点我要写上。
40:02
啊,叫云南点。难点一是啥呢?叫做隐藏域问题,就是我们的两个下线,下线是吧?隐藏域问题二就是我们的验证码,这两个是难点啊,所以说大家注意啊,当你碰到类似的题的时候,你怎么去通过这种验证码去攻克这个难题,就显得非常重要了啊,就显得非常重要,好同学们,以上就是我们的古诗文验证码登录啊,希望咱们同学们以后遇到这样的一个验证码,我们知道怎么去处理它,好同学们,我把视频暂停一下。
我来说两句