BeautifulSoup类一共有5种基本元素:
第一种:就是我们之前介绍过的,并且使用过的Tag标签。标签是BeautifulSoup类里面的最基本的信息组织单元,他与html和xml文档中的一对尖括号相对应,它分别是用尖括号和尖括号中带/来标明开头和结尾。
第二种:标签中有名字,也构成了基本元素叫name。那么我们可以用标签.name来获取标签的名字。除了名字之外,标签有属性,它是以字典形式组织的这样一个类型。我们可以用标签.attrs来获得属性的信息。
第三种:此外在标签和尖括号之间,也就是我们所说的省略号的部分。实际上它是一种字符串,我们可以用标签.string来获得其中的内容。
第四种:另外还有一种标签的形式叫注释,我们后面会做详细的介绍。
为了更好的理解BeautifulSoup的基本元素,我们先回顾一下我们的demo事例:

我们有一个demo页面在python123.io/ws/demo.html中,它是一段文本,我们可以用request库去获取文本内容。这我们之前都介绍过,那我们将最后获得的内容存为为demo变量,后面我们会用demo变量来分析这个html页面。
下面我们来介绍一下获得type标签的相关方法:
首先我们打开IDLE,引入bs库的指令,from bs4 import BeautifulSoup.
然后我们开始做这锅汤,我们把我们demo页面变成一锅汤。soup = BeautifulSoup(demo, "html.parser").
这个时候soup变量就代表了我们解析后的我们的那个demo页面。我们看一下页面的开头:
soup.title.
这时候我们看到title标签被打印出来。title标签就是我们页面在浏览器的左上方显示信息位置的地方。那么这个标签定义的位置显示信息的内容。下面我们定义一个标签,我们获取html中.a标签,也就是链接标签的内容:tag = soup.a,我们将它打印出来。我们看到a标签被打印出来:

事实上,任何存在于html语法的标签都可以使用soup.tag方式访问获得。当html文档中存在多个相同的tag标签时,我们使用soup.tag是能够返回其中的第一个。比如说我们刚才例子中我们用soup.a返回a标签。但是我们知道在我们的文本中其实存在两个a标签,那么我们只点击soup.a我们只能获取其中的第一个标签内容。
下面我们看一下获取标签名字的方法:这里面我们启动IDLE。我们再重头来一遍,我们首先引入BeautifulSoup类。然后再把我们的demo配置做成一锅汤。然后我们获得a标签的名字,当然我们知道这个标签就是a,所以它的名字也是a。那我们再看一下a的父亲的名字是什么:a的父亲是什么呢?也就是包含a标签的下一层标签。我们发现他的名字是p也就是p标签。然后我们在看一下p标签的父亲是谁?我们看到p标签的父亲是body。所以说我们可以通过对任何一个标签使用.name的方式获得它的名字,那这个名字显示的是字符串的类型。

下面我们再获得标签的属性的信息:我们知道标签的属性是在标签中标明标签特点的相关区域,他以字典形式来组织。下面我么打开IDLE来试一下:
假设这个时候的汤已经做好了,我们选择a标签来做这个测试。我们看一下标签的属性,用.attrs来获得:

这里我们看到打印出了一个字典,字典中给出了这个标签属性中它的标签名字、属性名字和属性的值之间的对应关系。由于他是一个字典,我们还可以采用字典的方式来对每一个属性做信息的提取。比如说这里边我们希望获得class属性的值,我们可以这样来实现:

我们看到class属性的值是一个列表,列表类型中的第一个元素是py1.
我们也可以获得a标签的链接属性:

我们看到这个时候a标签打印出来的链接是一个课程链接。这也是我们慕课课程的相关链接地址。
下面我们看一下标签属性的类型:

我们看到标签属性是个字典类型,那我们说标签是什么类型呢?标签应该是标签类型。我们看一下标签类型具体是如何定义的:我们也用tag来实现:

我们可以看到tag是bs4.element.Tag类型,也就是说在bs4中将标签定义了一种特殊的类型,就是bs4库中认可的一种类型。这里面我们需要注意tag的标签可以有0或多个属性。那么没有属性存在的时候,我们使用attribus获得的字典是一个空字典,但是无论有属性或者没有属性,我们总能获得一个字典。
下面我们看一下tag 标签的 元素:
这个元素是一个string,也就是一个字符串类型。它表示的是尖括号<>标签之间的那串字符串。
我们启动IDLE来看一下:
假设我们有了一锅汤叫soup:

这是a标签的信息,