假设我想使用 BeautifulSoup 解析 html,并且想使用 css 选择器来查找特定标签。我会通过这样做来“充实”它
from bs4 import BeautifulSoup
soup = BeautifulSoup(html)
如果我想找到一个“id”属性值为“abc”的标签,我可以这样做
soup.select('#abc')
如果我想找到当前标签下的所有“a”子标签,我们可以这样做
soup.select('#abc a')
但现在,假设我想找到所有“a”标签,其“href”属性的值以“xyz”结尾,我想使用正则表达式,我希望有类似的东西
soup.select('#abc a[href] = re.compile(r"xyz$")')
我似乎找不到任何说明 BeautifulSoup 的 .select() 方法将支持正则表达式的内容。
The soup.select()
函数仅支持 CSS 语法;正则表达式不属于其中。
You can使用这样的语法来匹配属性ending附文字:
soup.select('#abc a[href$="xyz"]')
See the CSS 属性选择器文档 https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors在 MSDN 上。
您始终可以使用 CSS 选择器的结果来继续搜索:
for element in soup.select('#abc'):
child_elements = element.find_all(href=re.compile('^http://example.com/\d+.html'))
请注意,作为element.select()文档状态 http://www.crummy.com/software/BeautifulSoup/bs4/doc/#css-selectors:
这对于了解 CSS 选择器语法的用户来说很方便。您可以使用 Beautiful Soup API 完成所有这些工作。如果您只需要 CSS 选择器,那么您不妨直接使用 lxml:它更快,并且支持更多 CSS 选择器。但这可以让你combine带有 Beautiful Soup API 的简单 CSS 选择器。
强调我的.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)