5

BeautifulSoupを使用してWebサイトを解析しています。私が欲しいコンテンツdivはクラスのにあることを知っていcontentます。そして、コンテンツはすべてpタグに含まれています。だから私は走った

paragraphs= content.findAll('p')

ここまでは大丈夫です。リストを繰り返し処理し、if特定のクラスが検出された場合にループから抜け出す条件があります。

for para in paragraphs:
    if 'class' in para:
        if para['class']=='end':
            break

しかし、これは機能していません。endループを実行すると、クラスが検出されてもループは中断されません。実際、ループを反復処理している間、すべての要素のクラスが失われているように見えます。

for para in paragraphs:
    if 'class' in para:
        print para['class']

クラスを持つ要素がある場合でも、これは何も出力しません。実際、このコードはクラスを出力します-

>>>paragraphs[0]['class']
u'dateline'

だが、

>>> print 'class' in paragraphs[0]
False

私はここで何が起こっているのか静かに理解していません。最終的には例外を使用して問題を解決しましたが、これはちょっと私を悩ませています。誰かがここで何が起こっているのか説明できますか?

4

1 に答える 1

4

を置くときif 'class' in para、あなたは文字通り、段落に実際の単語クラスがあったかどうかを言っています。あなたの意図は、クラスがあるかどうかを確認することだったと思います。したがって、必要なのは次のとおりです。

for para in paragraphs:
    if para.has_attr('class'):
        if para['class'][0] == 'end': # Notice that I put [0], as para['class'] is a list.
            break
于 2013-02-12T07:37:51.267 に答える