2014-11-21 91 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

相關問題