一、方法描述
在同一缩进级别出现的 HTML 标签称为兄弟标签。Beautiful Soup 中的 previous_siblings
属性返回一个生成器对象,用于迭代当前标签之前同一父元素下的所有标签和字符串。这与 find_previous_siblings()
方法产生相似的输出。
二、语法
element.previous_siblings
三、返回类型
previous_siblings
属性返回一个包含兄弟 PageElement 的生成器。
四、示例
示例 1
下面的示例解析给定的 HTML 字符串,其中有一些标签嵌入在外层的 <p>
标签内。使用 previous_siblings
属性获取 <u>
标签的前一个兄弟标签。
from bs4 import BeautifulSoup
soup = BeautifulSoup("<p><b>Excellent</b><i>Python</i><u>Tutorial</u></p>", 'html.parser')
tag1 = soup.u
print("previous siblings:")
for tag in tag1.previous_siblings:
print(tag)
输出:
previous siblings:
<i>Python</i>
<b>Excellent</b>
示例 2
在下面使用的 index.html
文件中,HTML 表单中有三个输入元素。我们找出 id
设置为 marks
的标签之前的兄弟标签,并且这些标签位于 <form>
标签下。
from bs4 import BeautifulSoup
fp = open("index.html")
soup = BeautifulSoup(fp, 'html.parser')
tag = soup.find('input', {'id':'marks'})
sibs = tag.previous_siblings
print("previous siblings:")
for sib in sibs:
print(sib)
输出:
previous siblings:
<input id="age" name="age" type="text"/>
<input id="nm" name="name" type="text"/>
示例 3
顶级的 <html>
标签总是有两个兄弟标签——head
和 body
。因此,<body>
标签只有一个前一个兄弟标签,即 head
,如下面的代码所示:
html = '''
<html>
<head>
<title>Hello</title>
</head>
<body>
<p>Excellent</p><p>Python</p><p>Tutorial</p>
</body>
</html>
'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'html.parser')
tags = soup.body.previous_siblings
print("previous siblings:")
for tag in tags:
print(tag)
输出:
previous siblings:
<head>
<title>Hello</title>
</head>