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>
标签?我该如何解决?
这与您的正则表达式无关,但 .string
(text
参数在 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>]
我正在尝试使用 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>
标签?我该如何解决?
这与您的正则表达式无关,但 .string
(text
参数在 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>]