Beautiful Soup 简明教程

Beautiful Soup - find_previous_sibling() Method

Method Description

Beautiful Soup中的find_previous_sibling()方法返回最早出现在文档中并且符合给定条件的与该PageElement最接近的兄弟元素。

Syntax

find_previous_sibling(name, attrs, string, **kwargs)

Parameters

  1. name − 对标记名称的筛选。

  2. attrs − 对属性值进行筛选的字典。

  3. string - 具有特定文本的 NavigableString 的过滤器。

  4. kwargs − 对属性值进行筛选的字典。

Return Value

find_previous_sibling()方法返回一个可能是Tag或NavigableString的PageElement。

Example 1

从以下示例中使用的HTML字符串,我们可以找出标签名为“u”的<i>标签的前一兄弟元素。

from bs4 import BeautifulSoup

fp = open("index.html")
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)

Output

<u>Excellent</u>

Example 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)

Output

<input id="nm" name="name" type="text"/>

Example 3

在下面的代码中,HTML字符串有两个<p>元素和一个位于外部<p>标签內的字符串。我们使用find_previous_string()方法来查找与<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))

Output

Excellent <class 'bs4.element.NavigableString'>