BeautifulSoupの使い方の詳細——対象の種類


Beautiful Soup 4.4.0ドキュメント:https://beautifulsoup.readthedocs.io/zh_CN/latest/
Beautiful Soupは複雑なHTMLドキュメントを複雑なツリー構造に変換し、各ノードはPythonオブジェクトであり、すべてのオブジェクトは4種類にまとめることができる:Tag,NavigablesString,BeautifulSoup,Comment.
1.Tagオブジェクト
soup = BeautifulSoup('Extremely bold')
tag = soup.b
type(tag)        # 

Tagオブジェクトには多くの方法と属性があり、その中で最も重要なのはnameとattributesです.
(1)name属性
それぞれのtagには自分の名前があります.名前で取得
tag.name    # u'b'
"""
     tag     b       
soup = BeautifulSoup('Extremely bold')
     tag.name   b
"""

(2)Attributes属性
1つのtagには多くの属性がある可能性があります.tagには「class」の属性があり、値は「boldest」で、tagの属性の操作方法は辞書と同じです.
tag['class']    # # u'boldest'

直接使うこともできます(.)属性を取ります.例:attrs
tag.attrs        # {u'class': u'boldest'}

tagの属性は追加、削除、または変更することができる.もう一度言って、tagの属性操作方法は辞書と同じです.
tag['class'] = 'verybold'
tag['id'] = 1
tag    # Extremely bold

del tag['class']
del tag['id']
tag    # Extremely bold

tag['class']    # KeyError: 'class'
print(tag.get('class'))    # None

2.NavigablesStringオブジェクト
文字列は常にTagに含まれ、BeautifulSoupはNavigablesStringクラスでtagの文字列をパッケージします.
tag.string    # u'Extremely bold'
type(tag.string)    # 

NavigablesString文字列はPythonのUnicode文字列と同じで、ドキュメントツリーを巡回したり、ドキュメントツリーのほとんどのプロパティを検索したりすることができます.unicode()メソッドでNavigablesStringオブジェクトをUnicode文字列に直接変換できます.
unicode_string = unicode(tag.string)
unicode_string    # u'Extremely bold'
type(unicode_string)    # 

3.BeautifulSoupオブジェクト
BeautifulSoupオブジェクトは1つのドキュメントのすべての内容を表す.ほとんどの場合、Tagオブジェクトとして使用できます.これは、ドキュメントツリーを巡回したり、ドキュメントツリーのほとんどのメソッドを検索したりすることをサポートします.
4.Commentオブジェクト——コメントおよび特殊文字列
Commentオブジェクトは特殊なタイプのNavigablesStringオブジェクトです.
markup = ""
soup = BeautifulSoup(markup)
comment = soup.b.string
type(comment)    # 
comment    # u'Hey, buddy. Want to buy a used parser'