Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种:
Tag
NavigableString
BeautifulSoup
Comment
可以通过type(soup.元素)来判断对象类型
下面以豆瓣读书为例,进行实例说明(https://book.douban.com/)。1.首先通过request获取首页HTML文档,如下:

然后我们来看看通过beautifulsoup转换后的树状文档:
1. Tag:下面的<html,<title,<meta等标签加上后面的内容就是tag了。

1.1获取标签:语句soup.标签名:即可以查找出该标签的完整文档,若存在多个相同标签名,则返回第一个标签。

1.2获取元素类型
下面为了验证我们的判断,即<>标识标签部分的起始,我们用type()来验证下各元素的类型。

接下来我们看看标签由哪些属性组成:name(名字)+attrs:
1.3获取标签名和标签属性
直观判断:紧靠<符号部分的字符串组即为标签的名,而空格后的字符串即为标签的属性。
可以分别通过soup.标签.name和soup.标签.attrs来加以验证和判断。属性与名称通常为多对1关系,即1个标签名对应多个属性,通过soup.标签.attrs可以获取所有属性并返回字典
选择某个特定属性soup.标签.attrs['']或者soup.标签['']


2. NavigableString
既然我们已经得到了标签的内容,那么问题来了,我们要想获取标签内部的文字怎么办呢?很简单,用 .string 即可.这部分是独立于标签名称和标签属性之外的标签文字内容

3. beautifulsoup
4. comment
II.遍历树状文档:
contents和children两种方法
contents返回一个子节点列表(可以直接打印)
children返回一个子节点迭代(不能直接打印,需要通过for xx in yy的语句获取内容)

网友评论