一、方法描述
在 BeautifulSoup 库中,parent
属性返回指定 PageElement 的直接父元素。parents
属性返回的值的类型是一个 Tag 对象。对于 BeautifulSoup 对象来说,它的父元素是一个文档对象。
二、语法
Element.parent
三、返回值
parent
属性返回一个 Tag 对象。对于 Soup 对象,它返回文档对象。
四、示例
示例 1
此示例使用 .parent
属性来查找示例 HTML 字符串中第一个 <p>
标签的直接父元素。
html = """
<html>
<head>
<title>Yoagoa</title>
</head>
<body>
<p>Hello World</p>
"""
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'html.parser')
tag = soup.p
print(tag.parent.name)
输出:
body
示例 2
在下面的例子中,我们看到 <title>
标签被包含在一个 <head>
标签内。因此,<title>
标签的 parent
属性返回的是 <head>
标签。
html = """
<html>
<head>
<title>Yoagoa</title>
</head>
<body>
<p>Hello World</p>
"""
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'html.parser')
tag = soup.title
print(tag.parent)
输出:
<head><title>Yoagoa</title></head>
示例 3
Python 内置的 HTML 解析器的行为与 html5lib 和 lxml 解析器略有不同。内置解析器不会试图从提供的字符串中构建一个完美的文档。如果字符串中不存在 body 或 html 标签,它不会添加额外的父标签。而另一方面,html5lib 和 lxml 解析器会添加这些标签来使文档成为一个完整的 HTML 文档。
html = """
<p><b>Hello World</b></p>
"""
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'html.parser')
print(soup.p.parent.name)
soup = BeautifulSoup(html, 'html5lib')
print(soup.p.parent.name)
输出:
[document]
Body
由于 HTML 解析器不会添加额外的标签,所以解析后的 soup 的父元素是文档对象。然而,当我们使用 html5lib 时,父标签的名称属性是 Body。