一、方法描述
在 BeautifulSoup 库中,find_previous_sibling()
方法返回与当前 PageElement
最接近的,并且符合给定条件且在文档中更早出现的兄弟元素。
二、语法
find_previous_sibling(name, attrs, string, **kwargs)
三、参数
-
-
-
string
:一个过滤器,用于带有特定文本的 NavigableString
。
-
四、返回值
find_previous_sibling()
方法返回一个可能是 Tag
或者是 NavigableString
的 PageElement
。
五、示例
示例 1
从下面使用的 HTML 字符串中,我们找出 <i>
标签的前一个兄弟元素,其标签名为 'u'
。
from bs4 import BeautifulSoup
soup = BeautifulSoup("<p><u>Excellent</u><b>Hello</b><i>Python</i></p>", 'html.parser')
tag = soup.i
sibling = tag.find_previous_sibling('u')
print(sibling)
输出:
<u>Excellent</u>
示例 2
网页 (index.html
) 中有一个包含三个输入元素的 HTML 表单。我们定位其中一个具有 id
属性为 marks
的元素,然后查找其前一个兄弟元素,该元素的 id
设置为 nm
。
from bs4 import BeautifulSoup
fp = open("index.html")
soup = BeautifulSoup(fp, 'html.parser')
tag = soup.find('input', {'id':'marks'})
sib = tag.find_previous_sibling(id='nm')
print(sib)
输出:
<input id="nm" name="name" type="text"/>
示例 3
在下面的代码中,HTML 字符串包含两个 <p>
元素以及外层 <p>
标签内的一个字符串。我们使用 find_previous_sibling()
方法来搜索 <p>Tutorial</p>
标签的 NavigableString
类型的兄弟元素。
html = '''
<p>Excellent<p>Python</p><p>Tutorial</p></p>
'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'html.parser')
tag = soup.find('p', string='Tutorial')
ptag = tag.find_previous_sibling(string='Excellent')
print(ptag, type(ptag))
输出:
Excellent <class 'bs4.element.NavigableString'>