web-dev-qa-db-ja.com

tag.idを取得する美しいスープ

ページからdiv idのリストを取得しようとしています。属性を出力すると、IDがリストされます。

for tag in soup.find_all(class_="bookmark blurb group") :
  print(tag.attrs)

結果は:

{'id': 'bookmark_8199633', 'role': 'article', 'class': ['bookmark', 'blurb', 'group']}
{'id': 'bookmark_7744613', 'role': 'article', 'class': ['bookmark', 'blurb', 'group']}
{'id': 'bookmark_7338591', 'role': 'article', 'class': ['bookmark', 'blurb', 'group']}
{'id': 'bookmark_7338535', 'role': 'article', 'class': ['bookmark', 'blurb', 'group']}
{'id': 'bookmark_4530078', 'role': 'article', 'class': ['bookmark', 'blurb', 'group']}

だから私はIDがあることを知っています。しかし、代わりにtag.idを出力すると、「None」のリストが表示されます。ここで何が悪いのですか?

17
klreeher

タグを辞書のように扱うことでタグの属性にアクセスできます( documentation ):

_for tag in soup.find_all(class_="bookmark blurb group") :
    print tag.get('id')
_

_tag.id_が機能しなかった理由は、Noneタグが見つからないためにidとなるtag.find('id')と同等であるためです( ドキュメント )。

25
alecxe