【BeautifulSoup】HTMLの要素を取り出す

 

この記事では、BeautifulSoupを使ってHTMLの要素を取り出してみたいと思います。

 

「Webページの特定の情報だけ取り出したい」

「Pythonでスクレイピングをするための基礎を勉強したい」

 

そういった方に読んでいただければと思います。

 

スポンサーリンク

 

使用するHTML

 

書籍「Automate the Boring Stuff with Python」で紹介されていたサンプルのHTMLを使ってみます。

 

 

3行の<p>要素が入ったとてもシンプルなものです。登場する要素は以下の通り。

  • <p>要素:テキストの段落を示す
  • <strong>要素:文字を太字にする
  • <a>要素:URLのリンク
  • <span>要素:単体で意味を持たない、id属性やCSSクラス属性を指定する

 

また、要素の他に属性というものが登場します。以下の2種類の属性があります。

  • id属性:id=”hoge”のように、id=で始まるもの
  • CSSクラス属性:class=”fuga”のように、class=で始まるもの、スタイルシートの指定などで使われる

 

このサンプルHTMLファイルはexmaple.htmlという名前で保存して使います。

 

全ての<p>要素を取り出す

 

まず初めにHTMLの中にある全てのP要素を取り出してみます。

 

 

htmlファイルを読み込んで、BSのオブジェクトに変換します。

 

そのあとにCSSセレクタを使って、<p>要素を全て選択しています。CSSセレクタの返り値はリストですが、リスト長を確認するためにlen()関数を使って表示するようにしています。

 

リストの要素をfor文で取り出し、内部テキストを表示するためにgetText()関数を使っています。

 

実行結果は以下の通り。

 

 

<p>タグを含む要素が3つ見つかり、それぞれの内部テキストが表示されました。

 

要素の中の要素を選択する

 

最初の<p>要素の中には、<strong>要素があります。このように要素の中にある要素だけを取り出すには、「’p > strong’」のように指定します。

 

 

出力は以下の通り。

 

 

URLを取り出す

 

サンプルのデータには、<a>要素にURLが含まれています。このURLだけを取り出してみます。

 

 

attrs属性は、タグの全ての属性を辞書として保存しています。キーを指定すると以下のようにURLが取り出せます。

 

 

CSSクラス属性を取り出す

 

サンプルの中には、sloganというクラスを使っている部分があります。このクラスが指定された要素を取り出してみましょう。

 

 

実行結果は以下の通り。

 

 

id属性を取り出す

 

HTMLの著者の情報が「id = ‘author’」という形で指定されています。この著者名を取り出してみましょう。

 

 

 

参考

以上です。お疲れ様でした。