BeautifulSoup: 查找带有嵌入标签的标签文本

BeautifulSoup: finding tag text with embedded tag

我正在尝试使用 Python 中的 BeautifulSoup 4 通过封闭文本在网页中查找 <a> 标签。我使用了一个真实的表达式,如下例所示:

>>> from bs4 import BeautifulSoup as BS
soup = BS('<a>lalala <del>10</del> lalala </a>')
soup1 = BS('<a>lalala 10 lalala </a>'
>>> soup.find_all('a', text=re.compile('lalala'))
[]
>>> soup1.find_all('a', text=re.compile('lalala'))
[<a>lalala 10 lalala </a>]

为什么嵌入的 <del></del> 标签让我无法找到文本包含它的 <a> 标签?我该如何解决?

这与您的正则表达式无关,但 .stringtext 参数在 Beautiful Soup 4.4.0 中称为 string)参数的工作方式是它 return None 如果一个标签包含不止一个东西。 您可以使用 a function 执行此操作:

def in_text(tag):
    return tag.name == 'a' and 'lalala' in tag.text

soup.find_all(in_text)

产生:

[<a>lalala <del>10</del> lalala </a>]