Beautiful Soup提供了多种方式来在给定的HTML文档中搜索特定的文本。在这里,我们使用find()
方法的string
参数来实现这一目的。
在下面的例子中,我们使用find()
方法来搜索单词'by'。
示例
html = '''
<p> The quick, brown fox jumps over a lazy dog.</p>
<p> DJs flock by when MTV ax quiz prog.</p>
<p> Junk MTV quiz graced by fox whelps.</p>
<p> Bawds jog, flick quartz, vex nymphs.</p>
'''
from bs4 import BeautifulSoup
def search(tag):
if 'by' in tag.text:
return True
soup = BeautifulSoup(html, 'html.parser')
tag = soup.find('p', string=search)
print(tag)
输出
<p> DJs flock by when MTV ax quiz prog.</p>
你可以使用find_all()
方法来找到所有包含该单词的段落:
tag = soup.find_all('p', string=search)
print(tag)
输出
[<p> DJs flock by when MTV ax quiz prog.</p>, <p> Junk MTV quiz graced by fox whelps.</p>]
在某些情况下,所需的文本可能位于文档树深处的某个子标签中。这时我们需要先定位到一个没有更多子元素的标签,然后再检查所需的文本是否在其中。
示例
html = '''
<p> The quick, brown fox jumps over a lazy dog.</p>
<p> DJs flock by when MTV ax quiz prog.</p>
<p> Junk MTV quiz graced by fox whelps.</p>
<p> Bawds jog, flick quartz, vex nymphs.</p>
'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'html.parser')
tags = soup.find_all(lambda tag: len(tag.find_all()) == 0 and "by" in tag.text)
for tag in tags:
print(tag)
输出
<p> DJs flock by when MTV ax quiz prog.</p>
<p> Junk MTV quiz graced by fox whelps.</p>