首页 > 解决方案 > BeautifulSoup,使用正则表达式获得比预期更多的回报

问题描述

使用 BeautifulSoup,我有以下行:

dimensions = SOUP.select(".specs__title > h4", text=re.compile(r'Dimensions'))

但是,它返回的不仅仅是具有“Dimensions”文本的标签,如以下结果所示:

[<h4>Dimensions</h4>, <h4>Details</h4>, <h4>Warranty / Certifications</h4>]

我是否以 SOUP 的工作方式错误地使用了正则表达式?

标签: pythonregexbeautifulsoup

解决方案


select接口没有text关键字。在我们继续之前,以下假设您使用的是 BeautifulSoup 4.7+。

如果您想按文本过滤,您可以执行以下操作:

dimensions = SOUP.select(".specs__title > h4:contains(Dimensions)")

有关:contains()伪类实现的更多信息,请参见:https ://facelessuser.github.io/soupsieve/selectors/#:contains 。

编辑:澄清一下,目前没有办法将正则表达式直接合并到select调用中。您必须在使用正则表达式之后过滤元素。将来可能有一种方法可以通过一些自定义伪类来使用正则表达式,但目前 Soup Sieve 中没有这样的功能(Beautiful Soup 在 4.7+ 中的选择实现)。


推荐阅读