BeautifulSoup,使用正则表达式可获得比预期更高的回报

时间:2019-02-27 16:58:07

标签: python regex 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的方式使用正则表达式不正确吗?

1 个答案:

答案 0 :(得分:2)

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

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

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

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

编辑:为澄清起见,目前尚无办法将正则表达式直接合并到select调用中。使用正则表达式后,您将不得不过滤元素。将来可能会有通过自定义伪类使用正则表达式的方法,但目前Soup Sieve(4.7+中的Beautiful Soup的select实现)没有这种功能。