2014-11-21 62 views
0

假设我想使用BeautifulSoup解析html,我想使用css选择器来查找特定的标签。如果我想找到它的标签做BeautifulSoup .select()方法是否支持正则表达式的使用?

from bs4 import BeautifulSoup 
soup = BeautifulSoup(html) 

我会“soupify”它“id”属性为“ABC”的值,我可以做

soup.select('#abc') 

如果我想找到所有“一”我们目前的标签下的子标签,我们可以做

soup.select('#abc a') 

但现在,假设我想找到所有的“一”的标签,其“href”属性的属性具有在“XYZ”结尾值我会想使用正则表达式,我希望沿线的东西

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

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

回答

3

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

可以使用这种语法属性不相符文本结尾

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

CSS attribute selectors documentation在MSDN上。

您可以随时使用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选择器与美丽的汤API。

重点煤矿

+0

这太棒了。在我的例子中,它只是为了通用的情况。我要求提供正则表达式支持的原因是因为我希望检测到其他模式,可能会在开始,结束或中间发生。此外,我希望能够检测到不仅仅是xyz,而且还可以检测不同数量的数字。 – lollerskates 2014-11-21 21:45:30

相关问题