BeautifulSoupのfindメソッドとselectメソッドの対応まとめ

BeautifulSoupを使ってスクレイピングしたHTMLソースの解析をする際によく使うのがfind系メソッドとselect系メソッドです。

毎回メソッドの記述方法を忘れてネットで調べるのですが、サイトによって扱うメソッドがバラバラで自分でコーディングをしたいときに混乱してしまいます。

ということで今回はBeautifulSoupのfind系メソッドとselect系メソッドの違いについてまとめました!

目次

find系メソッドとselect系メソッドの違い

基本構文

まずは各メソッドの基本構文について以下の表で押さえておきましょう。

メソッドfind系メソッドselect系メソッド
引数(検索条件)要素名、属性CSSセレクタ

find系メソッドでは引数に要素名や属性を与えるのに対し、select系メソッドではCSSセレクタを引数として与えます。

検索条件が同じ場合はどちらでも同じ結果が返ってきますが、個人的にはselect系メソッドの方が使いやすいと感じています。

ここからは実際の各メソッドについてサンプルコードも使いながら見ていきましょう。

findメソッドとselect_oneメソッド

findメソッドとselect_oneメソッドでは、引数として与えた検索条件を満たしたもののうちはじめの一つを返り値として返します。

基本的には以下の表のものを組み合わせて要素の検索をしていきます。

引数(検索条件)find メソッドselect メソッド
タグ名html_soup.find(“タグ名”)html_soup.select_one(“タグ名”)
クラスhtml_soup.find(class_=”クラス名”)html_soup.select_one(“.クラス名”)
idhtml_soup.find(id=”id名”)html_soup.select_one(“#id名”)

ここではサンプルコードを通して確認してみましょう。

<body>
    <h1>サンプルコード</h1>

    <ul class="fruit">
        <li id="apple">アップル</li>
        <li id="orange">オレンジ</li>
        <li id="peach">ピーチ</li>
    </ul>



    <ol class="fruit">
        <li id="apple">りんご</li>
        <li id="banana">バナナ</li>
        <li id="lemmon">レモン</li>
    </ol>
</body>

タグ<h1>の取得

html_soup.find("h1")
html_soup.select_one("h1")
<h1>サンプルコード</h1>

class=”fruit”の取得

html_soup.find(class_="fruit")
html_soup.select_one(".fruit")
<ul class="fruit">
<li id="apple">アップル</li>
<li id="orange">オレンジ</li>
<li id="peach">ピーチ</li>
</ul>

id=”apple”の取得

html_soup.find(id="apple")
html_soup.select_one("#apple")
<li id="apple">アップル</li>

find_allメソッドとselectメソッド

find_allメソッドとselectメソッドでは、引数として与えた検索条件をみたしたもの全てをリスト型で返します。(検索条件を満たすものが見つからなかった場合は空リスト[]を返します。)

以下各メソッドの基本構文です。

引数(検索条件)find_all メソッドselect メソッド
タグ名html_soup.find_all(“タグ名”)html_soup.select(“タグ名”)
クラスhtml_soup.find_all(class_=”クラス名”)html_soup.select(“.クラス名”)
idhtml_soup.find_all(id=”id名”)html_soup.select(“#id名”)

こちらもサンプルコードを通して確認してみましょう。

タグ<li>の取得

html_soup.find_all("li")
html_soup.select("li")
[<li id="apple">アップル</li>, <li id="orange">オレンジ</li>, <li id="peach">ピーチ</li>, <li id="apple">りんご</li>, <li id="banana">バナナ</li>, <li id="lemmon">レモン</li>]

class=”fruit”の取得

html_soup.find_all(class="fruit")
html_soup.select(".fruit")
[<ul class="fruit">
<li id="apple">アップル</li>
<li id="orange">オレンジ</li>
<li id="peach">ピーチ</li>
</ul>, <ol class="fruit">
<li id="apple">りんご</li>
<li id="banana">バナナ</li>
<li id="lemmon">レモン</li>
</ol>]

id=”apple”の取得

html_soup.find_all(id="apple")
html_soup.select("#apple")
[<li id="apple">アップル</li>, <li id="apple">りんご</li>]

まとめ

今回はBeautifulSoupのfindメソッドとselectメソッドの対応についてサンプルコードと共に解説しました。

この記事で不明な点や気になるところがあれば下のコメント欄までお願いします。それではまた!

よかったらシェアしてね!

この記事を書いた人

えだはのアバター えだは 大学生

国立大学で情報工学を専攻中の22歳の♂。
運営ブログの閲覧者が壊滅的に少ない。

コメント

コメントする

目次