我正在将BeautifulSoup 4与Python 3.7一起使用。我想找到一个元素,该元素的元素中包含文本“ points”,但还具有其类属性包含“ article”的祖先DIV。我想出了如何搜索带有文本的元素...
points_elt = soup.find_all(text=re.compile(' points'))[0]
但是我不知道如何扩展上面的内容以包含带有该文本的元素,这些元素还包括具有“ article”类的祖先。这是我要查找的元素的一个示例。
<div class="article class2">
... other elements ...
<span class="outerSpan">
<span class="innerSpan">2000 points</span>
</span>
... other element closing tags ...
</div>
这是应该在...上运行的另一个示例
<div class="article class7">
<p>
<div class="abc">
<span class="outerSpan">
<span>8000 points</span>
</span>
</div>
</p>
</div>
答案 0 :(得分:0)
from bs4 import BeautifulSoup
import re
data = """
<div class="article class2">
<span class="outerSpan">
<span class="innerSpan">2000 points</span>
</span>
</div>
"""
soup = BeautifulSoup(data, 'html.parser')
for item in soup.findAll(text=re.compile('points$')):
print(item)
输出:
2000 points
from bs4 import BeautifulSoup
data = """
<div class="article class2">
<span class="outerSpan">
<span class="innerSpan">2000 points</span>
</span>
</div>
"""
soup = BeautifulSoup(data, 'html.parser')
for item in soup.findAll('span', {'class': 'innerSpan'}):
print(item.text)
输出:
2000 points
答案 1 :(得分:0)
您可以使用css选择器并检查要查找的字符串。
html='''<div class="article class2">
<span class="outerSpan">
<span class="innerSpan">2000 points</span>
</span>
</div>
'''
soup=BeautifulSoup(html,'html.parser')
for item in soup.select('.article .innerSpan'):
if 'points' in item.text:
print(item.text)
或者您可以使用它。
soup=BeautifulSoup(html,'html.parser')
for item in soup.select('.article:contains(points)'):
print(item.text.strip())
答案 2 :(得分:0)
span = soup.find_all('span')
if 'points' in span[1].text:
div = span[1].parent.parent
print(div)
span变量具有所有span元素,我们正在遍历到HTML
标记的父元素。考虑到这始终是HTML
的格式。