一、方法描述
在 BeautifulSoup 库中,find_previous_siblings()
方法返回当前 PageElement
在文档中早先出现的所有兄弟元素,并且这些元素符合给定的条件。
二、语法
find_previous_siblings(name, attrs, string, limit, **kwargs)
三、参数
-
-
-
string
:一个过滤器,用于带有特定文本的 NavigableString
。
-
-
四、返回值
find_previous_siblings()
方法返回一个 ResultSet
的 PageElements
。
五、示例
示例 1
让我们使用以下 HTML 片段来进行此操作:
<p>
<b>
Excellent
</b>
<i>
Python
</i>
<u>
Tutorial
</u>
</p>
在下面的代码中,我们尝试查找所有 <u>
标签的兄弟元素。在用于抓取的 HTML 字符串中有另外两个处于同一级别的标签。
from bs4 import BeautifulSoup
soup = BeautifulSoup("<p><b>Excellent</b><i>Python</i><u>Tutorial</u></p>", 'html.parser')
tag1 = soup.find('u')
print("previous siblings:")
for tag in tag1.find_previous_siblings():
print(tag)
输出:
<i>Python</i>
<b>Excellent</b>
示例 2
网页 (index.html
) 中有一个包含三个输入元素的 HTML 表单。我们定位其中一个具有 id
属性为 marks
的元素,然后查找其之前的兄弟元素。
from bs4 import BeautifulSoup
fp = open("index.html")
soup = BeautifulSoup(fp, 'html.parser')
tag = soup.find('input', {'id':'marks'})
sibs = tag.find_previous_siblings()
print(sibs)
输出:
[<input id="age" name="age" type="text"/>, <input id="nm" name="name" type="text"/>]
示例 3
HTML 字符串有两个 <p>
标签。我们查找 id
属性为 id1
的标签之前的兄弟元素。
html = '''
<p><b>Excellent</b><p>Python</p><p id='id1'>Tutorial</p></p>
'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'html.parser')
tag = soup.find('p', id='id1')
ptags = tag.find_previous_siblings()
for ptag in ptags:
print("Tag: {}, Text: {}".format(ptag.name, ptag.text))
输出:
Tag: p, Text: Python
Tag: b, Text: Excellent