一、方法描述
在 BeautifulSoup 库中,previous_elements
属性返回一个生成器对象,包含解析树中当前元素之前的所有字符串或标签。
二、语法
Element.previous_elements
三、返回值
previous_elements
属性返回一个生成器。
四、示例
示例 1
previous_elements
属性返回在下面的文档字符串中 <p>
标签之前出现的标签和 NavigableStrings。
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')
pres = tag.previous_elements
print("Previous elements:")
for pre in pres:
print(pre)
输出:
Previous elements:
Python
<p>Python</p>
Excellent
<b>Excellent</b>
<p><b>Excellent</b><p>Python</p><p id="id1">Tutorial</p></p>
示例 2
下面列出了所有出现在 <u>
标签之前的元素。
from bs4 import BeautifulSoup
html = '''
<p>
<b>Excellent</b><i>Python</i>
</p>
<u>Tutorial</u>
'''
soup = BeautifulSoup(html, 'html.parser')
tag1 = soup.find('u')
print("previous elements:")
print(list(tag1.previous_elements))
输出:
previous elements:
['\n', '\n', 'Python', <i>Python</i>, 'Excellent', <b>Excellent</b>, '\n', <p>
<b>Excellent</b><i>Python</i>
</p>, '\n']
示例 3
BeautifulSoup 对象本身没有任何之前的元素。
from bs4 import BeautifulSoup
fp = open("index.html")
soup = BeautifulSoup(fp, 'html5lib')
tag = soup.find('input', id='marks')
pres = tag.previous_elements
print("Previous elements:")
for pre in pres:
print(pre.name)
输出:
Previous elements:
注意:在最后一个示例中,由于 previous_elements
包含了所有的元素,包括空白和换行符,当使用 .name
属性来访问时,如果元素是一个字符串(例如空白)或者没有名字的对象,则 .name
将会返回 None
。因此,实际输出可能包括很多 None
值。如果想要打印出具体的标签名称,可能需要对输出进行适当的过滤处理。