假设我想使用BeautifulSoup解析HTML,并且想使用CSS选择器来查找特定标签。我会这样做

from bs4 import BeautifulSoup
soup = BeautifulSoup(html)


如果我想找到一个标签,其“ id”属性的值为“ abc”,我可以这样做

soup.select('#abc')


如果我想在当前标签下找到所有“ a”子标签,我们可以

soup.select('#abc a')


但是现在,假设我想找到所有“ href”属性的值都以“ xyz”结尾的“ a”标签,为此,我想使用正则表达式,我希望

soup.select('#abc a[href] = re.compile(r"xyz$")')


我似乎找不到任何内容表明BeautifulSoup的.select()方法将支持正则表达式。

最佳答案

soup.select()函数仅支持CSS语法;正则表达式不是其中的一部分。

您可以使用以下语法来匹配以文本结尾的属性:

soup.select('#abc a[href$="xyz"]')


请参见MSDN上的CSS attribute selectors documentation

您始终可以使用CSS选择器的结果来继续搜索:

for element in soup.select('#abc'):
    child_elements = element.find_all(href=re.compile('^http://example.com/\d+.html'))


注意,作为element.select() documentation states


  对于了解CSS选择器语法的用户来说,这是一个方便。您可以使用Beautiful Soup API来完成所有这些工作。而且,如果您只需要CSS选择器,不妨直接使用lxml:它速度更快,并且支持更多CSS选择器。但这使您可以将简单的CSS选择器与Beautiful Soup API结合使用。


强调我的。

10-06 05:22
查看更多