假设我想使用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结合使用。
强调我的。