2017-04-11 8 views
0

私のプロジェクトにはbs4が使用されています。 )私はすでに私は(find_allで機能を使用することができます知っているBeautifulSoupのfind_all()で関数を使うにはどうすればいいですか?

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

:今、私のような何かを得ます。だから私は

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>] 
関連する問題