一、方法描述
在 BeautifulSoup 库中,previous_element
属性返回紧跟在当前 PageElement 之前的 Tag 或 NavigableString,即使它不在同一个父节点下。还有一个类似的 previous
属性。
二、语法
Element.previous_element
三、返回值
previous_element
和 previous
属性返回紧跟在当前标签之前的 Tag 或 NavigableString。
四、示例
示例 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)
输出:
<p id="id1">Tutorial</p>
Previous: Python
Previous: <p>Python</p>
输出看起来有点奇怪,因为 <p id='id1'>
的前一个元素被显示为 'Python'
,这是因为内部的字符串被注册为前一个元素。为了得到期望的结果(前一个元素为 <p>Python</p>
),需要获取内部 NavigableString 对象的 previous_element
属性。
示例 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)
输出:
<p id="id1">Tutorial</p>
Previous: Python
Previous: <p>Python</p>
示例 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)
输出:
Previous: <input id="nm" name="name" type="text"/>