00:00
哈喽,各位小伙伴,欢迎大家来到学习园地啊,在上节课呢,给大家去讲解了一下关于我们这个啊学习园地这个圆圈的啊,这个实战的他取过程哈,那我们来看一下我们这个上节课所写的代码,它的逻辑呢非常简单,首先呢,我们是分析了一下啊,我们爬取什么样的数据,然后这个数据源地址在哪里,对吧?啊我们暂时呢,所用到的工具就多,那么接下来我们看一看啊,这个过程是这样的,首先第一步呢,我们是定义了一个请求的诱饵和请求头,那么知道我们的数据应该从哪里去获取,对吧?那么接下来第二步呢,就是在我们的这个未置目标位置呢,发起了一个请求,请求回来之后呢,我们判断它的当前的一个请求是否成功,如果成功之后呢,啊,我们就解析数据啊,解析数据这里边要提取的是什么呢?啊,提取的是它的标题,然后呢,122啊这个文章的幺二,以及它的作者和呃发布的一个时间,那我把它呃压缩成一个,压缩成一个字典之后呢,我们把它整体的哎放到我们的这个列表当中,那么最后呢,再开始把这个数据写入就可以了,也就说一共分为了这么五步,就完成这样的一个操作啊那中间其实这里边核心是哪里呢?啊核心第一个是你如何发很多,第二个呢,就是关于如何解析数据就可以了啊那么接下来我们看一看啊,怎么把这样的一个代码呢进行。
01:00
下一步的啊,封装和优化,因为这样的话,你不可能以后所有的代码都形容样的啊,所以都是呃都是干嘛的,都是封装成一个类或者是一个方法啊来进行调用,那么这里呢,我跟大家呢,去做一个简单的封装,那么打开我们当前的第三个脚本啊,那这这是我们今天第三个,那么第三个我们叫做嗯,BSBS4。实战优化。实战圆圈啊圆圈。圆圈。啊原创。哎,这个圆圈我怎么总是打不对呢,圆圈。啊圆圈啊,然后呢,代码优化,代码优化。好,来看一看啊,这个代码呢,我们应该如何去做优化和调整啊,那我把上节课的这个代码先拿过来,然后这个内容呢,呃,先放在这里也可以啊,好,那我们看看啊,首先如果,呃如果是我们。呃,封装一个类的话,我们应该如何去做封装啊,如何做封装,然后这个类里边应该都有哪些内容对吧?好,这样我把这个内容先给大家删掉。删掉啊这个内容,好,那这样啊,我们来看一下我们封装一个类,它应该是怎样去做的啊,来一个类的封装,首先啊封装类封装。
02:08
好,那么在这个地方呢,啊,我们写一个叫。Class class,然后呢叫BS叫BS4,然后呢圆圈。可以吧啊圆圈好,然后呢,括号冒号好,那么这里面呢啊,需要需要有这么几个属性啊,首先第一个这里面要定义属性啊定义属性,那么定一个定义属性啊属性第一个属性就我们当前要请求的一个UR粒子对吧啊UR粒子啊,那默认为那对吧,可以吧啊那。好,然后呢,我们的请求到hads啊。的啊,别为闹了啊,我们直接把上节课给大家定义的内容内容拿出就可以了,来CC啊,这两个就复制吧。看到谁过来啊?好,然后接下来呢,就是你这个叫这第一个属性啊,第一个属性我们当前的,哎请求的ul我们写一下啊请求的URL,然后第二个呢,是我们叫做什么请求的投是吧?哎请求投请投,然后接下来呢,是我们啊这个请求的这个叫什么数据啊,这个叫。
03:10
请求的请求的这个啊。应对或者应对应。对下我们看我们写小程序上还是把它写到一个文件里边了,好把这个数据啊,那我们可以先现在先往下写,往下写啊,那么这里边的啊,得有一个初始化,初始化方法啊,初始化的方法啊,初始化的方法就是DF啊DF这个刚杠阴译的啊好,然后呢,这个里边呢。啊,这个里边呢啊,我可以接收这么几个参数啊,第一个叫urr,然后第二个呢,叫做对吧?呃,我看一下。要不要记住呢?我们先不做接收也可以是吧?啊,不做接受也行,就是初始化的方案里边我们就完成一个啊,完成当天的一个请求啊,就发起一个,发起一个请求,发起请求给了啊,那么这里边呢?啊,我们看一下res等于我们的request,点一个get发请求,那就是selfferf,点点URR和我们的叫什么啊,和我们的selff。
04:05
DR这个叫呃hi是吧,嗯,前面这个位置写上啊,用通过这个关键字参数的方式来进行传递啊ses啊。啊等于它,嗯,好,那么发起这个请求以后啊,这个请求回来的这个数据,我们啊得判断一下当前res啊的结果,res.SB6扣的它的结果如果等等于200,那是不是就证明发起呃这个请求成功了,对吧?哎,请求成功成功啊然后呢,20就请求失败了是吧?好最后一个来一个1S120。啊,不能打。请求出来好。那如果请求成功了之后,下一步我们应该做什么,就是我们应该怎么去做呢?请求成功以后应该是这样的啊,把这个请求的这个数据呢,给写入到文件当中啊,写入到文件当中啊,那么写到哪个文件里边呢?啊,我们这里呢,可以定义一个啊,这个叫请求原代表的请求。
05:00
啊,响应的响应源代码的存放的存放位置是吧,存放位置啊位置。双位置你可以写到文件里边,也可以直接放到变量里边,都可以啊,那我这里边就res点啊,Res下划线点玩吧,啊默认的等于档对吧,等于档以后呢,我们请求成功之后,哎,就把这个数据给写进去,那就是res res点啊叫叫self selff。点res下线A,那就等于我们res点。TTST对吧?啊,这样的话就放进去,放进去以后,哎,我们接下来就可以做下一步,下一步去干什么啊,就可以解析啊,专门去解析我们的。HTMR数据啊数据,然后呢,后面还有一个写入啊节省数据是不是啊写入这种数据啊这么几个方法,那么呃,在这个里面呢啊,我们把这个呃请求好的数据交给他以后呢,那剩下的下一步数据解析了,哎解析的话我们就可以定义这个方法啊,那我们叫它pass per啊pass。对吧,啊passd吧DA。
06:03
好,然后呢啊,这个地方呢,我们先把它pass掉啊好,那么这样的话在上面就可以去调用了,对不对,所以这个位置呢,就可以self点去调用这个pass data方法括号啊去调用调用方法以后,那我们来看一下这个数据这个方法。它这个叫请求的这个解析的这个过程,那解析的过程,那你这个S码五已经放到哪里,放到这个叫呃,我们的数呃这个属性当中了,对吧?那么接下来呢,我就可以把中间的一部分内容啊给大家来复制一下,嗯,我看一下啊解析数据的一个过程。这个过程来放到。这C。C我把它放那啊,放到这个位置。来我们去看一下哈,有没有问题哈,这一步呢,是解析数据的,解析数据,首先这个解析的数据源在哪里呢?在我们的不在这了啊,在我们cf.res-A2里边,然后解析解析这里面应该是没有变化啊,不用动的,不用动以后呢。呃,如果都循环啊结束了,那么这个时候呢,哎,我们return处是吧,Re return一个e return大写的E就是如果都成功,那如如果他这个过程当中啊,有什么问题怎么办呢?啊,有问题的话,那就这样做啊,那么我们在这里呢,嗯,叫。
07:10
T2串,然后呢,把这个内容都给包裹起来。Ex CE p exce啊就是如果他当前的请求没有问题,成功以后,哎我们就可以啊做操作,如果他失败了怎么办呢?哎,这个地方我们就可以返回一个false,那这样的话,哎,我们当前的这个解析的数据就没问题了,那么通过这边的一个判断,诶检测当前它的这个叫什么,解析数据是否成功,如果它成功以后开始干嘛呢?哎,我们去调那个写入数据,那我们wrpe接省啊节省调用这个方法就可以了,那么来看一下CTRC,那我们接下来是不就定义解析数据的这个方法啊,当然了,我们现在把这个数据虽然写入到了我们的。啊,写入到了这个一个word list里边去,但是呢,我们并没有在属性当中放着,对吧?哎,所以这个位置是解析叫存放,哎存放解存储解析。
08:01
解析后的啊,节省数据啊,解析后的数据啊的数据,那么我们这位置呢,应该叫list where list等于中号对吧?啊就是默认是空的,那么之后呢,这边就不需要定义了啊不需要定义,然后呢,每一次处理完的数据都怎么呢?是self点。啊,ERf.list的点啊,然后把这个数据加进去,那么这样啊就OK了啊,这个解析数据这一步完事完了以后呢,下边就是还是写入数据啊,写入数据的话,我们定义一个方法在这个地方。括号啊,然后呢,做什么操作呢?哎,就是非常简单的,刚才那一步,如果它的解析是成功的,对吧,那我们就做啊,做这样一个操作来开始写入,然后呢,写入的内容是谁呢?是self点。嗯,ERRF啊,cf.Y历史啊,然后写入,那么在这之后啊,如果它的过程没有问题啊,T,当然了,它需要判断一下是吧?啊,我们可以判断一下cerf self DR。嗯,点什么点忘绿色了。点二丽啊,如果它的结果不啊,如果它的结果叫不等于谁呀,不等于空。
09:03
对不对,不等于空,那么这个时候我们就开始写,如果等于空,就肯定不用写了,对吧,空来20。不来。啊,当前啊,无法无法获取当前的解析数据,无法获取获取当前解析的数据啊,然后呢,之后呢,再加一个啊,再加一个串exce,就是判断它当前的整个过程,判断它当前的整个过程有没有问题哈,来我们看一下。嗯,把这个干掉之后呢,啊,在这里TR,在这在外边写就可以了啊呃,在这个里面写好,写完以后呢,它如果没有问题,那我们这里边呢,Return一个true TE是不是就成功了,好,那如果有问题呢,Ex ex except,那这里边呢return一个false fair,好那么最后呢,是这样的,当你去实例化的时候。啊,你只需要去调一下流芳码,调一下流芳码之后呢,我们在这里呢,哎,就。To return了一个啊,这个这个结果就是他他返回结果不是出和放嘛,对吧啊,不管怎么样,他都要返回出和放吧,啊我看一下。
10:05
和这个地方也。决定一个false,这样的话,他不管怎么样都要返回一个错或false啊,呃,然后。这边呢,就return一个Ren return一个FASE,好,这样的话我们看一下啊,在后面我们在调用的时候,应该怎么去使用啊,应该怎么去使用啊,就变得非常简单了,就是我们当前的这个叫圆圈是吧?啊圆圈。直接实体码就可以了。复制括号。括号。看当前的结果,不论,我们只看这个RS的结果到底是什么啊,来这样,我把这个谁呢,把我们刚才接的这个数据给他删掉。啊删掉,那么接下来呢,我们运行一下当前的脚本,看看有没有问题。好像有问题是吧,你BS4。Return not类型。哦,他还不能为碳酸吗?我们当前在这个地方是不能。类型吗?
11:03
但我们的数据已经成功了哈,数据已经成功了。对称的风貌。看一下它这个什么意思啊,来翻译一下啊,看这个结果,嗯,他把error说例行错误初始化,应该返回到类型啊,就是不让你返回这个结果就是他不让你做这个呃,Return处或false的一个返回啊,那我们就这样,那就不返回了,最后来一个来请求啊,就是成功啊数据数据成功。啊,写入写入文件写。入文件啊,数据成功写文件啊,那这样的话我们就更简单了,更简单了,那我们就不需要打印,也不需要去啊那个什么,只需要第一步实例化就完事了,对吧,然后来看一下啊,把这个文件给它删掉,这个文件移除。好,那么接下来再重新运行一下,当年代表找你好数据啊数据数据成功,我写的是数据啊,应该是请求成功啊,数据写的文件啊请求。
12:01
成功数据啊,数据写入文件。好,那么看一看我们这个数据对不对,走你打开没有问题吧,啊,这当前都已经成功了啊,就OK了,好,这就是我们当前啊,对我们上节课所讲的这个代码上做了一部封装,当然我这个封装呢,也不一定说完全就一定非常好,只不过就说。希望大家呢,慢慢的去养成我们这样的一个就是面爱对象编成这样的一个思想啊,把各个功能和方法进行分开啊分开,然后每一步啊再处理什么,都是单独封装成一个功能,那最后调用的时候呢,更加简单啊,更加简单,这样的话呢,可以提高你代码的这个呃可读性。啊,可读性啊好了,那么这就是我们当前的这个BS4啊beautiful so啊它的一个实战操作好了,那么这样的话,呃,这一个小章节的内容啊,S4的内容呢,我就给大家讲解更多,那么在下一个章节呢,再给大家去讲解一下,我们Python当中的另外一个方法叫做正则啊,也是我们其他语言里边也都有了正则啊,那我们去学习一下之后呢,我们用正则在排取一些数据,那基本上就大家啊就非常清楚我们应该如何用哪些工具去解析我们的代码,那么最后呢,啊,在这个这些过程都完成以后呢,最后就我们如何写入数据,其实我们现在写入数据大家应该也都已经清楚了,对吧?哎,大下节课呢,给大家去讲解啊两个案例就可以了,呃,那么后面的话,我们主要的就是哎,如何提高我们的呃,这个爬虫的性能,比如说我们刚才爬的这个圆圈里面,我们只是爬了其中一页的数据,对吧?那么大家看到哈,后面是不是还有很多页对吧?那么像这种带分页的,我们这么爬对不对?然后其中这里边是不是还有不同的技术标题的,比如说跟技术相关的,跟数据库相关的,跟拍Y摄相关的,对吧?啊,应该如何去爬取啊,如如何怎么啊,怎么才能够获取到这些数据,那我们都可以啊去处理啊,都可以处理好了,那这样的话,这节课我们就。
13:34
就到这里啊,课后呢,小伙伴们把这个内容呢,好好做一个练习,好了,我们下节课再见。
我来说两句