首页 > 解决方案 > BeautifulSoup4 无法通过搜索文本找到“a”标签

问题描述

示例 HTML

<a class="accordion-item__link" href="/identity-checking/individual"><!-- react-text: 178 -->Australia<!-- /react-text --></a>

当我跑

soup.find("a", text="Australia")

它什么也不返回。

如果我运行 soup.find("a", href="/identity-checking/individual")它会找到标签。
soup.find("a", href="/identity-checking/individual").text还返回“澳大利亚”

和评论有关系吗?

标签: pythonbeautifulsoup

解决方案


我正在尝试找到一种坚持该find方法的方法,因为它最方便且适应性强。这里的问题是 HTML 注释弄乱了引擎。手动删除评论会很有帮助。

from bs4 import BeautifulSoup, Comment

bs = BeautifulSoup(
    """
    <a class="accordion-item__link" href="/identity-checking/individual"><!-- react-text: 178 -->Australia<!-- /react-text --></a>
    """,
    "lxml"
)
# find all HTML comments and remove
comments = bs.findAll(text=lambda text:isinstance(text, Comment))
[comment.extract() for comment in comments]

r = bs.find('a', text='Australia')
print(r)
#  <a class="accordion-item__link" href="/identity-checking/individual">Australia</a>

删除评论的方法来自这里如何使用 BeautifulSoup 从 HTML 中去除评论标签?

如果要保留评论,您可以制作一份汤的副本。


推荐阅读