Beautiful Soup 简明教程

Beautiful Soup - previous_element Property

Method Description

在 Beautiful Soup 库中,previous_element 属性返回紧接在当前 PageElement 之前的 Tag 或 NavigableString,即使它不在父级树中。还有 previous 属性,类似的行为

Syntax

Element.previous_element

Return value

previous_element 和 previous 特性将返回当前标签之前紧邻的标签或 NavigableString。

Example 1

我们从给定 HTML 字符串中解析出的文档树中, 找到 <p id='id1'> 标签的 previous_element。

html = '''
<p><b>Excellent</b><p>Python</p><p id='id1'>Tutorial</p></p>
'''
from bs4 import BeautifulSoup

soup = BeautifulSoup(html, 'lxml')
tag = soup.find('p', id='id1')
print (tag)
pre = tag.previous_element
print ("Previous:",pre)

pre = tag.previous_element.previous_element
print ("Previous:",pre)

Output

<p id="id1">Tutorial</p>
Previous: Python
Previous: <p>Python</p>

输出有点奇怪,因为显示的 previous 元素是 Python,那是因为内部字符串被注册为 previous 元素。如要获取预期的结果(<p>Python</p>)作为 previous 元素,请获取内在 NavigableString 对象的 previous_element 特性。

Example 2

BeautifulSoup PageElements 还支持 previous 特性,它类似于 previous_element 特性。

html = '''
<p><b>Excellent</b><p>Python</p><p id='id1'>Tutorial</p></p>
'''
from bs4 import BeautifulSoup

soup = BeautifulSoup(html, 'lxml')
tag = soup.find('p', id='id1')
print (tag)
pre = tag.previous
print ("Previous:",pre)

pre = tag.previous.previous
print ("Previous:",pre)

Output

<p id="id1">Tutorial</p>
Previous: Python
Previous: <p>Python</p>

Example 3

在下一个示例中,我们尝试判断 id 属性为“age”的 <input> 标签旁边的元素。

from bs4 import BeautifulSoup

fp = open("index.html")
soup = BeautifulSoup(fp, 'html5lib')

tag = soup.find('input', id='age')
pre = tag.previous_element.previous
print ("Previous:",pre)

Output

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