スクレイピング 中級

86. CSSセレクタで取得する(select)

CSSセレクタという、もう1つの検索方法

find_all()の書き方に慣れてきたら、もう1つの方法としてselect()があります。これはWebデザインで使われる「CSSセレクタ」という指定方法がそのまま使え、'.price'(class="price"の要素)や'#title'(id="title"の要素)のように、直感的に絞り込めます。select()は一致するものすべてを、select_one()は最初の1つだけを返します。

📝 重要:find_all()とselect()はできることが似ています。どちらか一方に慣れれば十分なので、CSSセレクタに馴染みがある人はselect()、無い人はfind_all()を中心に使うと良いでしょう。

サンプルコード

from bs4 import BeautifulSoup

html = '<ul id="fruits"><li class="item">りんご</li><li class="item">バナナ</li></ul>'
soup = BeautifulSoup(html, 'html.parser')

items = soup.select('#fruits .item')
for item in items:
    print(item.text)
'#fruits .item'は「idがfruitsの要素の中にある、classがitemの要素」を表すCSSセレクタです。select()にこの文字列を渡すだけで、条件に一致するすべての要素を取得できます。

📝 練習問題

練習問題:'<p class="note">お知らせA</p><p class="note">お知らせB</p>'というHTMLから、select()で'.note'に一致するすべての要素のテキストを表示してください。