Python プログラミング

[Python] BeautifulSoup4の使い方とインストール方法

投稿日:2018年6月27日 更新日:

こんにちは!シミダイ(@shimidai2100)です。

PythonでWebスクレイピング時にオススメのライブラリ「Beautiful Soup 4」です。

Webスクレイピングを活用することで、Webサイトから大量に情報を取得したりWebの情報取得を自動化したりできるので業務効率が上がります。

また機械学習に必要な大量データを取得する時にも便利ですので、この記事で使い方をマスターしてください。


Beautiful Soup 4とは?何でSoupなの?

Beautiful Soup 4」とはHTMLXML取得解析編集するためのライブラリになります。

「Beautiful Soup 4」は前身として「Beautiful Soup 3」がありましたが、Python 3系で利用されるは「Beautiful Soup 4」です。

「Beautiful Soup 3」はPython 3系では利用できないので注意してください。

なぜ「Soup」なのか?というと、マークアップの世界では

不正なマークアップを持つもの、しっかりと閉じられていないマークアップタグを"タグスープ"」と呼びます。

恐らくそこからモジって、「Beautiful Soup」というライブラリ名になったのでしょう。

参考Beautiful Soupのマニュアルドキュメント

Beautiful Soup 4のインストール

「Beautiful Soup 4」のインストール方法は下になります。

「beautifulsoup4」としっかり記載しないと「Beautiful Soup 3」がインストールされてしまいます。

また「Beautiful Soup 3」はPython 3系では利用できないので注意してください。

より高速にHTML、XMLを解析するために「lxml」ライブラリも合わせてインストールしておきましょう。

また最新HTML5タグを解析するならば「html5lib」ライブラリも合わせてインストールします。

さらにWebサイトから直接HTMLを取得し、解析するするためには「requests」ライブラリも合わせてインストールしておきましょう。

Beautiful Soup 4の基本的な使い方

「Beautiful Soup 4」のHTML解析の基本的なコーディングは下になります。

1行目の「lxml」ライブラリをインポートします。

2行目の「from bs4 import BeautifulSoup 」とインポートします。

このコーディング方法をマニュアルにも書いてある「beautiful soup 4」の一般的な書き方になります。

5行目の「bs4.BeautifulSoup(html.text, 'lxml')」に注目してください。

第2引数に「'lxml'」を渡していますが、これがPython3系でHTMLを解析する時に最も高速なコーディング方法になります。

昔のブログなどでは「BeautifulSoup(markup, "html.parser") 」と書かれていることが多いですが今は使いません。

下は各パース方法のメリット・デメリットになります。

BeautifulSoup4でHTML・XML解析時のメリット・デメリット

XMLファイルを解析する時は下のように書きます。

またWebサイトからHTMLファイルを取得する時の基本的なコーディングになります。

HTMLからタグ情報取得

実際にHTMLファイルからタグ情報を取得する方法を紹介します。

取得方法構文コードディング例
1件検索soup.find(<タグ名>)soup.find("title")
タグ全検索soup.find_all(<タグ名>)soup.find_all("a")
属性検索soup.find(<タグ名>, <属性値>)soup.find("a", href="http://example.com/lacie")
id検索soup.find(<タグ名>, id=)soup.find("a", id="link3")
class検索soup.find(<タグ名>, class_=<クラス名>)soup.find("p", class_="title")
タグ名で検索soup.[タグ名].[タグ名]…soup.html.head

classでの検索は「class_」ですので注意してください。

※ find_all()メソッド以外は検索対象に合致したタグの1つ目が出力されます。

なお、今回読み込むHTMLファイルは以下になります。

下がサンプルコードになります。

CSSセレクタを使用したタグ情報取得

CSSのセレクタを使用したタグ情報の取得方法は紹介します。

取得方法構文コードディング例
タグ検索soup.select(<タグ名>)soup.select("title")
1件検索soup.select_one(<タグ名>)soup.select_one("a")
属性存在有無で検索soup.select(<属性名>)soup.select("a[data]")
属性値検索soup.select(<属性名と属性値>)soup.select('a[href="http://example.com/lacie"]')
CSSセレクタ検索soup.select(CSSセレクタ)soup.select("p.title")
soup.select("p > .title")
soup.select("p > a:nth-first-of-type")

上記のようにCSSセレクタのように柔軟にタグ情報を取得することができます。

classが複数適用されている場合には、下のようにピリオドでclass名を繋げて記載します。

find_all()」メソッドだとclass名その記載されている順序を守る必要がありますが、

select()」メソッドだと記載されて順序は意識する必要はありません。

下がサンプルコードになります。

正規表現を使用したタグ情報取得

正規表現を使用したタグ情報を取得は、「re」ライブラリを使用して行います。

下がサンプルコードになります。

タグの属性や値を取得

タグの属性や値を取得するには、「name」タグや「string」タグを利用します。

出力方法構文コードディング例
タグのすべてを取得soup.<タグ名>soup.title
タグ名を取得soup.<タグ名>.namesoup.title.name
タグの値を取得soup.<タグ名>.stringsoup.title.string

下がサンプルコードになります。

取得したHTMLテキストを出力

取得したHTMLテキストを出力するには「prettify()」メソッドを使用します。

取得構文コードディング例
全テキストを取得soup.prettify()soup.prettify()
タグを指定して取得soup.<タグ名>.prettify()soup.head.prettify()

下がサンプルコードになります。

スポンサードリンク

関連記事

-Python, プログラミング

Translate »

Copyright© shimidai2100 , 2018 All Rights Reserved.