python - 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
还返回“澳大利亚”
和评论有关系吗?
解决方案
我正在尝试找到一种坚持该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 中去除评论标签?
如果要保留评论,您可以制作一份汤的副本。
推荐阅读
- python - 如何根据 groupby 示例获得整个月的方差系数?
- java - 在@MessageExceptionHandler 中获取消息字节
- docker - 使用 nfs 网络路径作为 kubernetes 持久化卷
- php - PHP - 由于不可删除的空格,无法使用 bcadd() 字符串
- java - Spring Boot中如何打印类对象信息?Web-flux 在 Spring Boot 中打印哈希码而不是类上下文
- python - 根据结果排列python的长度过滤itertools排列
- amazon-web-services - Nginx location without trailing slash works only with trailing slash
- camera - 如何在颤动中快速访问相机帧
- typescript - TypeScript inference on typed constraints
- spring - 重定向如何在 Spring Framework 中传递值?