今回は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をダウンロードして解析することも可能です。
それでは、また次の記事でお会いしましょう。
コメント