【Python】BeautifulSoupでHTMLから情報を抽出する

  • URLをコピーしました!

こんにちは、むらさめです。
今回はPythonでBeautifulSoupというライブラリを使って、サンプルのHTMLからほしい情報を抽出する処理を作成してみたいと思います。

目次

BeautifulSoupとは

Pythonでスクレイピングをする際に有効なライブラリがBeautifulSoupです。WebサイトのHTLMやXMLなどを解析し、必要な情報を抽出することができます。

BeautifulSoupのインストール

まずは今回使用するライブラリのBeautifulSoupをインストールします。以下のコマンドを実行してください。

pip3 install beautifulsoup4

サンプルのHTML

解析の対象となるHTMLとして、以下のようなサンプルを用意しました。このHTMLファイルを読み込み、恐竜の名称の部分だけを抽出するプログラムをPythonで実装してみたいと思います。今回はWeb上のデータではなく、同じディレクトリにあるローカルファイルから取得します。

<!DOCTYPE html>
<html>
<head>
<title>恐竜図鑑のページ</title>
</head>
<body>
<h1>恐竜図鑑</h1>
<p>恐竜の一覧</p>
<ul>
   <li>ティラノサウルス</li>
   <li>トリケラトプス</li>
   <li>ステゴサウルス</li>
   <li>トロオドン</li>
   <li>スピノサウルス</li>
   <li>ヴェロキラプトル</li>
</ul>
</body>
</html>

HTMLを解析、抽出するソースコード

今回作成したソースコードは以下の通りです。

from io import StringIO
from bs4 import BeautifulSoup

#HTMLファイルを読み込み
fp = open("dinosaur.html", encoding="utf-8")

#BeautifulSoupを使って読み込んだHTMLを解析
bs = BeautifulSoup(fp, "html.parser")

#タグを指定して情報を抽出
liList = bs.select("ul > li")

#取得した情報を出力
for dino in liList:
    print(dino.string)
5行目:
解析対象となるHTMLファイルを読み込みます。

8行目:
BeautifulSoupを使って読み込んだHTMLを解析します。この時、引数でパーサーの種類を指定します。今回は「html.parser」を使用しました。

11行目:
抽出したい情報が含まれる部分のタグをselect()メソッドの引数に指定します。

14行目:
for文で抽出した「li」タグの情報を、print()メソッドで出力します。

抽出結果

実行結果は以下の通りです。恐竜の名前の情報だけを抽出することができました。

ティラノサウルス
トリケラトプス
ステゴサウルス
トロオドン
スピノサウルス
ヴェロキラプトル

まとめ

いかがだったでしょうか?
Select()メソッドのパラメータでCSSセレクターを使うことで任意の要素を抽出することができます。また今回はローカルファイルで試しましたが、urlopen()メソッドを使ってWeb上のHTMLをダウンロードして解析することも可能です。
それでは、また次の記事でお会いしましょう。

よかったらシェアしてね!
  • URLをコピーしました!
目次