BeautifulSoup 四大对象种类 | 您所在的位置:网站首页 › 四大毒素有哪四种类型 › BeautifulSoup 四大对象种类 |
Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种: Tag ---> HTML 中的一个个标签 NavigableString ---> 标签内部的文字,可比遍历字符串 BeautifulSoup ---> 一种特殊的Tag Comment ---> 一种特殊的NavigableString(1)Tag Tag 是什么?通俗点讲就是 HTML 中的一个个标签,例如 1 2 3 The Dormouse's story
Elsie 上面的 title a 等等 HTML 标签加上里面包括的内容就是 Tag,下面我们来感受一下怎样用 Beautiful Soup 来方便地获取 Tags 下面每一段代码中注释部分即为运行结果 1 2 3 4 5 6 7 8 9 10 11 print soup.title #The Dormouse's story
print soup.head #The Dormouse's story
print soup.a #
print soup.p # The Dormouse's story 我们可以利用 soup加标签名轻松地获取这些标签的内容,是不是感觉比正则表达式方便多了?不过有一点是,它查找的是在所有内容中的第一个符合要求的标签,如果要查询所有的标签,我们在后面进行介绍。 我们可以验证一下这些对象的类型 1 2 print type(soup.a) # 对于 Tag,它有两个重要的属性,是 name 和 attrs,下面我们分别来感受一下 1 2 3 4 5 6 name
print soup.name print soup.head.name #[document] #head soup 对象本身比较特殊,它的 name 即为 [document],对于其他内部标签,输出的值便为标签本身的名称。 1 2 3 4 attrs
print soup.p.attrs #{'class': ['title'], 'name': 'dromouse'} 在这里,我们把 p 标签的所有属性打印输出了出来,得到的类型是一个字典。 如果我们想要单独获取某个属性,可以这样,例如我们获取它的 class 叫什么 # 以下4种写法等价: 对字典的访问, print(soup.p.attrs['class']) print(soup.p.attrs.get('class')) 可省略attrs的写法。 print(soup.p['class']) print(soup.p.get('class')) 输出结果都是: #['title'] 1 2 3 4 print soup.p['class'] #['title'] print(soup.p.attrs['class']) #['title'] 还可以这样,利用get方法,传入属性的名称,二者是等价的 1 2 print soup.p['class'] #['title'] 还可以这样,利用get方法,传入属性的名称,二者是等价的 1 2 print soup.p.get('class') #['title'] 我们可以对这些属性和内容等等进行修改,例如 1 2 3 soup.p['class']="newClass" print soup.p # The Dormouse's story 还可以对这个属性进行删除,例如 1 2 3 del soup.p['class'] print soup.p # The Dormouse's story 不过,对于修改删除的操作,不是我们的主要用途,在此不做详细介绍了,如果有需要,请查看前面提供的官方文档 (2)NavigableString 既然我们已经得到了标签的内容,那么问题来了,我们要想获取标签内部的文字怎么办呢?很简单,用 .string 即可,例如 1 2 print soup.p.string #The Dormouse's story 这样我们就轻松获取到了标签里面的内容,想想如果用正则表达式要多麻烦。它的类型是一个 NavigableString,翻译过来叫 可以遍历的字符串,不过我们最好还是称它英文名字吧。 1 2 print type(soup.p.string) # 来检查一下它的类型 1 2 print type(soup.p.string) # (3)BeautifulSoup BeautifulSoup 对象表示的是一个文档的全部内容.大部分时候,可以把它当作 Tag 对象,是一个特殊的 Tag,我们可以分别获取它的类型,名称,以及属性来感受一下 1 2 3 4 5 6 print type(soup.name) # print soup.name # [document] print soup.attrs #{} 空字典 (4)Comment Comment 对象是一个特殊类型的 NavigableString 对象,其实输出的内容仍然不包括注释符号,但是如果不好好处理它,可能会对我们的文本处理造成意想不到的麻烦。 我们找一个带注释的标签 1 2 3 print soup.a print soup.a.string print type(soup.a.string) 运行结果如下 1 2 3 -- Elsie --> Elsie a 标签里的内容实际上是注释,但是如果我们利用 .string 来输出它的内容,我们发现它已经把注释符号去掉了,所以这可能会给我们带来不必要的麻烦。 另外我们打印输出下它的类型,发现它是一个 Comment 类型,所以,我们在使用前最好做一下判断,判断代码如下 1 2 if type(soup.a.string)==bs4.element.Comment: print soup.a.string 上面的代码中,我们首先判断了它的类型,是否为 Comment 类型,然后再进行其他操作,如打印输出。
|
CopyRight 2018-2019 实验室设备网 版权所有 |