lol*_*tes 1 python regex select beautifulsoup
假设我想使用BeautifulSoup解析HTML,并且想使用CSS选择器来查找特定标签。我会这样做
from bs4 import BeautifulSoup
soup = BeautifulSoup(html)
Run Code Online (Sandbox Code Playgroud)
如果我想找到一个标签,其“ id”属性的值为“ abc”,我可以这样做
soup.select('#abc')
Run Code Online (Sandbox Code Playgroud)
如果我想在当前标签下找到所有“ a”子标签,我们可以
soup.select('#abc a')
Run Code Online (Sandbox Code Playgroud)
但是现在,假设我想找到所有“ href”属性的值都以“ xyz”结尾的“ a”标签,为此,我想使用正则表达式,我希望
soup.select('#abc a[href] = re.compile(r"xyz$")')
Run Code Online (Sandbox Code Playgroud)
我似乎找不到任何内容表明BeautifulSoup的.select()方法将支持正则表达式。
该soup.select()功能仅支持CSS语法;正则表达式不是其中的一部分。
您可以使用以下语法来匹配以文本结尾的属性:
soup.select('#abc a[href$="xyz"]')
Run Code Online (Sandbox Code Playgroud)
请参阅MSDN上的CSS属性选择器文档。
您始终可以使用CSS选择器的结果来继续搜索:
for element in soup.select('#abc'):
child_elements = element.find_all(href=re.compile('^http://example.com/\d+.html'))
Run Code Online (Sandbox Code Playgroud)
请注意,如element.select()文档所述:
对于了解CSS选择器语法的用户来说,这是一个方便。您可以使用Beautiful Soup API来完成所有这些工作。而且,如果您只需要CSS选择器,那么不妨直接使用lxml:它快得多,并且支持更多CSS选择器。但这使您可以将简单的CSS选择器与Beautiful Soup API结合使用。
强调我的。