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(“.クラス名”) |
id | html_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(“.クラス名”) |
id | html_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メソッドの対応についてサンプルコードと共に解説しました。
この記事で不明な点や気になるところがあれば下のコメント欄までお願いします。それではまた!
コメント