2017-04-11 101 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>]