Beautiful Soup 简明教程

Beautiful Soup - find_previous_siblings() Method

Method Description

Beautiful Soup包中的find_previous_siblings()方法返回所有在文档中出现在此PAgeElement更前面的兄弟,并且符合给定的条件。

Syntax

find_previous_siblings(name, attrs, string, limit, **kwargs)

Parameters

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

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

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

  4. limit − 找到大量结果后停止查找。

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

Return Value

find_previous_siblings() 方法的结果集 PageElements。

Example 1

让我们为此目的使用以下 HTML 片段:

<p>
   <b>
      Excellent
   </b>
   <i>
      Python
   </i>
   <u>
      Tutorial
   </u>
</p>

在下面的代码中,我们尝试查找所有 <> 标记的同级元素。在用于搜索的 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)

Output

<i>Python</i>
<b>Excellent</b>

Example 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_sibling()
print (sibs)

Output

[<input id="age" name="age" type="text"/>, <input id="nm" name="name" type="text"/>]

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

Output

Tag: p, Text: Python
Tag: b, Text: Excellent