00:00
Hello,大家好,欢迎大家来到学习原地啊,那么在上一节课当中呢,给大家去讲解了我们这个啊,这个Python当中非常知名的一个库啊,叫B也简称BS4啊,它的一个安装和基本使用吧,也可以说这个beautifulf so啊也也是一个非常方便啊,和我们插插是一样的啊,非常方便啊,我们能够快速的去获取我们的一些数据的一种方式啊,当然这也只是啊我们要讲的三呃三种方式之中呢啊这个第二种啊,那么接下来是这样的啊,我们在这节课呢,带大家呢,拿我们这个啊贝特夫速度呢,然后去呃爬一个网页,那么之前呢,给大家去爬过我们刚才这个网站,对吧,嗯,对吧,嗯。Mon啊,然后点。com。好,那我接下来呢,去看一下哈,我们要爬取的,呃,我记得好像上一次给大家爬,呃,给大家爬的是这个圆柱对吧?那么接下来是这样的哈,这节课呢,我们就爬一下这个内容叫圆圈啊圆圈好,那我们来看一看啊,这个圆圈里边呢啊,有非常多的啊这个呃,文章啊,类似原著哈,整不过这个里边呢,可能相对来讲内容没有那么多啊,也不少是吧?啊也不少啊对,好,那是这样的哈,我们要盘取的这个页面当中啊,要盘取什么呢?盘取首先这一个啊,这个是标题对吧?啊然后接下来呢,就是这个作者啊,然后还有呢,就是这个标题,呃,它得有一个地址对吧?哎,我盘取这几个基本信息,然后把这个信息排下来之后呢,哎,放到我们的这个,呃,我们的一个文件当中吧,啊,我们暂时还没有涉及到数据库,对吧?啊,那我们就可以把它放到文件当中,那么要爬的话呢,我们就需要做一个分析哈,就是首先是这样的,在这个页面当中,我们要检查一下啊,看看这个页面的啊,数据的分析应该如何挖掘哈,那是这样的哈,打开这个位置,那这个是当前的这个叫做什么啊,这个当前的一个呃,文章的标题啊,那这是我们想要的部分,然后这个文章的这个链接地址是不需要的,对吧?啊文章标题和链接地址以及啊这个作者。
01:41
看一下有没有坐着。作者应该是有的啊啊,他还有一个时间对吧?啊,时间我们也要啊呃,作者在哪个位置,我们去找一下,他都坐着,这是坐着的,应该是有的啊,就来在发布者啊,这就是这都是咱们,呃,这个轩辕地的这个同学哈,然后发布的这个信息,好,那这样啊,我们来看一下,就是这个信息。
02:00
啊,我们把它抓取下来啊,怎么去要他,当然前面这边还有这个叫做这个标签,就是一篇文章,它有几个标签属性对吧,那这个我们暂时不要啊,就我们要这些数据,那么如何去把这个内容做一个获取呢?是这样的啊。首先我们找到这个网站对吧,然后接下来呢,向他发请求,得到了这个网页的源代码之后呢,我们就开始分析这边有多少张这样的文章,也就是符合这样的要求的数据,那么我们包括啊,包括最后一个我们也得看一看是吧,它是不是也是这样的格式和要求,比如。最后一个不是了哈,来看,大家可以看一下最后一个不是,最后是什么。最后这个是分页1234页啊,来看看啊,最后这个是分页哈,啊,除了最后这个表之外,其他的啊,前面的这些应该都是我的每一个的文章,对不对啊,每一个文章啊,那这样啊,来把这个内容CTRLC复制一下啊,复制一下这就我们待会需要的内容对吧?啊这样我们来把地址先复制一下哈,然后打开我们的排场编辑器,然后我们在这里呢,先创建一个新的脚本,在这里来选择右键啊创建新的,那我们说E2个对吧,第二个我们P新脚本,我们在它啊这个ES4。实弹啊子弹,然后呢,呃,这个叫。
03:01
呃,学习园地。嗯,均原地,然后我们的圆圈吧,圆圈。啊,这个圆圈还不是这个圆哈,圆圈圆圈我看看啊第四个话,嗯,好这样一个内容啊好,首先我们分析一下哈,分析啊爬取的啊,爬取的内容啊内容和啊爬取的这个数据吧,啊数据啊,首先第一个就是这个数据源在哪个位置啊,数据源地址,源地址那地址就是它的URUR就这个位置对吧?好然后我们选要的这个数据内容啊,都有哪些数据内容呢?就是我们这个文章的标题标题啊然后呢,文章链接啊,文章的链接,链接就他的UR对吧,然后还有作者。啊,作者以及发布时间,发布时间。啊,我们就要这么几个呃数据哈,那么把它拍下来以后呢,我们接下来呢,啊,使用的这个呃,这个内容和工具都有哪些呢?师带了哈来工具啊,我们想要的工具啊,首先第一个Python是肯定要的,对吧?然后接下来呢,我们这个PY里边有一个request re ests对吧?那么接下来呢,我们还要用到我们的这个必对付速度是吧?啊BS我这里写简写啊BS4啊就这样的工具啊,然后把它呃排下来,那么最终实验的结果是排取到一个文件当中就可以了。好了,这是我们当前的一个任务哈,那么大家可以去思考一下我们如何去用,通过上节课我们所讲的这个BS4的这么一个操作哈,然后把它呃给排下来,其实BS4里边呢,它主要就是在上节课给大家讲的,有三种方法对吧,来家看一下啊。
04:33
啊,第一种呢,是通过。嗯,通过这个target的标签来获取这个文档数据,第二种呢,通过搜索来获取页面中数据,然后第三个呢,是使用这个叫CS选择器,对吧?这三种方法你用哪一种都可以啊用呃,就是都用也都可以没问题啊,就是呃,他给你提供的这些用法对吧?啊,可以非常灵活,你想怎么来都可以好那么接下来我们来看一看我们如何去实现这样的一个过程,首先第一步我们得iport啊,导入IM q rt,导入我们的request时,这是第一个啊,然后接下来呢,是from我们当前的BS4IMPORT,导入我们那个be beautiful,对吧。
05:05
我看一下有没有错啊,没错,好,那么接下来呢,我们来看一下啊,首先第一个啊,要定义请求的UR,定义请求的啊UR和请求头和请求头对不对,那么接下来第二步呢,哎,就要发送,哎第二步是发送。发送请求请求,然后第三步呢,啊,第三步是检测请求,检测就判断请求。是否成功?成功并获取啊请求的请求的原数据啊原数据。源啊叫源代码吧,源代码好,然后呢,接下来第四步呢,是开始解析数据对吧?哎,解析数据啊,第五步开始往里写入可以了啊,那么第五步就是写入数据。写入。来写入数据,好,那么嗯,整个过程哈,一共分为这么几个大家的步骤啊,首先第一个我们来看一下啊,这个U儿的定义,第一个UR等于我们当前呢,呃,哪个呢,上面这个例子啊,上面这个例子来CTRLC复制一下放到这,然后接下来呢,还有head对吧?啊请求头1S,那么在这里呢,请求头我再说一下啊呃,我们已经强调过请求头的一个重要性,虽然我们当前访问的这个学源地这个网站呢,并没有啊,并没有对我们的这个启动头呢做任何限制啊对。
06:14
但是建议大家呢,就是在发请求的时候,所有的请求当中了啊,都去加上你的请求头啊,万一给你限制封了IP,你后悔莫及对吧?嗯,来,我们把这个内容啊复制一下来,CTRLC这个userrl啊,它是必须要的啊,必须要的啊。呃,其他的你说可以加可以不加是吧,可你的自己的选择和情况来看啊,但是这个U的啊,这两个必须加的好,那么接下来呢,我们就可以发送请求了啊,发送请求的话,As等于我们的叫request.get啊发送一个请求,第一个是我们6R,第二个是我们的head等于我们的head,好那么发送请求以后呢,我们接下来我们去判断一下当前的请求是否成功,那么res.studio的啊,Studio是够的是吧,它的结果如果等等于200,那就证明我们当前请求成功了是吧?哎,请求成功,请求成功以后呢,我们就可以再进入下一步对吧?好,那么下一步呢,就是解析数据啊,开始写入。
07:00
来往这里走,那么呃,提取这个数据,呃,我们看一下啊print,呃,看一下re res.T来看一下啊,先这一步啊,先测试一下来运行我们当前的脚本。好,没有问题吧,啊没问题啊,他已经啊成功了,已经成功拿回我们的数据哈,那么拿回数据以后呢,我们下一步要做的就是在这里面啊,去提取我们想要的啊这样一个数据内容啊,那么怎么去提取我们这个呃,想要的这个数据内容哈。那么就得呃需要使用我们这个啊,Beautiful soup啊啊用我们的BS4来做这样一个操作,Soup啊,So啊等于谁呢?等于我们的这个叫呃,这个beautiful so这个类实例化啊然后第一个呢,是要把res.T,放进去,然后接下来呢,还有一个解析的方式,R叉M解析,那么接下来呢,就是从这个里面呢,去提取我们两的数据,对吧,首先第一个获取。获取页面中,页面中所有的所有的文章,文章文章大啊,文章的这个大D啊,因为你要获取的是呃,不能一下子就获取到全部哈,来我们看一看啊,在哪里获取。
08:04
来审核一下元素啊,找到这个位置咱们看一下哈,来把这个折一下之后大家能看清楚啊,这是一篇文章,这后边也是一篇文章,那么一直到最后对吧?大最后一个不是然我们刚上啊,刚才已经给大家看过了,它就会是一个这个叫什么?呃,分页是吧?啊,那我们暂时不用管它哈,那也就是说我们找到页面中这样的数据就可以了,那怎么找呢?我们通过class属性来找来CTRLC,直接把C复制过来。呃,怎么做呢,来das。等于我们的so啊,点上一个select啊,我们可以用select去做这样的一个操作,对吧?好,那么呃,Select做操作的话呢。嗯,我们去看一下,呃,找到这个元素,哎呀,但是这样的话。我看看啊。这样行不行啊?哎,我们用这个叫das,等于我们的soup soup点我们用find的哦。来获取获取啊,首先它得是一个D对吧,另外呢,就是它的卡拉属性拉属性,哎,把刚才那个诶sorry啊,把刚才这个class给复制过来。
09:06
来框LC复制一下啊,放到这啊,然后呢,这个class这个位置啊,要加一个呃,要加一个什么,要加一个这个下拉线啊,一定要加啊,加上这以后呢,我们看一下哈,这里面都会是我们当前的一个数据,那么怎么证明呢?是这样的,这个里边它不是有这个当前文章的一个标题嘛,啊我们如果能拿到这个这个里边的标题的话,那证明是不是就成功了,哎就怎么做呢?来复啊这个位置判实复制。啊,我们做一个后循环。I in啊,我们当前的divs啊,然后呢,Print当前的I点啊,So啊,呃,点什么呢?点这个叫find的括号,找到它里边的,呃,什么元素呢?我看一下啊。呃,它这个标签是一个什么,四个div标签是吧?啊好,那我们自己写一个D啊,然后下边呢,写一个class class,然后别忘了加下线啊,Class要加下线在这里,好,然后加入它,那么看到这个结果以后,我们再去获取它的text来看一下内容啊,来运行我们当前的脚本看一下。
10:04
好,前面的都没有问题是吧?啊,最后一个报错啊,最后一个报错,最后一个报错,他说没有找到这个text,也就是其实你连这个都没有找到啊,其实连这个都没到,为什么?你看既然S创建对象应该是我们这个文章啊,这个文章里边的最后一个了,来我们这个往下一点啊。来往上啊,看看既然创建对象是不是我们最后一个对吧,在之后他获取的是这个这个里边肯定没有这样的D,对不对,所以他就获取失败了啊,所以呃,这个地方是有问题的啊,那么这个时候我们怎么办呢?看一下啊,我们做一个判断就好了。只需要在这里做一个判断啊,If就是判断谁呢if。呃,我看看啊。在这里这样去做判断。我们这样做。放到前头。啊放在下面,呃,我们在这里啊,写一个电量反而等他。啊,这是获取的这个文章的,文章的这个。这个信息是吧,好,然后呢,我们下边做一个判断,If当前的R的结果如果为真,那我们再去,哎,打印它的结果来看一下页面啊。
11:02
这样话就把它跳过去,他报错了,跟我没关系是吧,我不想要来看这是不是没有问题啊,没有问题啊,但是就有一点就是当年你看你看这个位置啊,你看这个位置的处理,他这个这个文章,因为他在这个地方是画行了,对吧?画行以后呢,它后边还都有每哎每个后面都还有个东西哈,所以我们需要干什么啊,对这个内容呢,再进行一个处理来看好了好了。啊,它都有这个东西啊,所以我们需要对它呢,再进呃进行进一步的处理,那么怎么去处理呢?说说白了就是画行之后的内容,我就不要,我都要画上之前的内容,那怎么做呢。我们看一下哈。在这里点上,嗯,点上我们的一个sprit是D的放哪,然后呢,用我们的杠N-N。诶,我打错了S。PLIT。我打错了。我感觉我没写错。SP rit啊,然后杠N,然后中二零。来运行一下看一下,我感觉我没写错啊,来运行一下,我们看一下结果。来往前提快点快点快点是不是就正确了,对吧,这就没问题了,也就是说杠N之后的内容,我我用杠N换行,把当前的这个文本字号直接切成一个数组,然后只要前面的第一部分就后边的我都不要了,我甭管你后边有多少啊啊就是只要前面一部分啊,这样的话能够提取到我们当前的一个文本内容啊好,那这样的话提取到文本,那么这个里边除了文本以外,还有它的叫什么其他内容是吧?好,那这样做啊,我们看一下怎么去进行一个这样的处理啊。
12:22
嗯,我们在这个位置呢,去定一个,定一个变量啊,定一个变量来接收这个,准备接收这个数据啊,我们叫他list的,List的等于一个中号对吧?好,然后呢,之后呢,我们这个。我们之后看一下。带点饭的没?难道我每次都要做饭吗?我们要把它组装成数据的话,每次都做个判断好像也有点麻烦,来这样我们先先把它写一下,先写。好,我们这里写一个Y,呃,Drct VR drct dict啊,等于一个字典,这个字典中呢,第一个是文章的标题对吧?啊,文章标题放什么呢?就是放我们刚才获取到的内容,然后呢,完事以后呢,每一次循环完成以后,我们把这个叫什么啊腕list的点啊,Pen啊,就是把我们的呃刚才压缩的一个字点给它压进去,那么之后啊,等我们这个解析都完事以后,我们头脑看一下整体数量对不对啊。
13:16
运行我们当年看一下。这是不是都进来了啊,PP操作RA的基本方法是吧?啊RA生命周期的变迁什么啊,诶这都是无邦图的对吧?啊都是啊都没问题啊都没问题啊都有了好都有了以后呢,这只是我们文章的标题抓到了对吧?好文章的标题抓到以后,我们除了文章标题还需要什么呢?来再继续看啊,我们除了文章标题我们还需要哎这个文章的这链接地址啊,文章的链接地址我们看一下链接地址怎么去找呢?看一下啊,这个里面的第一个A链接就是了。第一个A链接看一下啊。A链接的哈属性第一个A链接的哈属性第一个A链接的属性,我们看一下怎么去处理啊,在这里print看一下啊p print看一下当前啊R肯定不对了啊,当前的I啊,然后点嗯。
14:10
点我看一下,点我们直接用A标签行不行。A标签点T。看下来我们。嗯,A标签打开。我不要他的,我们想的是他的这个什么。嗯,它的这个属性,所以说A标签的啊,HRRF是吧。那这个。Hard出去,诶诶这样就找到了是吧,好找到这个内容以后呢,来继续CTRLX再往这里方来,这个叫URL括号,然后等这个地方对吧?啊这样的话,这个文章也找到了啊啊,文章的这个标题和这个叫什么?呃,链接地址都已经找到,然后接下来就是。再去找他的那个作者。坐的在哪?
15:03
下边的实状。这里面应该只有一个时装,时装下面的A标签,然后这个应该就是它的作者对吧?好,那看一下怎么去找啊,当前I标签,当前的I。里边的。啊,看一下这个叫时状标签。来石状里面的。里面的标签。点a.a然后点。看一下对不对,运行脚本总结。下来没有问题对吧,啊,这都已经拿到了是吧?啊都已经拿到了,好,那么拿到它以后,这就是我们当前的一个作者是吧。好,CTRLC复制一下。啊,这位的啊,来一个作者是。呃,Ho,是吧,然后把这个内容放走好,然后剩下还剩一个呢,还剩一个什么,还剩一个时间是吧,哎,时间就是下边的。我看一下这个SPA是不是唯一的一个啊,因为我们刚才找的都是按唯一找的哈。如果找不到唯一的话,那就肯定有问题。
16:07
这个是判标签,看一下是不是这里面唯一的。哦,正好是啊,应该是哦,好。那可以了,那我们就找到这个SPA就好了,那就是找到这个里面的盘标签啊,然后获取的是它的属性啊,来这里边是I里边的是SPASPA这个标签对吧?然后我想要的呢,是它的这个属性值啊,并不是它这个十料是多少个小时啊,要这个属性值啊,来那这样的话把这个属性能拿过来count c复制一下。放到这个位置看一下对不对,来运线找个中点。哪里有问题啊?嗯。没有找到。没有走。看一下是不是别的也是这样的啊,我们从第一个开始看。你确定一下这个内容应该如何去获取啊,不然的话,你获取的可能就是有问题的啊,来把它展开看看。
17:02
磁盘标签。那个属性写的并不是。感觉不是特别规范。看一下实盘标签有没有拿到,那就是把它先干掉啊,我们直接打印这个内容,看一下实盘有没有拿到啊。啊,拿到了,拿到了之后可以确定的是拿到了啊,这种是开。他还不是啊,那那那。到到。来这样来运行当前的脚本走你。拿到了时间都有了啊,好了,那那就齐了,把这个CTRLX放到我们这个字典的后面,来来,嗯,前面这个是文章标题,这个是我们的文章地址啊,这个是。作者,然后再之后就是我们的叫什么啊,就是我们获取的这个时间啊,时间这个叫PU pub啊Li。QBI叫什么?
18:02
叫pub date吧,嗯,这个就写一个时间可以啊,来把这个时间放在哪啊,时间放在哪好,那我们看看还有没有别的问题,没有了,最后呢,我们去看一下这个数据啊,是不是我们想要内容看啊,一个文章里边,文章的标题,文章的这个叫幼儿地址,然后作者以及他发布的这个时间啊,是不是都写了好剩下的就干什么,甚至就是写入了,写入的话怎么写呢?来看一下啊,List。啊,我们的open,然后呢,写入一个当前啊叫做。呃,圆圈点接省啊这一个面念好吧,然后呢,之后呢,这里边写W的一个模式,开始写入啊写入写入以后我们is FP对不对啊FP,那么接下来FP.me啊T开始写入,写谁呢?我们看一下我们能不能直接把这个MAT是无法直接写入,无法直接写入的话呢,我们还需要用我们的接省对吧?啊用接省开始写,那这样上面再导一个接省啊,导一个接省模块。那这样的话就是我们的,呃,Jason点啊dump,然后第一个是我们的。
19:01
看一下第一个是谁。节省点大吧。然后。大码大码。第一个是写入的对象是吧,好,第二个呢,是这个叫文件对象啊好,那就是这样,那就是把这个叫什么,我们当前的word list写进放进去,然后呢,第二个是FP的对象,好了,那我们测试一下啊,看有没有问题,来运行我们刚才的脚本走你。好,运行完以后,那么我们看一看这个脚本有没有创建来啊,圆圈点接省对吧?来打开文件看一看啊,数据是不是全部都写入了啊,全部都写入啊,这就已经成功了啊,这就是OK了啊好,那么这个建证的数据这样就写完了啊,这就我们当前的这么一个脚本,当然了,这个里面呢,我也没有做任何的封装,没有做任何的操作,就是按照我们的逻辑顺序啊,从上到下啊把这个内容给大家写完了,当然呢,大家可以去思考一下,我们如何把这个内容呢?诶给做一进一步的一个优化啊就可以了,好了,那么这节课呢,我们就到这里,下节课呢,带大家呢,把我们这个代码呢,再做进一步的优化和调整,好了,那我们呃,下节课再见。
我来说两句