00:00
OK,同学们,那么接下来啊,我们要继续去学习这个解析的第三种方式叫啥呢?叫做beautiful soup,那beautiful soup在我看来它和叉帕是同一重量级的这样一个技术,对吧?那到底啥是beautiful soup呢?哎,什么是它,它的优缺点又是啥呢?我们接下来给大家介绍一下子,首先在我们的这个企业级开发中啊,它有个简称beautiful soup,简称叫啥呢?叫BS4啊BS,那到底啥是beautiful和负呢?其实啊,它和这个L叉L一样,它都是一个HL解析器,都是为了解析这个源码的,然后我们获取部分数据的啊主要的功能呢,也是解析和提取数据,但是它有一个缺点,这个缺点其实际上为什么导致很多人不喜欢用这个BBS的原因是因为啥呀?因为他没有这个LXM效率高。所以我们有的时。
01:00
时候呢,使用使用叉P的这个这个情景比较多,那么它的优点是啥呢?它的优点在于它的接口更加人性化,使用更加方便,为什么呢?其实这句话说出来的话是有是有原因的。因为我们的很多程序员都是在做爬虫之前做过其他计算机编程语言开发,那如果你要做的话,你一定会懂得什么叫接口,你一定懂得什么叫层级关系,所以它所谓的这个人性化呀,指的是啥呀,指的是针对那些有基础的同学啊,但相比较缺点的话,我认为优点已经没啥大作用了啊,它缺点太明显了,就是效率慢啊。当然呢,我们也要去学它,因为确实它有的时候呢,能帮助我们解决一些问题啊啊OK,那我们简单的介绍了一下BS之后啊,接下来我们要咋用,首先各位同学看啊,我们同样也是安装,安装之前呢,咱先别着急,咱先把这个步骤过一下,它特别像叉P。
02:03
安装完之后导入,导入的话它也和叉P类似,也是都是from什么什么之后import对吧,那接下来第三步呢,它还是这样的啊,他咋的,首先它可以去使用。这个服务器响应的文件。它也可以去解析本地的文件,所以说注意啊,同学们,它和谁呀,它和这个叉P是不是特别的类似啊,从使用步骤以及安装来讲特别类似啊,OK,同学们,那么接下来啊,我们就来安装一下这个BS。那么同样的啊,我在这儿,我还进到这个命令行,然后切换到E盘。嗯,第一为就刚才这个冒号是中文的,所以没进去啊,然后CD的pthon,然后CD的script,然后OK,在这里边呢,我们来安装bs type install,然后叫啥来着,叫做BS4别打beautiful soup啊,然后我们引入一个国内圆HTTPS漫画斜线PYPI,点豆瓣点com,杠simple,好,OK,那么我们等待它的安装完成,但OK啊,这要写上successfully呀,已经成功了,当安装成功之后呢,我们的拍charm会执行一下,重新加载你的环境里边的这个东西,OK,那如果他完事之后呢,我们现在创建一个新的文件。
03:39
啊,给它改名,然后紧接着呢,在这写上解析解析啥呀,叫BS4的基本使用,那如果说你安装完了,那接下来我要干啥呀,是不是要导入啊同学们对吧,叫from bs4。哎,然后import import什么叫做beautiful soup OK啊beautiful soup美丽的汤它特别像孟婆汤对吧?美丽的汤,那这个东西它咋用呢?同学们咋用呢?首先啊,我们要通过啥呢?我们通过来解析本地文件来讲解啊,这写上俩字写的通俗一点啊,通过解析本地文件来将BS4的基础。
04:30
语法进行讲解,哎,来将它的基础语法进行讲解,因为这样的话我们好好操控一些,所以说同学们啊,在这我们再去写一个和它对应的ATM文件。那我们在这来创建一个HPL文件啊,起个名字,OK,好,在里边呢,我们就来写一些标签啊,就随便写吧,假如说u Li Li,下边有个Li Li里边有个张三,然后紧接着下边还有Li,再来个李四,再来个Li,哎,这个叫啥呢?叫王五,王五OK,同学们,那我们还可以写写,写很多东西的哈,假如说在这里边我再写个A标签,A标签给它起个名字吧,叫做上硅谷。
05:24
OK吧,哎,就这就结束了,那这玩意儿我应该咋用呢?大家注啊,应该咋用呢?我如何来加载一下这个本地文件呢?同学们注意啊,这么加载,首先soup等于beautiful soup里边有两个参数,第一个参数就是我们的文件啊,文件打开文件open写上啥呢?写上刚才文件的名字吧,那这个文件的名字是谁呀?是不是它呀?来给它rename一下,复制好,这是文件的名字,那这个文件名字我暂时啥也不写,然后紧接着第二个参数是什么呢?叫做L叉L,这是必须的啊,它使用的是L的内核,那我们现在来打印一下这个速法啊,打右键看报不报错。
06:16
报错了,报错什么玩意儿啊,是不是叫JBK呀,对吧?大家这是啥意思啊,我告诉各位啊,它默认打开的这个文件,注意默认打开的文件是啥呢?的编码格式是GBK,所以在打开文件的时候需要指定编码啊,需要指定编码,那咋指定编码来的?在这里边儿有一个啥来着?是不是叫做encoding啊encoding我给他一个UTF杠八,那UTF杠八哎在这写,再给他加个引号,嗯,OK,同学们,我再来运行一下走,我发现是不是就可以了,各位在这里边呢,千万要注意啊,就是默认打开文件的时候,它使用的是GPK,所以在这里边呢,我们如果想打开的话,你就在这儿要指定它的编码啊,指定它编编码,OK同学们,那接下来我们如果能把本地文件加载进来了之后,那么我们就开始讲啥呀,开始讲BS4的基本语法啊,BS基本语法我们来看一下第一个。
07:34
根据节标签名字来查找节点啊,根据标签的名字来查找节点,啥意思呢?大家你看哈,这个页面中我有几个A呀,我有一个A对不对,我在外边再写一个A。啊,再写一个A,那写上一个百度,百度好吧,那现在我要干啥呢?我要在这儿打印一下print。
08:01
soup.a啊,直接速点A,那么我想问你的一个问题是,请问啊,请问同学们,我这个返回的是谁?是第一个A,就是Li ul里边这个A还是ul外边这个A啊,这个时候我们需要去探讨的,那同学们看一下右键走,嗯,发现是谁呀,第一个A对吧?所以说在这里边我们要写上一个小注意,嗯。找到的是第一个符合条件的数据啊,第一个符合条件的数据OK,明白吗?各位好,那接下来啊,在这我们再说一个哈,再说一个大家来看哈,它叫at ts,那这个东西是啥呢?来我们来看一眼,大家来看啊,来print soup.a.ATTRS,我没有这个,它没有提示啊,没有提示也没有关系,我们来看一眼来走。
09:07
大家来看它是返回的是啥呀,返回的是标签的属性吧,在这我再给它ID啊,这个ID好我们再来运行一下,同学们你看。你看是啥呀,是它吧,哎,之所以都是后边是空,是因为没有值,所以说这个东西at ts是获取标签的属性啊和属性值啊,获取标签的属性和属性值OK啊,这是我们最简单的一种应用啊,最简单的一种用好同学们我先把这个注释一下啊,先把这注释一下。然后紧接着呢,现在我们要干啥,我们要讲这个beautiful soup的一些函数啊,讲BS4的一些函数,这个函数呢,我跟各位同学讲,这个函数有三个啊,啥数三个,第一个是什么呢?叫做find啊,第一个叫做find,第二个叫啥呢?叫find out。
10:16
啊,Find的下划线啊,啊不要写错啊下划线啊第三个叫啥呢?叫做select,哎,我们要讲它的这个三个方法啊,或者说三个函数都可以,那这三个函数呢,各有各的特点,那有同学老师,那我将来用哪个呀,跟各位同学讲啊,他们三个将来是组合着用的。啊,不是说单独的用哪个,而是组合着用,组合用最高效啊好,那接下来呢,我们就挨个来讲啊,我们就挨个来讲第一个啊,Find,那就print,那同学们你猜一下啊,soup.find如果里边要写一个A,那么请问同学们它返回的是什么?它返回的是什么?
11:04
猜测一下是所有的A呀,还是第一个A还是最后一个A呢?来我们来运行一下走,我发现是不是第一个A呀,它好像好像和触点A是不是差不多啊,所以大家要知道啊,这个里边它是返回的是啊第一个符合条件的数据啊,返回第一个符合条件的数据,OK吧,各位,哎,那紧接着我们来看一下,说这里边儿啊,我们还有很多。啥呢?我就要,诶这个页面我给它拿过来啊,在这我给它加一个title啊title title的值呢,随便给一个,假如说叫A2啊,随便写对吧,那么好同学们,我现在呀,我可不可以通过我们的title来找到我们第二个A呢?就直接print soup.find soup.find里边要找的是谁呀?找的是A吧,找第几个A呢?找哪个A呢?等于title等于啥呀?等于一个叫A2啊A2。
12:16
明白不?各位这样的话,我我想证明的是啥呀,我可以通过这个条件来找到对应的标签,好同学们,我把这个运行一下,嗯,你看是不是找到它了,所以在这里边呢,它的作用是根据。Title的值,来找到对应的标签对象啊,对应的标签对象,OK,同学们,这是第二个算算的方法的第二个使用,那么紧接着我们再来一个说啥呢?说要用算的方法来找一个class吧,来找上给谁呀,给它再写上class class等于谁呢?等于这个叫做A1啊,叫A1,那现在我们就写个通过class来找呗,看行不行呢?
13:07
打开啊,来写上print。然后soup.find里边还是一个A,但是第二个值我们是不是根据class来做的呀,等于啥呢?等于A,一有细心的同学可能不不管,不能说细心啊,就是你不细心,你是不是也看到了,看到啥了,如果你这个写个class咋的了,同学们是不是直接报错了呀,为啥报错呢?我给大家讲解一下啊,原因是因为class这个东西啊,是本来Python或者爬虫中就用到了一个关键字,那么你就不允许再用了,它有一些特殊的功能,所以你就不能再去用它了,那举个例子,假如说我们在这个封建社会那个时候,假如说有皇上。有皇上的话,人家叫什么什么什么什么什么什么之类的,那你平民百姓,你还能跟皇上叫一个名吗?
14:00
可以吗?是不是不可以啊,这就相当于那个例子,Class,人家在出生的时候就有意义了,就已经被应用了,而你就不能叫class,那有同学老师,那我还要必须得通过class来来做咋整啊,那我告诉各位啊,你可以在这给它加一个下划线,那它既能代表class,它又不是class了啊明白不?各位好同学们,那我现在干啥呀?来运行一下它走嗯,你看是不是就找到了第一个呀,大家注意啊,这个class属性是比较特殊的,来写上,根据class的值来找到对应的标签对象,然后注意的是class需要添加下划线啊,需要添加下划线OK啊同学们,这个现在呀,我们就讲三讲了三个方法。啊,饭的方法的三种使用吧,不能说三个方法,饭的方法的三种使用啊,注意,那同学们我们来看一下啊,这个饭的方法完事之后我们还有一个什么呀,来看一下是find out在这里啊find out,那find的方法和find out它们俩不同之处在于哪呢?同学们,我们来看一下你之前返回的是不是都是一个对象啊?
15:21
对吧,但是find out呢,我们来看一下,首先我们来直接打印哈。soup.find在这里呢,我们使用的是这个啊,Find find,那这个find里边我们如果写个A,大家猜一下它返回的是啥对吧?你得有技巧的去思考,那么我们现在来看一下结果走你我发现呢,它是不是返回的一个列表,并且将所有的A都返回了呀,所以在这里边是写上说返回的是一个列表,并且返回了所有的A标签,对吧?各位,诶,这是范德奥的一个特点。
16:05
当然呢,他还有一些其他操作,那假如说我现在想找到这个再加俩标签啊,在哪呢?在这再加一个其他标签,加一个SPASPA来个啥呢?来个哈哈哈哈哈哈,嘿嘿嘿也行啊,好OK,那现在呢,我要找到所有的A标签和找到所有的SPA,那么我们怎么做呢?来直接print soup.find all。翻到翻到里边我们要咋写呢?对吧,同学们有的老师那这个还不简单,写个A,写个逗号,然后写个span,我们来看看啊这种行不行,来我们运行一下,同学们走,我发现呢,是啥都没有的,为啥啥也没有呢。那这个和啥呀,和它的语法结构相关的,注意啊,同学们,很多程序员在这都容易犯错,你直接就写了两个标签,而则不然,我们必须要干啥呀,给它放在一个列表里边,只有把它放在列表里边,我们才能是真正的返回的走。
17:17
看到吗?大家,哎,这样的话就可以了,有个A,有个span,还有个A,所以大家注意啊,如果想获取的是多个标签的数据,那么需要在find all的参数中添加的是列表的数据啊,千万要注意啊,列表的数据。OK,那么紧接着呀,同学们我再看一下,我获取所有的Li来看一眼,咋写呀,是print soup.find on啊,别写错了,Find on,那在里边呢,写Li,同学们我们来打印一下走,嗯,可以吧,有三个Li,但是呢,我如果只想要两个Li,那咋办呢?大家注意啊,在这里边有第二个参数,这个参数叫做limit啊,Limit是啥呢?是你找前几个的数据啊,前几个的数据我们来看走哎,是不是张三李四没有王五啊,所以说大家注意啊,这个limit作用,Limit的作用。
18:28
是查找前几个。啊,前几个数据千万注意啊,查找前几个数据,这个就是find,大家注意啊,Find和find out我们都会去结合去用去啊,不一定就到时候我们用哪个啊,那同学们,我们这两个方法讲完之后呢,我们再去讲一个方法叫啥呀,叫select,这也是我们在使用这个BS比较推荐的这样一种操作,但是一般情况下呢,它会结合find和find out去使用,好同学们,呃,那么接下来我们来看一下这个select它如何去使用呢?
19:11
它有五个用法,第一个用法啊,它是啥呀?它是可以通过标签啊,就element通过标签来获取节点对象,假如说是这样的说print,然后来写上soup.select来写个谁呀,写个标签,假如说写个A,那同学们你猜一下它是返回的是一个A呀,还是多个A呢?那么现在我们来运行一下走。怎么了?是不是返回多个A啊,所以说大家注意啊,来写上select方法返回的是一个列表啊,并且会返回多个数据啊,这是它的一个特点啊,会返回多个数据好OK,同学们,那么紧接着我们再看一下,说它还有什么东西啊,还可以根据类选择器,啥叫泪点就class啥意思呢?
20:09
各位同学,我们现在来看一下,说这里边啊,是不是有一个它呀,对吧?诶它可以根据这个class的属性来找到这个A的标签,那这个怎么去找呢?我们来看一下,说在这里边直接print来写个soup.select那在这里边呢,我们写上点叫啥来着,它叫ae吧,对吧?你如果是这个带class的,你就前面加个点,所以说大家注意啊,带class的前面加个点就可以了啊,这个点是代表class,那我们来看一眼走,你看是不是我们的上尾骨啊,对吧,它等于ae,所以在这写上注释。可以通过点代表。Class,我们把这种,我们把这种操作叫做啥呀,叫做类。
21:11
选择器啊,叫做类选择器,嗯,这是前端的一种说法啊,前端一种说法好同学们,那在这儿还有一种叫啥呢?叫ID,什么叫ID呢?大家来看一下啊,在这里边我们给它一个ID,随便给一个啊,给他写ID等于L1。L啊,小写的L,那我可以根据这个ID来找吗?那ID又是啥呢?那么同学我们看哈,在这写个print,来个soup.select来加一个井号叫L1,这也是可以的啊,同学们我们来运行一下它。走哎,是不是ID等于L1啊,这也都可以啊,还有一些属性选择器啊,属性选择器OK,那我们来看一下还有啥呢,在这里。
22:04
我们可以根据它的一个属性来操作啊,假假如说我们根据它的类选择器对吧?属性选择器我们该如何使用呢?那假如说同学们看这里啊,在这呢,我们有这个ID为L1,也有ID为L2的,那现在我想获取的是啥呀?Li标签中有ID的那个对象,那么现在我们来试试啊,来写上这叫属性选择器啊选择器,那我们现在要做的是啥呢?就是查找到Li标签中有啥呢?有ID的标签啊标签,那么同学们我们可以直接这么写一下,叫print,然后soup.select大家注意啊,你现在不要找Li吗?那么Li里边有class,大家注意啊,我们要使用的是中括号啊,中号里边直接写一个啥呀,写个ID。
23:04
这就代表了啥呢?我们Li中有ID的这些标签,那同学们我把它运行一下,大家来观察走你,哎,我们发现是不是可以啊,哎,都是带ID的,所以说所谓的属性选择器呀,其实直接解释一点就是啥呀,通过啊,通过属性来寻找对应的标签,通过属性来寻找对应的标签,OK吧,各位,那紧接着说,那现在呢,你这ID可有很多呀,对吧?你ID很多,那我能不能找到什么呢?能不能找到ID为L2的这个标签呢?对吧?哎,那现在我们来试试,来先写一个注释啊,这叫查找。到Li标签中,ID为LI2的标签啊,ID为L2的标签,那么现在直接print soup.select然后在里边写上Li Li之后呢,在这它是不是代表的是所有的ID啊,对吧?各位,但是在这里边呢,我们要找到的是ID为L2等于啊,再加上引号叫L2,那么这样的话我们就OK了啊同学们好,我把这个来运行一下,来同学们观察走你我发现是不是ID为L2的了,对吧?各位,哎,所以说在这呢,这种属性选择器将来我们用的会多一些,一会儿啊,我们做案例的时候大家就明白了。
24:35
好,同学们,那接下来我们再看一个什么东西呢?叫做层级选择器啊层级选择器呢,大家通过这俩字层级我们能分析出它是啥,谁谁的下边,谁谁的后代,谁谁的子代和啥呢,同级这样都可以,无非我们就学三个,一个是空格,一个是大于号,一个是逗号啊那么它三个分别代表的是啥呢?那同学们我们接下来来构造一下这个页面啊,然后来未来讲解它。
25:07
嗯,我在谁呢?我在这个ul的外边吧,啊在ul的外边,我再给它套一层div啊,再套一层div给它剪切一下。嗯,然后给它粘贴到这里,诶OK了,那么现在同学们,我如果说我想获取的是div下边的Li,我们有几种方式去写啊,有几种方式去写,那么在这呢,我们来看一下,说第一个我们要讲的是啥呢?叫做空格,哎,空格对吧,它是层级选择器里边第一个我们来描述一下,在这叫层级,也叫层次选择器都可以啊选择器那第一个呢,我们用的叫做后代啊选择器啥叫后代啊同学们。那假如说有张三,张三他儿子张四,张四他儿叫张五,那张五算不算他后代呀?
26:03
这没问题吧,各位,哎,所以说在这里边呢,我们是可以这么去说,也可以这么去解释的啊好,那各位同学我们来看一下,我要找到的是要注意啊,要找到的是div下面的Li啊,Div下边Li,那我们能不能直接这么写呢?来soup.select。然后在里边写上啥呢?写这种选择器咋写呀,叫做div空格Li,这个空格很巧妙,同学们你要知道它代表着后代啊,代表后代,来看一下是不是我获取了div中所有的Li,张三李四王五啊。对吧,各位,诶,那这是啥呢,叫做后代选择器,那在这个之后呢,还有一个叫子代。哎,选择器,那啥叫子代选择器,同学们,儿子呀,孙子那能有吗?那不开玩笑一样吗?是不是?所以说所谓的子代选择器就是啥呀?它的某标签的某标签的第一级子标签啊,第一级子标签是这样的,那么现在我们来使用一下叫soup.select那么这个咋写呢?假如说div写个大于号,大家注意啊,写个大于号Li,那这个行吗?我们来试试啊,看一下返回的是啥是空,为啥是空呢?同学们,你div的儿子不只有一个u Li吗?你写什么Li啊,他有吗?他是不是没有啊各位,所以在这里边呢,你可以这么去写他的u Li下边的Li,理解吧各位,你这种层次关系得整明白了,啥时候通过孙子走,啥时候通过他的儿子走,这个希望大家。
27:56
啊,要搞搞动一下啊,而且这里边倒没有说一定要咋样啊,倒没有说一定要咋样,你到底是始于这个后代呀,还是使用子代,这无所谓的啊来走你我发现是不是就可以了,但是这里边啊,同学们注意它有一个bug,啥bug呢,就是在这里边,在这里边他如果说他的空格要没加,我们来看一眼啊,它的空格要没加的话,我们看走你我发现诶行不行啊也可以对吧,哎也可以,这里边注意啊,很多的计算机编程语言中。
28:38
啊,语言中如果不加空格会报错啊,不是会报错,就是不会输出内容。但是呢,在。这个BS4中不会报错啊,不会报错,也也会显示内容。
29:00
啊,会显示内容,注意啊,这是一个我们需要注意的地方,因为如果你要有其他计算机编程语言基础,你在这儿你可能干啥呀,你就这个不会写这呃会写这个空格,但在这儿其实写不写无所谓的啊,同学们在这儿都可以的,千万注意啊,OK,我们再来运行一下,你看是不是都行啊,好,同学们,这叫啥呢?这叫子代选择器,当然呢,还有一种,假如说这个叫组合,什么叫组合呢?现在我想找到啥,我想找到这个A标签和Li标签,我要找到这两个,那我们应该咋办呢?同学们对吧?来来,找到A标签和啥Li标签的所有的对象对吧?那么现在来print soup.select然后在里边写的是啥呢?写的是这个这个第一个A标签,同学们注意啊,我们在饭道里边中间是不是加了一个列表啊?
30:07
对吧,你是不是加了一个列表啊,而在这我们不需要加列表了,是A,然后逗号Li,我们来看一下结果来走好,同学们,你看是不是Lia标签所有都拿到了,我认为这样的话会稍微的人性化一点,你要加一个列表,其实有的时候啊,我们就不是很好的能去理解,所以说在这儿呢,这个BS有个优点是啥呀,就是接口更人性化,使用起来更加的方便,这个就是啥呀,这就是我们的一个优势,也是我们的一个优点,同学们,那我们接下来呀,还有一点东西要去学习叫啥呢?叫做节点信息,那么这个节点信息呢,我们分了三个模块啊,第一个就是它,第二个是属性,第三个也是属性,但是它的方式不一样啊,那么这里边我们要学的第一个是非常非常重要的,那他能干啥呢?同学们,我给大家先说一个啊,假如说在这儿啊,我有个A标签,A标签里边呢,有一个叫百度一下。
31:08
对吧?那么还有一个它的结束标签,我如果想获取里边的内容,那我们应该怎么做呢?对吧,你叉pass呢,你可以调用直接test,对吧?但是我们的BS好像学到现在,我们还没有任何的方式方法来获取里边内容吧,对吧,各位,所以说接下来呢,我们要学的第一个就是使用的string或者get test来获取里边内容,那现在OK同学们,我们在这儿啊,先把这个图先下一个画一个啥呢?画一个相关的这样一个标签结构,假如说我们的div div下边呢,还有个SPASPA里边有一个,哈哈哈,那有个哈哈哈,OK同学们,那这里边呢,我再给他个ID吧,ID的第一好,我要干啥,我要获取这个,哈哈哈,对吧,你要咋办?所以在这里边呢,同学们,我们第一个写的这叫啥呀?这叫节点信息的一个模块,节点信息那第一个呢,我们写的啥呀,叫获取节点内容啊,获节点内容,OK,那我们要。
32:15
获取它,我是不是获取这个内容,我是不是先得获取它的这个对象啊,对吧?所以在这里边写个OB勾等于soup.select里边大家看啊,是不是有个ID啊,等于de,所以在这我们写一个井号de这个对象是不是就来了,但是我记得我跟大家说过,同学们select这个方法,这个函数它返回的是个啥呀。是一个列表吧,各位是不是一个列表,那如果说列表的话,我们能去调用这个string的这一个东西吗?我们来看一下啊。好同学们,我们来运行它,你你发现它会报错的对吧?那为啥报错呢?为什么呢?因为他说了啊这个结果啊,它没有这个,呃,这个属性叫string没有对吧?为啥没有呢?原因对不起了,列表是没有string的,我们是不是通过标签的对象啊,你要的是不是这个div啊,所以这里边既然它返回的是列表,那么我们就可以通过下标的方式来获取到列表里边内容就可以了,听懂了吗?各位在这在我们开始写爬虫的时候,大家千万千万要注意啊,那我现在来运行一下走。
33:35
哎,你发现我为啥没获取着啊啊,为啥string没获取着啊,那别着急,我们不说还有一个获取的方式吗?OB勾点get_test呀,那我再来运行一下,走你发现线诶,它就获取到了,虽然中间有很多空格啊,你不用去管,这是它一个区别,那我就知道了,为啥会这样,我得了得了解了解呀,那大家先不慌啊,我先把这个span给他干掉一下,我再来运行,你就知道它们的区别了,首先我两个哈哈哈,是不是全部都拿到了呀。
34:13
但为啥我在哈哈哈的上边再加一个SPA,它就获取不到了呢?同学们,这是非常非常重要的一件事情,写上啊,写上这样一个小区别啥区别呢?如果这个标签对象中。只有内容,那么啊,STEM和get test啊咋的都可以使用。但是如果标签对象中。除了内容还有啥呢?还有标签,那么就获取不到数据。而get。
35:04
Test咋的是可以获取数据的,对吧,是可以获取数据的,所以说同学们一定要注意啊,我们一般情况下。推荐使用啥呀?Get小线test明白不?各位诶,推荐这个千万注意啊,都是获取属性内容,但是呢,获取标签内容,但是呢,我们推荐使用get态度,原因是因为假设啊里边要有这个标签了,那对不起了,你死之性是不行的了啊同学们千万千万要注意这个事儿啊,非常非常重要啊,非常非常重要。好,OK,同学们,那么紧接着呢,我们再去干啥呀?再去讲一个叫做节点的属性,这个节点的属性呢,我们就假如说有个target.name而这个t.name它返回的又是什么呢?target.at t RS,那它又返回的是啥呢?当然这个我们是不是之前看过呀?好,同学们,那么我们现在写上这叫节点的属性啊,节点的属性,那节点的属性现在我们干啥呢?我们再写一个吧。
36:11
写个啥呀,写个P标签啊,P标签里边有一个,呵呵呵,好,那在里边呢,我假如说给的ID,给ID叫P,给他个class,再来个P1对吧,那我们现在来看一下,我通过ID啊来获取到这个P标签。啊,接下来通过ID来获取这个P标签等于soup.select ID的话是不是要写景啊,对吧?或P标签,那它点内,你你要注意啊,同学们,OB勾点内可不可以掉,同学们回答我,我们上个小代码刚写完的,可不可以点内?来看一下走。不可以还是一样的错误,为啥不可以啊,就是因为select它返回的是一个列表,而列表是没有内幕属性的啊,所以说在这儿呢,我们要取啥呢?去里边元素啊,这个我们多写写,多经历经历就好了啊,走,你发现就可以了,所以说我们知道这个name是什么呢?是标签的名字啊,是标签的名字,那么紧接着我们再看一下这个我们在开篇的时候就给大家讲过了,这个是啥呢?叫at ts ATT RS,那么它是啥呢?
37:35
来看一下,哎,有了它是将啥将属性值。将属性值。作为一个字典返回吧,哎,将属性值作为一个字典返回,同学们要注意啊,好,这个一会儿我们能用上,那么接下来啊,我们还有一个东西要干啥呢?说你这里边啊,我要一些节点的类型。
38:08
啊,要一些节点类型,啥叫节点的类型呢?它这个属性又是啥呢。对吧,我们这个要注意啊,接下来这个叫获取节点的属性。叫获取。节点的属性,啥叫获取节点的属性啊,就是当我们这里边儿我得到了这个节点,那么这里边儿属性我咋拿到?那你的叉pass里边是不是艾特什么什么之类的就可以了,那在这其实不行的啊,在这其实不行的,那么我们现在还是获取它。来,在这儿写。现在呢,我又获取了一下这个soup.select来个井号PE对吧?哎,当然我们现在知道了,是不是要加个零啊,获取里边元素,我怎么来获取里边的这个class的属性值呢?那么我直接print OB勾点at t RS。
39:08
它是不是一个字典呢?那既然字典的话,同学们我就知道了,我是不是可以用get里边来写一个class对吧?各位诶,这种方式是我们最常用的啊,获取啥呀,这个是一个字典,我们通过get方法来获取字典里边的这个数据来糟嗯,发现是不是P对吧?各位,那么有同学老师你还有什么其他的招数没有啊,还我还能通过其他的方式来吗?可以呀。直接干啥?Print OB勾点get啊它然后写一个啥呢?Class啊,这是第二种方式啊,第二种方式但是我们不推荐啊,还是使用这种方式来的更加稳妥一点,那么第三种我们再来写OB,勾中括号来写一个啥呢?Class,这三种方式我告诉各位同学都行,至于说你想访问这个对象的属性或者节点的属性,你用这三种方式哪一个都可以啊,哪一个都可以。好同学们在这儿呢,给大家讲了啥呀?讲了我们的一个基础语法啊,并且是beautiful soup加载的是本地文件,然后讲解了BS4的基础语法,那么接下来呢,我们再会带同学们做一个啥呀,做一个案例来练习一下BS4这样一个爬曲,好同学们我把视频暂停一下。
我来说两句