2017-04-11 102 views
0

我正在爲我的項目使用bs4。現在我得到這樣的:如何在BeautifulSoup中使用find_all()函數

<tr flag='t'><td flag='f'></td></tr>

我已經知道我可以使用在find_all()的函數。所以我用

def myrule(tag): 
    return tag['flag']=='f' and tag.parent['flag']=='t'; 
soup.find_all(myrule) 

然後我得到這樣

KeyError: 'myrule' 

錯誤任何人都可以幫我這個,爲什麼它不工作。

感謝。

回答

1

您正在尋找屬性爲flag的任何標籤。如果當前被傳遞的標籤沒有該屬性,它會拋出錯誤,程序將停止。

在檢查其他標籤之前,您應該首先驗證標籤是否具有該屬性。就像這樣:

from bs4 import BeautifulSoup 

example = """<tr flag='t'><td flag='f'></td></tr>""" 

soup = BeautifulSoup(example, "lxml") 

def myrule(tag): 
    return "flag" in tag.attrs and tag['flag']=='f' and tag.parent['flag']=='t'; 

print(soup.find_all(myrule)) 

輸出:

[<td flag="f"></td>]