首页 > 解决方案 > 在 BeautifulSoup 4.7.0+ 中,如何在其属性之一中选择所有不包含指定文本的元素

问题描述

我想选择所有不包含mailto:在其href属性中的锚标记。

直到 BeautifulSoup 的 4.7.0 版本,我都可以使用以下代码:

links = soup.select("a[href^=mailto:]")

BeautifulSoup 4.7.0 版本用 SoupSieve 替换了他们的 CSS 选择器实现,它应该更现代和完整。

不幸的是,上面的代码现在抛出了这个错误:

soupsieve.util.SelectorSyntaxError: Malformed attribute selector

该代码的直接替换是什么?针对这些相同元素的正确方法是什么?

标签: pythoncssbeautifulsoup

解决方案


似乎只需要转义href' 值中的冒号。

您可以通过转义单个字符来做到这一点:

soup.select("a[href^=mailto\\:]")

或者通过引用整个值:

soup.select('a[href^="mailto:"]')

推荐阅读